谁能告诉我 portaudio 回调函数变量 framesperbuffer 是什么? 如果我想通过 PA_WriteStream() 每次迭代以 64 字节数据播放音频流,那么我应该在 framesperbuffer 中输入什么值?
此外,在 lsbsndfile
库中,读取波形文件的函数需要提供名称为 frame 的变量。
即
samples=sf_readf_float(file,fptr,frames);
如果我设置 frames=256,那么在 fptr 中总是返回 64 个样本,其余的是垃圾,而读取函数的返回值为 256。 我已经检查了以下代码
memcpy(array,fptr,samples); //samples returned are 256 always but first 64 contain data
现在 array[0] 到 array[63] 包含值,array[64] 到 array[255] 在文件读取的每次迭代中包含空值。 现在我必须将读取的数据写入 portaudio 音频播放功能,然后 framesperbuffer 应该填充什么。
此外,在某些情况下,我需要处理数据并将样本减少到 32(当我消耗两个样本以形成一个输出样本时),那么我应该在 framesperbuffer 变量中输入什么值?
最佳答案
framesPerBuffer 传递给流回调函数的帧数,或阻塞读/写流的首选 block 粒度。特殊值 paFramesPerBufferUnspecified (0) 可用于请求流回调将根据主机要求和请求的延迟设置接收最佳(并且可能变化)的帧数。注意:对于某些主机 API,将非零 framesPerBuffer 用于回调流可能会引入额外的缓冲层,从而导致额外的延迟。 PortAudio 保证额外的延迟将保持在理论上的最小值,但是,强烈建议仅当您的算法需要每个流回调的固定帧数时才使用非零 framesPerBuffer 值。
关于c++ - portaudio/libsndfile framesperbuffer 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24251446/