Я использую libsndfile в C ++ для чтения файла WAV. Есть два момента, которые я не понимаю:
sf_readf_float()
в библиотеке sndfile.h? Есть ли способ сделать это?Поле формата даст вам 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);
Других решений пока нет …