AcmNotPossible 使用 WaveFormatConversionStream 调用 acmStreamOpen
AcmNotPossible calling acmStreamOpen with WaveFormatConversionStream
我想做的是将 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 的 class。
但是,这在 WaveFormatConversionStream
.
处给了我以下异常
NAudio.MmException:AcmNotPossible calling acmStreamOpen
我试过了
msp.addMixerInput(MediaFoundationResampler(waveProvider, commonWaveFormat).toSampleProvider());
虽然有效,但在对着麦克风说话和听到输出之间产生了太大的延迟。
您只需在 WaveIn
对象本身上指定要记录的格式会容易得多。 (在开始录音前设置WaveFormat
属性即可。应该还是16位PCM,但要指定你想要的采样率和通道数)
然后您可以使用 ToSampleProvider
扩展方法将您的 BufferedWaveProvider
变成 ISampleProvider
,这样您就可以将它添加到 MixingSampleProvider
我想做的是将 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 的 class。
但是,这在 WaveFormatConversionStream
.
NAudio.MmException:AcmNotPossible calling acmStreamOpen
我试过了
msp.addMixerInput(MediaFoundationResampler(waveProvider, commonWaveFormat).toSampleProvider());
虽然有效,但在对着麦克风说话和听到输出之间产生了太大的延迟。
您只需在 WaveIn
对象本身上指定要记录的格式会容易得多。 (在开始录音前设置WaveFormat
属性即可。应该还是16位PCM,但要指定你想要的采样率和通道数)
然后您可以使用 ToSampleProvider
扩展方法将您的 BufferedWaveProvider
变成 ISampleProvider
,这样您就可以将它添加到 MixingSampleProvider