How do I resample an in-memory audio stream (byte[]) with NAudio?
我想将音频字节数组从 8Khz 重新采样到 48Khz。音频流作为 byte[] 从网络套接字获取。
阅读 Mark Heath 的关于使用 NAudio 重新采样的博客,我遇到了以下代码
1 2 3 4 5 6 7 8
| int outRate = 16000;
var inFile = @"test.mp3";
var outFile = @"test resampled WDL.wav";
using (var reader = new AudioFileReader (inFile ))
{
var resampler = new WdlResamplingSampleProvider (reader, outRate );
WaveFileWriter .CreateWaveFile16(outFile, resampler );
} |
但此代码作用于文件流 (AudioFileReader) 而不是内存数据 (byte[])。如何修改此代码以对我的字节数组进行上采样?
编辑:基本上我想将从网络对等点获得的 8 KHz 数据上采样到 48 KHz 并使用 WASAPI 播放。
您对重采样器的输入可以是 BufferedWaveProvider 或 RawSourceWaveStream。但是,您不能使用 CreateWaveFile16 实时重新采样。您只需要读取您期望可用的音频量并将其写入 WAV 文件。
- WdlResamplingSampleProvider 接受一个实现 ISampleProvider 的对象,但 BufferedWaveProvider 和 RawSourceWaveStream 都实现了 IWaveProvider。这是否意味着我需要实现实现 ISampleProvider 的自定义 BufferedWaveProvider 或者是否有其他解决方法?
-
而且我不需要写入 wav 文件。相反,我想使用 WASAPI 播放上采样的音频数据。我认为我提出问题的方式让你感到困惑。因此更新问题
-
@Fadi 您可以使用 .ToSampleProvider 扩展方法。但是,如果您只是想使用 WASAPI 播放上采样数据,那么只需将 BufferedWaveProvider 传递给 WasapiOut,因为我已经在 WasapiOut 中放置了一个重采样器。