переменная portaudio / libsndfile framesperbuffer

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

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

samples=sf_readf_float(file,fptr,frames);

если я установил frame = 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 переменная?

1

Решение

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

1

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


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