【问题标题】:MFT NAudio Resampling on the flyMFT NAudio 动态重采样
【发布时间】:2015-05-30 05:35:50
【问题描述】:

我想即时使用 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);

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

我正在查看的只是重新采样音频的“当前播放位置”,并丢弃任何其他位置信息。

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

【问题讨论】:

    标签: naudio ms-media-foundation resampling


    【解决方案1】:

    要即时重新采样,只需将阅读器直接传递给MediaFoundationResampler。您现在将拥有一个ISampleProvider,因此您将无法使用WaveChannel32,但实际上这是一个过时的类,您应该能够使用NAudio 的其他ISampleProvider 类做任何您需要的事情。

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 2013-12-08
      • 2012-05-12
      • 1970-01-01
      • 2022-09-28
      相关资源
      最近更新 更多