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

NAudio最长可录制多长时间?如何设置延长录制时长至80分钟?

NAudio延长扬声器输出录制时长配置方案

30分钟录制上限通常来自两个核心原因:一是传统WAV格式的32位长度字段限制,最大仅支持4GB文件,对应未压缩16位44.1kHz立体声约35分钟的音频,和常见的30分钟左右上限吻合;二是捕获端缓冲区配置不合理、录制逻辑存在误触发停止的条件。可通过以下配置调整解决:

  • 采用支持大文件的写入逻辑
    如果需要输出WAV格式,不要使用默认的WaveFileWriter,改用NAudio内置的WaveFileWriter.CreateWaveFile64方法生成64位长度字段的WAV文件,可突破4GB大小限制,完全覆盖80分钟的录制需求。如果对格式无强制要求,也可以边录制边写入MP3、AAC等压缩格式,大幅降低文件体积,从根源避免大小限制触发中断。

  • 调整环回捕获缓冲区配置
    录制扬声器输出一般使用WasapiLoopbackCapture实现环回捕获,初始化时可显式指定更长的缓冲区时长,降低长时间录制下系统高负载导致的缓冲区溢出、录制中断概率,示例配置:
    var capture = new WasapiLoopbackCapture(TimeSpan.FromSeconds(2));
    上述代码将默认100ms缓冲区调整为2秒,稳定性更高。

  • 检查录制逻辑与存储条件
    首先排查代码中是否存在手动预设的30分钟停止阈值、内存占用阈值判断,避免误触发停止。录制过程中直接把捕获到的音频数据写入磁盘,不要全量缓存在内存中,防止内存溢出中断。同时确保存储录制文件的磁盘剩余空间大于10GB(未压缩16位44.1kHz立体声80分钟约占8GB空间),避免磁盘写满导致录制提前结束。

以下是可稳定实现80分钟录制的核心代码示例:

// 初始化扬声器环回捕获,设置2秒缓冲区
var capture = new WasapiLoopbackCapture(TimeSpan.FromSeconds(2));
// 使用64位WAV写入器,支持超过4GB的大文件
using (var writer = WaveFileWriter.CreateWaveFile64(@"D:\long_time_record.wav", capture.WaveFormat))
{
    // 捕获到音频数据时直接写入磁盘
    capture.DataAvailable += (sender, args) =>
    {
        writer.Write(args.Buffer, 0, args.BytesRecorded);
    };
    // 启动录制
    capture.StartRecording();
    // 等待80分钟后停止录制
    await Task.Delay(TimeSpan.FromMinutes(80));
    capture.StopRecording();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:57:00