NAudio - 个人样本访问&修改

时间:2012-03-13 18:25:17

标签: c# .net naudio

我想用NAudio来阅读,修改和写波。是否可以直接访问此库中的波形文件的各个样本。例如,我想打开一个wav文件,然后我想在所有通道上获取第五个样本的值作为浮点数。我还想知道天气如何改变这些第五个样本,之后如何保存这个修改后的结果。你能帮忙告诉我,这是怎么做的。到目前为止我还没有找到任何文件,有没有?谢谢。

1 个答案:

答案 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; }
    }
}