using System;
using System.IO;
namespace Robust.Shared.Audio.AudioLoading;
///
/// Implements functionality for loading audio files.
///
///
///
internal static class AudioLoader
{
///
/// Test if the given file name is something that we can load.
///
///
/// This is detected based on file extension.
///
public static bool IsLoadableAudioFile(ReadOnlySpan filename)
{
var extension = Path.GetExtension(filename);
return extension is ".wav" or ".ogg";
}
///
/// Load metadata about an audio file. Can handle all supported audio file types.
///
/// Stream containing audio file data to load.
/// File name of the audio file. Used to detect which file type it is.
public static AudioMetadata LoadAudioMetadata(Stream stream, ReadOnlySpan filename)
{
var extension = Path.GetExtension(filename);
if (extension is ".ogg")
{
return AudioLoaderOgg.LoadAudioMetadata(stream);
}
else if (extension is ".wav")
{
return AudioLoaderWav.LoadAudioMetadata(stream);
}
else
{
throw new ArgumentException($"Unknown file type: {extension}");
}
}
}
///
/// Contains basic metadata of an audio file.
///
///
internal record AudioMetadata(TimeSpan Length, int ChannelCount, string? Title = null, string? Artist = null);