You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何直接读取NAudio转换后的流,无需先写入文件再二次读取?

可以直接在内存中完成转换,无需将文件写入磁盘,核心是将WaveFileWriter的输出目标从本地文件路径替换为内存流MemoryStream,实现代码如下:

using (MediaFoundationReader reader = new MediaFoundationReader(audioUrl))
using (ResamplerDmoStream resampledReader = new ResamplerDmoStream(reader,
    new WaveFormat(reader.WaveFormat.SampleRate, reader.WaveFormat.BitsPerSample, 2)))
{
    // 初始化内存流作为WAV数据的输出载体
    using (var wavMemoryStream = new MemoryStream())
    {
        // leaveOpen设为true,避免WaveFileWriter释放时自动关闭内存流
        using (var waveWriter = new WaveFileWriter(wavMemoryStream, resampledReader.WaveFormat, leaveOpen: true))
        {
            resampledReader.CopyTo(waveWriter);
            waveWriter.Flush();
        }

        // 将内存流指针重置到起始位置,后续可直接读取
        wavMemoryStream.Position = 0;

        // 此处可直接操作内存流,示例:转为字节数组
        byte[] wavBytes = wavMemoryStream.ToArray();
        // 你的后续业务逻辑
    }
}

注意事项

  • 如果你的NAudio版本较低,没有带leaveOpen参数的WaveFileWriter构造函数,可以去掉waveWriter的using包裹,写完数据后手动调用Dispose()方法再操作内存流即可
  • 如果你只需要原始PCM采样数据、不需要WAV文件头,可以直接读取resampledReader流的内容,不需要走WaveFileWriter封装
  • 内存流使用完后会自动释放,不会产生磁盘IO和临时文件残留

内容的提问来源于stack exchange,提问作者Mahmoud Hefny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:15:05