谁能告诉我portaudio回调函数变量framesperbuffer 是什么?
如果我想在每次迭代中通过PA_WriteStream()通过64字节数据播放音频流,那么应该在framesperbuffer 中放置什么值?
同样在lsbsndfile
库中,用于读取wave文件的功能还希望提供名称为 frame 的变量。
即
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
现在,在每次读取文件的迭代中,array [0]至array [63]包含值,而array [64]至array [255]包含空值。
现在,我必须将读取的数据写入portaudio音频播放功能,然后填写framesperbuffer 。
同样在某些情况下,我需要处理数据并将样本减少到32(当我消耗两个样本以形成一个输出样本时),那么我应该在framesperbuffer 变量中输入什么值?
最佳答案
framesPerBuffer传递到流回调函数的帧数,或阻塞的读/写流的首选块粒度。可以使用特殊值paFramesPerBufferUnspecified(0)来请求流回调根据主机要求和请求的延迟设置来接收最佳(并且可能会变化)的帧数。注意:对于某些主机API,对回调流使用非零framesPerBuffer可能会引入额外的缓冲层,从而可能导致额外的延迟。 PortAudio保证将额外的延迟保持在理论上的最小值,但是,强烈建议仅在算法要求每个流回调中使用固定数量的帧时才使用非零framesPerBuffer值。
关于c++ - portaudio/libsndfileframesperbuffer变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24251446/