我想用NAudio来阅读,修改和写波。是否可以直接访问此库中的波形文件的各个样本。例如,我想打开一个wav文件,然后我想在所有通道上获取第五个样本的值作为浮点数。我还想知道天气如何改变这些第五个样本,之后如何保存这个修改后的结果。你能帮忙告诉我,这是怎么做的。到目前为止我还没有找到任何文件,有没有?谢谢。
答案 0 :(得分:3)
是的,NAudio旨在让您访问各个音频样本。但是,有许多不同的音频格式(位深度,压缩类型等),因此没有一种通用的方法可以做到这一点。 WaveFileReader
类将允许您访问原始字节数据。然后,您可以自己将每对字节转换为16位样本,或者利用一些NAudio帮助程序类,使您可以更轻松地直接使用16位音频(假设您的音频为16位)。然后使用WaveFileWriter
类将修改后的音频写回磁盘。
或者,如果你想将音频作为浮点数处理,你可以使用新的AudioFileReader
类实现ISampleProvider
,这使得很容易将每个样本的值作为浮点数来检查通过Read方法。您可以创建自己的ISampleProvider
,其读取方法从源AudioFileReader
读取并检查并修改音频:
var reader = new AudioFileReader();
var mySampleProvider = new MySampleProvider(reader);
WaveFileWriter.CreateWaveFile(mySampleProvider, "example.wav");
...
class MySampleProvider: ISampleProvider
{
private readonly ISampleProvider source;
public MySampleProvider(ISampleProvider source)
{
this.source = source;
}
public int Read(float[] buffer, int offset, int count)
{
int samplesRead = source.Read(buffer, offset, count);
// TODO: examine and optionally change the contents of buffer
return samplesRead;
}
public WaveFormat WaveFormat
{
get { return source.WaveFormat; }
}
}