private SoundEffect LoadSound(Stream stream, int length, string extension) { switch (extension) { case ".wav": if (!stream.CanSeek) { stream = new MemoryStream(stream.ReadBytes(length)); } return(SoundEffect.FromStream(stream)); case ".mp3": using (var mp3Stream = new MP3Stream(stream)) using (var ms = new MemoryStream()) { mp3Stream.CopyTo(ms); return(new SoundEffect(ms.ToArray(), mp3Stream.Frequency, (AudioChannels)mp3Stream.ChannelCount)); } case ".ogg": using (var reader = new VorbisReader(stream, true)) { var buffer = new byte[reader.TotalSamples * 2 * reader.Channels]; var floatBuf = new float[buffer.Length / 2]; reader.ReadSamples(floatBuf, 0, floatBuf.Length); MusicStreamingOGG.Convert(floatBuf, buffer); return(new SoundEffect(buffer, reader.SampleRate, (AudioChannels)reader.Channels)); } } throw new ResourceLoadException("Unknown sound extension " + extension); }
public T FromStream <T>(Stream stream) where T : class { if (typeof(T) != typeof(SoundEffect)) { throw AssetLoadException.FromInvalidReader <OggReader, T>(); } using var reader = new VorbisReader(stream, true); byte[] buffer = new byte[reader.TotalSamples * 2 * reader.Channels]; float[] floatBuf = new float[buffer.Length / 2]; reader.ReadSamples(floatBuf, 0, floatBuf.Length); MusicStreamingOGG.Convert(floatBuf, buffer); return(new SoundEffect(buffer, reader.SampleRate, (AudioChannels)reader.Channels) as T); }