C# NAudio:如何访问 SignalGenerator 提供的样本以将它们保存为 WAVE 格式?
Posted
技术标签:
【中文标题】C# NAudio:如何访问 SignalGenerator 提供的样本以将它们保存为 WAVE 格式?【英文标题】:C# NAudio: How to access the samples provided by SignalGenerator in order to save them to WAVE format? 【发布时间】:2018-03-23 18:02:29 【问题描述】:我有以下构造函数,它成功地将粉红噪声直接播放到我的音频输出设备:
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
类的 .Read()
方法,但是由于生成器无限期地播放,它没有定义的长度。对我来说,这意味着buffer
不能像我们直接从输入 WAVE 文件中读取一样(据我所知)填充。
有人可以指点我正确的方向吗?
谢谢。
【问题讨论】:
【参考方案1】:创建包含 10 秒粉红噪声的 WAV 文件的方法如下:
var pinkNoiseGenerator = new SignalGenerator();
pinkNoiseGenerator.Type = SignalGeneratorType.Pink;
WaveFileWriter.CreateWaveFile16("pinkNoise.wav", pinkNoiseGenerator.Take(TimeSpan.FromSeconds(10)));
【讨论】:
干杯!对于下一阶段,我实际上需要直接访问样本以将它们乘以可变增益因子。最有效的方法是在创建的 .wav 上使用 WaveFileReader,或者有没有办法在上述解决方案中作为中间步骤? 只需将信号发生器包装在VolumeSampleProvider
中...或者更简单,使用SignalGenerator
本身的Gain
属性以上是关于C# NAudio:如何访问 SignalGenerator 提供的样本以将它们保存为 WAVE 格式?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Naudio 和 c# 修剪 mp3 帧的标题和边信息