portaudio / libsndfile framesperbuffer变量

时间:2014-06-16 20:13:17

标签: c++ visual-c++ portaudio libsndfile

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

同样在lsbsndfile库中,读取wave文件的函数需要提供名称为 frame 的变量。 即

samples=sf_readf_float(file,fptr,frames);

如果我输入frame = 256,则总是在fptr中返回64个样本,其余为垃圾,而read函数返回的值为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 变量中放入什么值?

1 个答案:

答案 0 :(得分:1)

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