我想重采样一个音频文件使用NAudio和MFT在飞.
例如,我有以下音频文件:
文件名: MyAudioFile.mp3
持续时间:10秒
当这个文件被播放时,我只想以所需的格式重采样到WAV上的特定位置。
因此,如果"MyAudioFile.mp3“的长度为10秒,而”当前播放位置“为2.5秒,我想以48 KHz的采样速率将只重采样这部分数据为WAV格式。
当音频进一步发展,再次,只有“当前播放位置”必须重放。
我尝试了以下代码:
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);重采样正常进行;但是它会重新分配整个音频文件,这需要时间。
我所看到的只是重拾音频的“当前播放位置”,并丢弃任何其他位置信息。
谢谢!如果您能提供一些样品,非常感谢。
发布于 2015-05-29 21:35:50
要动态重采样,只需将读取器直接传递到MediaFoundationResampler。现在您将拥有一个ISampleProvider,因此您将无法使用WaveChannel32,但实际上,这是一个过时的类,您应该能够使用来自NAudio的其他ISampleProvider类执行所需的任何操作。
https://stackoverflow.com/questions/30462256
复制相似问题