【问题标题】:AcmNotPossible calling acmStreamOpen with WaveFormatConversionStreamAcmNotPossible 使用 WaveFormatConversionStream 调用 acmStreamOpen
【发布时间】:2015-10-15 16:33:39
【问题描述】:

我正在尝试将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());

这有效,但在对着麦克风说话和听到输出之间产生了太大的延迟。

【问题讨论】:

    标签: c# naudio


    【解决方案1】:

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

    然后您可以使用ToSampleProvider 扩展方法将您的BufferedWaveProvider 转换为ISampleProvider,这将允许您将其添加到MixingSampleProvider

    【讨论】:

    • 感谢您的回复 - 我想将麦克风输入与 MP3FileReader 读取的 mp3 文件混合。由于它们不共享相同的波形,我需要适当地转换它们。现在我选择了给定的格式,因为它是 mp3 文件在相同示例中的 WaveFormat。但我不确定MP3FileReader 总是返回相同的 WaveFormat,还是对于每个可能的 mp3 文件总是返回相同的?如果不是,我仍然需要转换 mp3filereader。
    • 另外,如果 MP3FileReader 确实返回相同的 WaveFormat,我仍然需要调整 mp3 波形,因为混音器只接受 IEEE-WaveFormats。如果我错了,请纠正我
    • 但是您提供的答案解决了我在问题中提出的问题,所以我会接受它 - 如果您仍然可以帮助我解决我在 cmets 中写的问题,我很高兴 ;)
    • 没关系,我将其作为新答案发布,以免失控:stackoverflow.com/questions/33170763/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多