MFT NAudio 动态重采样

MFT NAudio Resampling on the fly

我想使用 NAudio 和 MFT 即时对音频文件重新采样。

例如,我有以下音频文件:

文件名:MyAudioFile.mp3

时长:10 秒

播放此文件时,我只想将该特定位置重新采样为所需格式的 WAV。

所以,如果 "MyAudioFile.mp3" 的长度是 10 秒,而 "current play position" 是 2.5 秒,我只想重新采样 那部分数据以48KHz的采样率转换成WAV格式。

当音频继续播放时,同样,只有 "current play position" 必须重新采样。

我尝试了以下代码:

    WaveStream reader = new MediaFoundationReaderRT([path of 
    "MyAudioFile.mp3"]);

    MemoryStream outMemStream = new MemoryStream(); //Decode to memory 
    stream

    using (reader)
    using (var resampler = new MediaFoundationResampler(reader, 
    resampler.WaveFormat))
    {
        WaveFileWriter.CreateWaveFile(outMemStream, resampler);
        rsws = new RawSourceWaveStream(outMemStream, resampler.WaveFormat);
    }

    WaveChannel32 waveformInputStream = new WaveChannel32(rsws);

重采样正常进行;但是它会重新采样整个音频文件,这需要时间。

我正在查看的只是对音频的 "current play position" 进行重采样,并丢弃任何其他位置信息。

谢谢!如果您能提供一些样品,我们将不胜感激。

要即时重新采样,只需将 reader 直接传递到 MediaFoundationResampler。您现在将拥有一个 ISampleProvider,因此您将无法使用 WaveChannel32,但实际上那现在已经过时了 class,您应该可以使用其他的来做任何您需要的事情ISampleProvider class来自 NAudio。