在音频文件中添加指定时长的蜂鸣声或静音 | NAudio | C#
用NAudio添加静音或蜂鸣声的实现方案
嘿,这个需求NAudio完全能轻松搞定,我来给你拆解下具体用哪些组件,以及怎么实现:
一、添加指定时长的静音
核心用到的NAudio组件是 SilenceProvider(专门生成静音音频流)和 ConcatenatingWaveProvider(用来拼接原音频与静音流)。如果需要在音频中间插入静音,只需要把原音频拆分成前后两段,再和静音流拼接即可。
代码示例(在音频末尾添加5秒静音):
using NAudio.Wave; // 读取原音频文件 using var originalAudio = new WaveFileReader("your_input_audio.wav"); var waveFormat = originalAudio.WaveFormat; // 创建静音提供者,设置时长为5秒 var silenceProvider = new SilenceProvider(waveFormat) { Duration = TimeSpan.FromSeconds(5) }; // 拼接原音频和静音流 var concatenatedProvider = new ConcatenatingWaveProvider(); concatenatedProvider.AddInputStream(originalAudio); concatenatedProvider.AddInputStream(silenceProvider); // 保存处理后的音频 WaveFileWriter.CreateWaveFile("output_with_silence.wav", concatenatedProvider);
二、添加指定时长的蜂鸣声
蜂鸣声本质是正弦波信号,NAudio的 SignalGenerator 组件可以直接生成这类波形,同样搭配ConcatenatingWaveProvider完成拼接,或者用MixingWaveProvider把蜂鸣声叠加到原音频上(比如在原音频播放时同时响起蜂鸣)。
代码示例(在音频末尾添加2秒440Hz蜂鸣声):
using NAudio.Wave; using var originalAudio = new WaveFileReader("your_input_audio.wav"); var waveFormat = originalAudio.WaveFormat; // 创建正弦波生成器,配置蜂鸣参数 var beepGenerator = new SignalGenerator(waveFormat.SampleRate, waveFormat.Channels) { Type = SignalGeneratorType.Sin, // 正弦波 Frequency = 440, // A4标准音调,可自行调整 Gain = 0.5f // 音量,避免过大导致音频失真 }; // 将蜂鸣生成器转为固定时长的流(2秒) var beepStream = new WaveProviderToWaveStream(beepGenerator); beepStream.SetLength(waveFormat.AverageBytesPerSecond * 2); // 拼接原音频和蜂鸣流 var concatenatedProvider = new ConcatenatingWaveProvider(); concatenatedProvider.AddInputStream(originalAudio); concatenatedProvider.AddInputStream(beepStream); // 保存结果 WaveFileWriter.CreateWaveFile("output_with_beep.wav", concatenatedProvider);
注意事项
- 如果原音频是MP3、AAC这类压缩格式,需要先通过
WaveFormatConversionStream转换成PCM格式(比如WaveFormat.CreateIeeeFloatWaveFormat或WaveFormat.GetWaveFormat16Bit),否则会出现格式不兼容的问题。 - 如果需要在音频中间插入静音/蜂鸣声,可以用
WaveFileReader的Read方法截取原音频的前后两段,再依次拼接即可。
内容的提问来源于stack exchange,提问作者Arindam Rudra
相关产品推荐
相关产品推荐

