[英]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
是此答案中的類。 但是,這給了我WaveFormatConversionStream
的以下異常。
NAudio.MmException:AcmNotPossible calling acmStreamOpen
我試過了
msp.addMixerInput(MediaFoundationResampler(waveProvider, commonWaveFormat).toSampleProvider());
可以,但是在對着麥克風講話和聽到輸出之間產生了太大的延遲。
您只需在WaveIn
對象本身上指定要記錄的格式,就會容易得多。 (只需在開始記錄之前設置WaveFormat
屬性。它仍然應該是16位PCM,但是指定所需的采樣率和通道數)
然后,您可以使用ToSampleProvider
擴展方法將BufferedWaveProvider
轉換為ISampleProvider
,該方法將使您將其添加到MixingSampleProvider
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.