我有以下构造函数,它可以直接成功地将粉红噪声播放到我的音频输出设备:
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文件中读取(据我所知)。
有人可以指出我正确的方向吗?
感谢。
答案 0 :(得分:1)
以下是如何创建包含10秒粉红噪声的WAV文件:
var pinkNoiseGenerator = new SignalGenerator();
pinkNoiseGenerator.Type = SignalGeneratorType.Pink;
WaveFileWriter.CreateWaveFile16("pinkNoise.wav", pinkNoiseGenerator.Take(TimeSpan.FromSeconds(10)));