Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }