簡體   English   中英

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此答案中的類。 但是,這給了我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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM