AcmNotPossible用WaveFormatConversionStream调用acmStreamOpen

时间:2015-10-15 16:33:40

标签: c# naudio

我要做的是将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);

其中WaveProviderToWaveStreamthis answer的一个类。 但是,这会在WaveFormatConversionStream给我以下例外。

NAudio.MmException:AcmNotPossible calling acmStreamOpen

我试过

msp.addMixerInput(MediaFoundationResampler(waveProvider, commonWaveFormat).toSampleProvider());

虽然有效,但在麦克风通话和听到输出之间产生了太大的延迟。

1 个答案:

答案 0 :(得分:1)

您只需在to 0对象本身上指定要记录的格式就会容易得多。 (只需在开始录制之前设置WaveIn属性。它应该仍然是16位PCM,但是指定你想要的采样率和通道数)

然后,您可以使用WaveFormat扩展程序将BufferedWaveProvider转换为ISampleProvider,这样您就可以将其添加到ToSampleProvider