2016-05-18 10 views
2

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

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

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

enter image description here

Suspected values of the wav file

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

enter image description here

+0

В каком формате содержится файл? Может быть, они плавают? – cleblanc

+0

Буду честно с вами, я понятия не имею, как это проверить. Я преобразовал простой mp3 в wav-файл онлайн и использовал это как файл. Хотя, когда я пытаюсь sf_read_float(), мой вывод - все 0. – VedhaR

+0

http://soundfile.sapp.org/doc/WaveFormat/ – KevinDTimm

ответ

3

в 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); 

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

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

Это может быть ваш интерес:

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^