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。
我想使用 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。