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);