Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用libpd时,如何处理不能被64整除的音频缓冲区大小?_C++_Audio_Libpd_Rtaudio - Fatal编程技术网

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

C++ 使用libpd时,如何处理不能被64整除的音频缓冲区大小?,c++,audio,libpd,rtaudio,C++,Audio,Libpd,Rtaudio,libpd的API一次只能处理64个样本的帧中的音频。我过去所做的是将音频设备缓冲区大小设置为可被64整除的数字。没问题 现在,我需要制作一个与ASIO兼容的Windows应用程序。我在用RtAudio。问题是,当我用RtAudio API初始化我的ASIO声卡(罗兰FA-66)时,它会忽略缓冲区大小参数,并选择它自己的一个参数,该参数不能被64整除 我想到了一个解决办法。这将在音频回调函数中发生: 检查缓冲区大小是否不能被64整除。如果是: 告诉libpd处理大于所需大小的多个帧,并将其存储在

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

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

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

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


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

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

    下面是一篇关于
    memcpy
    可能会让你头疼的陷阱的优秀(非常简短)文章: