c++ - portaudio/libsndfile framesperbuffer 变量

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

谁能告诉我 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/

相关文章:

c++ - Visual Studio C++ "Multithreaded Debug DLL"与 "Multithreaded DLL"

c++ - 模板类的成员函数不能返回指向成员结构的指针?

c++ - 如果元素不适用于代码

c++ - 在 C++ 中使 C 函数指针与基于 C 风格堆栈的调用机制一起工作

python - Pyaudio、portaudio 和 mac 10.7.5

python - 在Python中将声卡输入播放到声卡输出

c++ - 左值需要作为赋值 C++ 数组的左操作数

c++ - 在 Visual Studio 中编写独立程序的最佳方法是什么?

c++ - 如何将 C++ 程序作为 Simulink block 运行?

portaudio - 如何在pyaudio中启用WASAPI独占模式