在使用libpd时,如何处理不能被64整除的音频缓冲区大小?

时间:2014-06-28 00:00:37

标签: c++ audio libpd rtaudio

libpd的API仅允许一次处理64个样本的帧中的音频。我过去所做的是将音频设备缓冲区大小设置为可被64整除的数字。没有问题。

现在,我需要制作一个兼容ASIO的Windows应用程序。我正在使用RtAudio。问题在于,当我使用RtAudio API初始化我的ASIO声卡(Roland FA-66)时,它会忽略缓冲区大小参数并选择其自己的一个,这不能被64整除。

我想到了一个解决方法。这将发生在音频回调函数中:

  1. 检查缓冲区大小是否不能被64整除。如果是这样的话:
  2. 告诉libpd处理大于所需大小的帧数并将其存储在临时缓冲区中。
  3. 使用memcpy将正确数量的帧从临时缓冲区复制到输出缓冲区。
  4. 使用memcpy将额外的样本存储在另一个缓冲区(称为extra)中,并在以下对音频回调的调用中使用它们。
  5. 我没试过,但我认为它会奏效。

    但是,我想知道是否有一个“标准”或“众所周知”的程序来处理这个问题。也许有我不知道的警告或提示?

1 个答案:

答案 0 :(得分:1)

您的方法似乎有效。你唯一需要注意的是内存对齐。

这是一篇关于memcpy可能导致您头痛的陷阱的优秀(且非常简短)的文章:http://www.codepolice.org/c/memcpy.html