Here's how i've done it.
format = WaveFormat.CreateIeeeFloatWaveFormat(readerStream.WaveFormat.SampleRate, 2);
Like this:
//Convert wave to samples
format = WaveFormat.CreateIeeeFloatWaveFormat(readerStream.WaveFormat.SampleRate, 2);
// Provide PCM conversion if needed
if (readerStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
{
readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream);
readerStream = new BlockAlignReductionStream(readerStream);
}
// Provide conversion to 16 bits if needed
if (readerStream.WaveFormat.BitsPerSample != 16)
{
readerStream = new WaveFormatConversionStream(format, readerStream);
}
mixingSampleProvider = new MixingSampleProvider(format);
waveChannel = new WaveChannel32(readerStream);
//Convert wave to samples
waveToSample = new WaveToSampleProvider(waveChannel);
//Provide metering support
meterSampleProvider = new MeteringSampleProvider(waveToSample);
//Provide volume support
volumeSampleProvider = new VolumeSampleProvider(meterSampleProvider);
//Convert samples back to wave
sampleToWave = new SampleToWaveProvider(volumeSampleProvider );
if (waveOutDevice == null)
{
waveOutDevice = new WaveOutEvent();
waveOutDevice.PlaybackStopped += new EventHandler<StoppedEventArgs>(waveOutDevice_PlaybackStopped);
}
waveOutDevice.DeviceNumber = CPCore.Instance.AudioOutDevice.Id;
waveOutDevice.Init(sampleToWave);
Everytime you need to support a new provider, use the last one as input for the next.Like this:
//Convert wave to samples
waveToSample = new WaveToSampleProvider(waveChannel);
//Provide metering support
meterSampleProvider = new MeteringSampleProvider(waveToSample);
//Provide volume support
volumeSampleProvider = new VolumeSampleProvider(meterSampleProvider);
//Add the samples to the mixed stream used to enable crossfading
mixingSampleProvider.AddMixerInput(volumeSampleProvider);
//Add support for equalizer
equalizerSampleProvider = new EqualizerSampleProvider(mixingSampleProvider, equalizerBands);
equalizerSampleProvider.IsActive = initialEQIsActive.GetValueOrDefault();
//Convert samples back to wave
sampleToWave = new SampleToWaveProvider(equalizerSampleProvider);