Использование библиотеки libsndfile для чтения файла WAV в Stack Overflow

Я использую libsndfile в C ++ для чтения файла WAV. Есть два момента, которые я не понимаю:

  1. Как я могу получить значение «Bits per sample» для рассматриваемого файла WAV? Я читаю документацию на сайте http://www.mega-nerd.com/libsndfile/api.html, но я не нашел члена для «Bits per sample» в структуре SF_INFO.
  2. Используя файл WAV, как я могу создать данные для рисования векторов для описания звуковых данных, читаемых по функциям? sf_readf_float() в библиотеке sndfile.h? Есть ли способ сделать это?

1

Решение

Поле формата даст вам BPS. Например: SF_FORMAT_PCM_16.

Функция sf_readf_float преобразует семпл в диапазон от -1,0 до 1,0, независимо от количества бит / с входного звука. Вам нужно только позаботиться об аудио каналах. Если аудио имеет 2 канала и вы читаете 4 числа с плавающей запятой, у вас будет:

sample-1 of left channel
sample-1 of right channel
sample-2 of left channel
sample-2 of right channel

Затем, чтобы нарисовать точку, вы должны преобразовать [-1.0; 1.0] в высоту области просмотра. Например, если область просмотра имеет Y = 20, а высота 300px, формула будет такой:

PY = (int)(20.0 + (sample_value / 2.0 + 0.5) * 300.0);
2

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

Других решений пока нет …

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