gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:47 25 4
gpt4 key购买 nike

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

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

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

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

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

但是,我想知道是否有处理此问题的“标准”或“众所周知”的程序。可能有我不知道的警告或提示?

最佳答案

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

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

关于c++ - 使用 libpd 时如何处理不能被 64 整除的音频缓冲区大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24462305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com