Значения wav-файла

В C я использую библиотеку Libsndfile, чтобы помочь мне прочитать значения файла WAV, чтобы я мог сделать некоторые вычисления после них. Хотя, когда я получаю вывод файла, я не уверен, что означают эти числа. Почему цифры в миллионах? Сначала я думал, что это Гц, но это не имело смысла в моей голове. Информация, касающаяся файла WAV, представлена ​​ниже. Под этим я использую функцию sf_read_int() для записи значений в память.

Что делает sf_read_int()? Это было получено из документации API libsndfile:

  • Функции записи элементов в файл записывают данные в массив, на который указывает ptr, в файл. Параметр items должен быть целочисленным произведением количества каналов, иначе произойдет ошибка.

Подозреваемые значения файла wav

Я решил отобразить некоторые из этих огромных значений на графике, и это выглядит очень похоже на то, как должен выглядеть wav-файл (если бы я импортировал в Audacity и увеличил масштаб в определенном месте, я бы увидел это). Обратите внимание, что показанные значения не совпадают со значениями на графике, я выбрал значения в случайный момент времени. Поэтому я думаю, что реальный вопрос заключается в том, почему эти значения такие большие (в миллионах)? И что они представляют? (Это байты?)

1 ответ

Решение

В limits.h Вы можете найти два таких определения (среди прочего):

#define INT_MAX 0x7FFFFFFF
#define INT_MIN 0x80000000

которые соответствуют десятичному диапазону от -2147483648 до 2147483647.

Руководство по libsndfile гласит:

sf_count_t  sf_read_int(SNDFILE *sndfile, int *ptr, sf_count_t items);

т.е. считывает содержимое звукового файла в целочисленные значения, на которые указывает int *ptr, Какое бы значение не находилось между INT_MIN а также INT_MAX является законной ценностью. В libsndfile API тип данных, используемый вызывающей программой, и формат данных файла не обязательно должны совпадать.

Также обратите внимание, что в звуковом файле нет такой вещи, как "частота". Линейные файлы PCM состоят только из необработанных выборочных данных, которым предшествует заголовок, тогда как "частота" - это математическая абстракция или результат анализа.

Это может представлять ваш интерес:

При преобразовании между целочисленными форматами PCM различного размера (например, с помощью sf_read_int() для чтения 16-битного файла WAV в кодировке PCM) libsndfile соблюдает одно простое правило:

Всякий раз, когда целочисленные данные перемещаются из контейнера одного размера в контейнер другого размера, старший значащий бит в исходном контейнере становится самым значимым битом в целевом контейнере.

Обязательно внимательно прочитайте руководство, особенно когда оно четко написано.

Другие вопросы по тегам