C# NAudio:如何访问 SignalGenerator 提供的示例以便将它们保存为 WAVE 格式?
C# NAudio: How to access the samples provided by SignalGenerator in order to save them to WAVE format?
我有以下构造函数,它成功地将粉红噪声直接播放到我的音频输出设备:
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);
问题是我不知道如何直接从 pinkNoiseGenerator
填充 buffer
。我搜索了文档和示例,但找不到与此相关的任何内容 - 我想它必须涉及 SignalGenerator
class 的 .Read()
方法,但随着生成器无限期地播放,它没有定义的长度。对我来说,这意味着 buffer
不能像我们直接从输入 WAVE 文件读取(据我所知)那样填充。
有人能给我指出正确的方向吗?
谢谢。
以下是创建包含 10 秒粉红噪音的 WAV 文件的方法:
var pinkNoiseGenerator = new SignalGenerator();
pinkNoiseGenerator.Type = SignalGeneratorType.Pink;
WaveFileWriter.CreateWaveFile16("pinkNoise.wav", pinkNoiseGenerator.Take(TimeSpan.FromSeconds(10)));
我有以下构造函数,它成功地将粉红噪声直接播放到我的音频输出设备:
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);
问题是我不知道如何直接从 pinkNoiseGenerator
填充 buffer
。我搜索了文档和示例,但找不到与此相关的任何内容 - 我想它必须涉及 SignalGenerator
class 的 .Read()
方法,但随着生成器无限期地播放,它没有定义的长度。对我来说,这意味着 buffer
不能像我们直接从输入 WAVE 文件读取(据我所知)那样填充。
有人能给我指出正确的方向吗?
谢谢。
以下是创建包含 10 秒粉红噪音的 WAV 文件的方法:
var pinkNoiseGenerator = new SignalGenerator();
pinkNoiseGenerator.Type = SignalGeneratorType.Pink;
WaveFileWriter.CreateWaveFile16("pinkNoise.wav", pinkNoiseGenerator.Take(TimeSpan.FromSeconds(10)));