1

谁能告诉我portaudio回调函数变量framesperbuffer是什么?如果我想通过 PA_WriteStream() 每次迭代播放 64 字节数据的音频流,那么我应该在framesperbuffer中输入什么值?

同样在lsbsndfile库中,读取波形文件的函数需要提供具有名称框架的变量。IE

samples=sf_readf_float(file,fptr,frames);

如果我输入 frames=256 那么 fptr 中总是返回 64 个样本,其余的都是垃圾,而 read 函数的返回值是 256。我已经检查了以下代码

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

现在数组 [0] 到数组 [63] 包含值,数组 [64] 到数组 [255] 在文件读取的每次迭代中包含空值。现在我必须将读取的数据写入 portaudio 音频播放功能,然后应该填充什么framesperbuffer 。

同样在某些情况下,我需要处理数据并将样本减少到 32(当我消耗两个样本以形成一个输出样本时)那么我应该在framesperbuffer变量中输入什么值?

4

1 回答 1

1

framesPerBuffer 传递给流回调函数的帧数,或阻塞读/写流的首选块粒度。特殊值 paFramesPerBufferUnspecified (0) 可用于请求流回调将根据主机要求和请求的延迟设置接收最佳(可能是变化的)帧数。注意:对于某些主机 API,对回调流使用非零 framesPerBuffer 可能会引入额外的缓冲层,这可能会引入额外的延迟。PortAudio 保证额外的延迟将保持在理论上的最小值,但是,强烈建议仅当您的算法需要每个流回调的固定帧数时才使用非零的 framesPerBuffer 值。

于 2014-06-19T02:47:36.877 回答