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

C# NAudio:如何获取SignalGenerator样本并保存为WAV格式

解决粉红噪声写入WAV文件的问题

嘿,我明白你的困惑了!其实SignalGenerator实现了IWaveProvider接口,它的Read()方法就是用来生成并返回音频数据的——哪怕它是“无限”的,我们完全可以自己控制读取的时长,从而生成固定长度的WAV文件。

下面是具体的实现思路和代码示例:

核心思路

  1. 先确定你要生成的音频时长(比如你之前用到的10秒),根据SignalGenerator的WaveFormat计算出需要写入的总字节数。
  2. 创建一个固定大小的缓冲区(比如4096字节),循环调用SignalGenerator.Read()填充缓冲区,再把缓冲区的数据写入WaveFileWriter。
  3. 累计写入的字节数,直到达到预设的总字节数就停止循环,最后自动释放资源。

完整代码示例

public WAVEManager(string inputFileName, string outputFileName)
{
    // 初始化粉红噪声生成器
    SignalGenerator pinkNoiseGenerator = new SignalGenerator();
    pinkNoiseGenerator.Type = SignalGeneratorType.Pink;
    var waveFormat = pinkNoiseGenerator.WaveFormat;

    // 设定要生成的音频时长(这里沿用你之前的10秒)
    int durationSeconds = 10;
    long totalBytesToWrite = (long)waveFormat.AverageBytesPerSecond * durationSeconds;
    long bytesWritten = 0;

    // 使用using语句自动释放WaveFileWriter资源
    using (WaveFileWriter writer = new WaveFileWriter(outputFileName, waveFormat))
    {
        // 定义缓冲区大小(可根据需求调整,推荐用2的幂数如4096、8192)
        byte[] buffer = new byte[4096];
        
        while (bytesWritten < totalBytesToWrite)
        {
            // 从生成器读取数据填充缓冲区
            int bytesRead = pinkNoiseGenerator.Read(buffer, 0, buffer.Length);
            if (bytesRead == 0)
                break; // 理论上SignalGenerator不会返回0,做个兜底判断
            
            // 将缓冲区数据写入WAV文件
            writer.Write(buffer, 0, bytesRead);
            bytesWritten += bytesRead;
        }
    }

    // 如果仍需要播放功能,可保留以下代码
    // IWavePlayer outputDevice = new WaveOutEvent();
    // outputDevice.Init(pinkNoiseGenerator);
    // outputDevice.Play();
    // System.Threading.Thread.Sleep(10000);
    // outputDevice.Stop();
    // outputDevice.Dispose();
}

关键说明

  • SignalGenerator.Read()方法会按需生成音频数据,哪怕它没有“固定长度”,我们通过控制累计写入的字节数,就能精准得到指定时长的音频文件。
  • using语句能确保WaveFileWriter在使用完毕后自动释放,避免文件被占用的问题。
  • 缓冲区大小可以灵活调整,选择2的幂数是因为大部分音频处理场景下这类大小的效率更高。

这样就能顺利把粉红噪声写入WAV文件啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:57:12