Да, 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; }
}
}