C#NAudio:如何访问SignalGenerator提供的样本,以便将它们保存为WAVE格式?

时间:2018-03-23 18:02:30

标签: c# audio naudio wave

我有以下构造函数,它可以直接成功地将粉红噪声播放到我的音频输出设备:

public WAVEManager(string inputFileName, string outputFileName)
{
        IWavePlayer outputDevice;
        outputDevice = new WaveOutEvent();

        SignalGenerator pinkNoiseGenerator = new SignalGenerator();
        pinkNoiseGenerator.Type = SignalGeneratorType.Pink;
        outputDevice.Init(pinkNoiseGenerator);
        outputDevice.Play();

        // Wait for 10 seconds
        System.Threading.Thread.Sleep(10000);
}

一切正常。我明白,如果我想写一个.wav,我必须像这样初始化一个WaveFileWriter:

WaveFileWriter writer = new WaveFileWriter(outputFileName, pinkNoiseGenerator.WaveFormat);

然后写入创建的WAVE文件:

writer.WriteData(buffer, 0, numSamples);

我不知道如何直接从buffer填充pinkNoiseGenerator。我搜索了文档和示例,但无法找到与此有关的任何内容 - 我想它必须涉及.Read()类的SignalGenerator方法,但由于生成器无限期播放,它没有定义的长度。对我而言,这意味着buffer无法以相同的方式填充,例如,直接从输入WAVE文件中读取(据我所知)。

有人可以指出我正确的方向吗?

感谢。

1 个答案:

答案 0 :(得分:1)

以下是如何创建包含10秒粉红噪声的WAV文件:

var pinkNoiseGenerator = new SignalGenerator();
pinkNoiseGenerator.Type = SignalGeneratorType.Pink;
WaveFileWriter.CreateWaveFile16("pinkNoise.wav", pinkNoiseGenerator.Take(TimeSpan.FromSeconds(10)));