Хромая WAV для массива и обратно в WAV с C / Stack Overflow

Могу ли я преобразовать файл wav в простой массив c double или int и преобразовать обратно в новый файл wav? Я хочу использовать фильтр c в файле WAV. Я красный, что с хромой можно. Но я не знаю как. Может кто-нибудь связать некоторую документацию или фрагмент кода, как я могу его использовать?

WAV-файл -> массив -> некоторые операции -> WAV-файл

Спасибо за ответы.

1

Решение

Это не имеет ничего общего с Хромой. Lame — это инструмент для кодирования файлов MP3.

Существует множество библиотек для чтения и записи файлов WAV. Вы даже можете написать свой собственный, но это неудобно, потому что файлы WAV имеют очень много различных форматов семплов: 8-битный, 16-битный, 24-битный, с плавающей запятой, ADPCM, µlaw и т. Д.

Ты можешь использовать libsndfile читать файлы WAV.

Причина, по которой это выделено жирным шрифтом + большим, заключается в том, что многие люди считают, что данные в файле WAV всегда начинаются с 44 байтов. Это просто неправда. Файл WAV является файлом RIFF и может содержать произвольное количество фрагментов данных, один или больше из которых содержит пример данных. Вы были бы прощены за неспособность обрабатывать эзотерические файлы WAV, но если вы сделаете предположения о расположении данных в файле, вы можете получить мусор.

3

Другие решения

Да, это возможно. Формат WAV достаточно хорошо определен и обычно использует 2 канала 16-битных отсчетов. Они могут быть представлены в точности как целые числа, числа с плавающей точкой и числа с двойным

Как сказал simonc в комментарии типичный формат настолько прост, что на самом деле не стоит учиться пользоваться библиотекой. Если длина wav не изменяется, преобразование / фильтрацию можно выполнить просто:

fread(header,1,44,in_file); fwrite(header,1,44,out_file);
short int block[1024];  // left and right channel will be interleaved.
while (c=fread(block, 2, 1024, fp))
{
filter_in_place(block,c);
fwrite(block, 2,c, out_file);
}
0

По вопросам рекламы [email protected]