我要做的是将WaveIn
麦克风输入转换为其他WaveFormat,然后将其添加到MixingSampleProvider。
WaveIn waveIn = new WaveIn(this.Handle);
waveIn.BufferMilliseconds = 25;
waveIn.DataAvailable += waveIn_DataAvailable;
// create wave provider
WaveProvider waveProvider = new BufferedWaveProvider(waveIn.WaveFormat);
WaveFormat commonWaveFormat = WaveFormat.CreateIeeeFloatWaveFormat(44100, 2);
MixingSampleProvider msp = new MixingSampleProvider(commonWaveFormat);
WaveFormatConversionStream wfcs = new WaveFormatConversionStream(commonWaveFormat,new WaveProviderToWaveStream(waveProvider));
msp.AddMixerInput(wfcs);
// create wave output to speakers
waveOut = new WaveOut();
waveOut.DesiredLatency = 100;
waveOut.Init(msp);
其中WaveProviderToWaveStream
是this answer的一个类。
但是,这会在WaveFormatConversionStream
给我以下例外。
NAudio.MmException:AcmNotPossible calling acmStreamOpen
我试过
msp.addMixerInput(MediaFoundationResampler(waveProvider, commonWaveFormat).toSampleProvider());
虽然有效,但在麦克风通话和听到输出之间产生了太大的延迟。
答案 0 :(得分:1)
您只需在to 0
对象本身上指定要记录的格式就会容易得多。 (只需在开始录制之前设置WaveIn
属性。它应该仍然是16位PCM,但是指定你想要的采样率和通道数)
然后,您可以使用WaveFormat
扩展程序将BufferedWaveProvider
转换为ISampleProvider
,这样您就可以将其添加到ToSampleProvider