1

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

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

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

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

我还没有尝试过,但我认为它会起作用。

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

4

1 回答 1

1

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

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

于 2014-06-28T00:10:02.107 回答