Я хотел бы использовать NAudio для чтения, изменения и записи волн. Есть ли прямой доступ для получения и установки отдельных образцов волновых файлов в этой библиотеке. Например, я хотел бы открыть wav-файл, тогда я хотел бы получить значения пятых образцов на всех каналах в виде поплавков. Я также хотел бы знать, что есть способ изменить эти 5-ые образцы, и после этого, как я могу сохранить этот измененный результат. Не могли бы вы помочь и показать мне, как это можно сделать. До сих пор я не нашел никакой документации, есть ли? Спасибо.NAudio - индивидуальные образцы доступа и модификации
ответ
Да, 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; }
}
}
ИМХО, NAudio является излишеством для такого рода, что вы-которые-делают. Возможно, это: http://www.codeproject.com/Articles/35725/C-WAV-file-class-audio-mixing-and-some-light-audio –
Я заметил этот конкретный проект, но он больше не поддерживает чем моно и стерео wav-s. Не могли бы вы показать мне, как добраться до этих образцов, если у вас есть это знание? –
Было бы лучше, если бы вы начали с этого примера и, на мой взгляд, проделали свой путь, поскольку многоканальные файлы wav не поддерживаются во всех библиотеках. Здесь у нас есть автор, он, вероятно, пролил бы свет на эту тему. –