/// <summary>
        /// This provides an NAudio WaveProvider that can be used to play this file
        /// </summary>
        /// <returns>null on error, otherwise a wave provider</returns>
        /// <example>
        ///  <code>
        ///    var waveOut      = new WaveOut();
        ///    var waveProvider = WEM.WaveProvider();
        ///    waveOut.Init(waveProvider);
        ///    waveOut.Play();
        ///    Thread.Sleep(30000);
        ///    waveOut.Stop();
        ///    waveProvider.Dispose();
        ///    waveOut.Dispose();
        ///  </code>
        /// </example>
        public IWaveProvider WaveProvider()
        {
            if (Data_start < 0)
            {
                return(null);
            }

            // Sanity check that the file header was scanned.
            // The caller should do this, but may not have.
            if (0 == AudioFormat)
            {
                Open();
            }


            binaryReader.BaseStream.Position = Data_start;

            // Get the WaveProvider that matches the format
            if (2 == AudioFormat)
            {
                return(new IMAWaveProvider(binaryReader, (int)Data_size, (int)SampleRate, (int)NumChannels));
            }
            var st = binaryReader.BaseStream;

            st.Position = Data_start;
            var vorbisPackets = transcoder.Transcode(binaryReader, setup_ofs, audio_ofs);

            return(new SampleToWaveProvider(new VorbisSampleProvider(vorbisPackets)));
        }
Exemple #2
0
        /// <summary>
        /// This provides an NAudio WaveProvider that can be used to play this file
        /// </summary>
        /// <returns>null on error, otherwise a wave provider</returns>
        /// <example>
        ///  <code>
        ///    var waveOut      = new WaveOut();
        ///    var waveProvider = WEM.WaveProvider();
        ///    waveOut.Init(waveProvider);
        ///    waveOut.Play();
        ///    Thread.Sleep(30000);
        ///    waveOut.Stop();
        ///    waveProvider.Dispose();
        ///    waveOut.Dispose();
        ///  </code>
        /// </example>
        public IWaveProvider WaveProvider()
        {
            binaryReader.BaseStream.Position = Data_start;

            // Get the WaveProvider that matches the format
            if (2 == AudioFormat)
            {
                return(new IMAWaveProvider(binaryReader, (int)Data_size, (int)SampleRate, (int)NumChannels));
            }
            var st = binaryReader.BaseStream;

            st.Position = Data_start;
            var vorbisPackets = transcoder.Transcode(binaryReader, setup_ofs, audio_ofs);

            return(new SampleToWaveProvider(new VorbisSampleProvider(vorbisPackets)));
        }