Quantcast
Channel: NAudio
Viewing all articles
Browse latest Browse all 5831

New Post: Stream WAV File

$
0
0
I am trying to figure out how to stream a WAV file. There are examples on stream MP3 files but nothing for a WAV file. I have managed to create a WaveStream and play it back. However, when I try to break it up the first set bytes plays but after that I get noise.

In the example below the ConcurrentQueue will simulate what I want to stream:
// Class member variables:
ConcurrentQueue<byte[]> _cq1 = new ConcurrentQueue<byte[]>();
private static WaveFormat _waveFormat = new WaveFormat(16000, 16, 2);
private static WaveOut _waveOut1 = new WaveOut();
private static BufferedWaveProvider _waveProvider1 =
             new BufferedWaveProvider(_waveFormat);

// Class constructor
public MainWindow()
{
    _waveOut1.Init(_waveProvider1);
    _waveOut1.Play();
}

// These methods are executed on a seperate thread.
WaveStream convertedStream = GetAudio("MyFile.Wav");
AddAudio(convertedStream);


// This method is executed on a seperate thread.
PlayAudio();


 

        private WaveStream GetAudio(string wavFile)
        {
            WaveFileReader reader = new WaveFileReader(wavFile);
            WaveStream convertedStream =
                new WaveFormatConversionStream(_waveFormat, reader);

            return convertedStream;
        }

        private void AddAudio(WaveStream convertedStream)
        {
            int bufferSize = (int)convertedStream.Length / _audioSamples;

            byte[] bytes = new byte[bufferSize];
            int count = bufferSize;
            convertedStream.Position = 0;
            int offset = 0;
            for (; ; )
            {
                count = convertedStream.Read(bytes, offset, bufferSize);
                _cq1.Enqueue(bytes);
                offset += bufferSize;
                if (count == 0)
                {
                    break;
                }
            }
         }

        private void PlayAudio()
        {
            byte[] buffer;
            for (; ; )
            {
                if (_cq1.TryDequeue(out buffer))
                {
                    _waveProvider1.AddSamples(buffer, 0, buffer.Length);
                }

                Thread.Sleep(_sleepMilliSeconds);
            }
        }

Viewing all articles
Browse latest Browse all 5831

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>