Переменная буфера кадра portaudio/libsndfile

Может ли кто-нибудь сказать мне, что такое переменная функции обратного вызова portaudio framesperbuffer? Если я хочу воспроизводить аудиопоток через PA_WriteStream() по 64 байта данных на каждой итерации, то какое значение я должен поместить в framesperbuffer?

Также в lsbsndfilelibrary функция чтения волнового файла требует предоставления переменной с именем frame. то есть

samples=sf_readf_float(file,fptr,frames);

если я поставлю кадры = 256, то в fptr всегда возвращается 64 выборки, а остальные - мусор, тогда как возвращаемые значения из функции чтения равны 256. Я проверил следующий код.

memcpy(array,fptr,samples); //samples returned are 256 always but first 64 contain data

теперь массив [0] в массив [63] содержит значения, а массив [64] в массив [255] содержит нулевое значение при каждой итерации чтения файла. Теперь мне нужно записать данные, прочитанные в функцию воспроизведения аудио portaudio, а затем заполнить framesperbuffer.

Также в некоторых случаях мне нужно обработать данные, а количество выборок уменьшить до 32 (когда я использую два образца для формирования одного выходного образца), тогда какое значение я должен указать в переменной framesperbuffer?


person user3696623    schedule 16.06.2014    source источник


Ответы (1)


framePerBuffer Количество кадров, переданных функции обратного вызова потока, или предпочтительная степень детализации блоков для блокирующего потока чтения/записи. Специальное значение paFramesPerBufferUnspecified (0) может использоваться для запроса того, что обратный вызов потока будет получать оптимальное (и, возможно, изменяющееся) количество кадров в зависимости от требований хоста и запрошенных настроек задержки. Примечание. В некоторых API-интерфейсах хоста использование ненулевого значения framePerBuffer для потока обратного вызова может привести к появлению дополнительного уровня буферизации, что может привести к дополнительной задержке. PortAudio гарантирует, что дополнительная задержка будет сведена к теоретическому минимуму, однако настоятельно рекомендуется использовать ненулевое значение framePerBuffer только в том случае, если ваш алгоритм требует фиксированного количества кадров на обратный вызов потока.

person mark    schedule 19.06.2014
comment
Не могли бы вы дать ссылку на ваш ... настоятельно рекомендуется ... совет, чтобы я мог узнать подробности об этом. (Я читал о различиях здесь, но не рекомендации.) - person tom10; 15.09.2014