我有一个wav文件,我想试一下声音片段的增益(在较柔和的区域增强,在其他区域减小。我需要对1k +个文件进行处理)并将其保存回磁盘。 / p>
.NET似乎没有声音库,而且我找不到的音频库似乎都没有对此的控件(Accord,Naudio,SDL2,SharpDX;尽管我只是看不到自己的声音)寻找)。我还研究了WAV格式,尝试直接对字节流进行处理,但是我找不到比数据块是左右对样本更具体的东西。
因此,在访问.wav文件时,如何在每个样本的基础上调整响度?如果可能的话,我还希望有一个解决方案,使我也可以无缝处理其他声音文件格式。
答案 0 :(得分:0)
NAudio似乎能提供您想要的东西
ISampleProvider
IWaveProvider的优势在于它可以用来表示 任何格式的音频。它可以用于16,24或32位PCM音频,以及 即使是压缩音频(MP3,G.711等)。但是如果你表演 对音频进行任何类型的信号处理或分析, 您可能希望音频为32位IEEE浮点数 格式。尝试读取浮点值可能会很痛苦 C#中的一个字节[]。
因此ISampleProvider定义了一个接口,其中所有样本均为32 位浮点数
public interface ISampleProvider {
WaveFormat WaveFormat { get; }
int Read(float[] buffer, int offset, int.count);
}
https://github.com/naudio/NAudio/blob/master/Docs/WaveProviders.md#isampleprovider
创建自定义SampleProvider,该自定义SampleProvider在构造函数中采用输入SampleProvider。使用输入的Sample Provider获取样本,乘以您的收益: 输出样本=增益x输入样本
使用WaveFileWriter.CreateWaveFile将customSampleProvider.ToWaveProvider()输入适当的参数,以输出回wav文件。