其他分享
首页 > 其他分享> > c – 如何使用RtAudio调整音频平移

c – 如何使用RtAudio调整音频平移

作者:互联网

我使用Rtaudio库,我想实现一个音频程序,我可以控制平移(例如将声音从左声道转移到右声道).

在我的具体情况下,我使用双工模式(你可以在这里找到一个例子:duplex mode).这意味着我将麦克风输入链接到扬声器输出.

我应该在输出缓冲区上应用过滤器吗?什么样的过滤器?
谁能帮我?

解决方法:

要减少左边的信号,只需将左边的每个样本乘以一个小于或等于1的数字,我们称之为l.同样,对于右边,我们称之为数字r.一般来说,您不希望乘以大于1的数字,否则可能会导致信号失真.

l和r都是“平移位置”的功能.你如何从平台位置到你的数字是一个讨论的问题.如果这是为了一些简单的事情,你可以使用极值的这些值线性地降低值:

Hard Left:
l=1; r=0
Center:
l=1; r=1
Hard Right:
l=0; r=1;

如果这是更高级的东西,你应该谷歌“泛法”.这是一个看起来很好的例子:

http://www.kvraudio.com/forum/viewtopic.php?p=4264576

更新:
我从来没有使用RT音频(我通常使用类似的PortAudio),但我认为pan的代码看起来像这样,l和r如上所定义(假设类型为int32_t – 带符号的32位整数):

int inout( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
           double streamTime, RtAudioStreamStatus status, void *data )
{
  if ( status ) std::cout << "Stream over/underflow detected." << std::endl;

  int32_t *ob = (int32_t *)outputBuffer;
  int32_t *in = (int32_t *)inputBuffer;

  unsigned long *bytes = (unsigned long *) data;
  int i =0;
  while( i < bytes / 4 ) {
     ob[i] = (int32_t) ( ib[i] * l + .5 );
     ++i;
     ob[i] = (int32_t) ( ib[i] * r + .5 );
     ++i;
  }
  return 0;
}

标签:c,audio,duplex,audio-panning,rtaudio
来源: https://codeday.me/bug/20191008/1871617.html