首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用RtAudio调整音频平移

如何使用RtAudio调整音频平移
EN

Stack Overflow用户
提问于 2012-11-06 09:24:40
回答 1查看 1.3K关注 0票数 3

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

在我的特定情况下,我使用双工模式(您可以在此处找到一个示例:duplex mode)。这意味着我将麦克风输入连接到扬声器输出。

我应该在输出缓冲区上应用过滤器吗?哪种过滤器?

有谁可以帮我?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-06 12:47:21

为了减少左边的信号,简单地将左边的每个样本乘以一个小于或等于1的数字,让我们称之为l。同样,对于右边的数字,我们将其称为r。一般来说,你不想乘以大于1的数字,否则可能会导致信号失真。

L和r都是“摇摄位置”的函数。如何从pan位置到您的数字是一个值得讨论的问题。如果这是为了一些简单的东西,你可以线性地降低这些值,在极端情况下使用这些值:

代码语言:javascript
复制
Hard Left:
l=1; r=0
Center:
l=1; r=1
Hard Right:
l=0; r=1;

如果这是更花哨的东西,你应该在谷歌上搜索"pan法律“。下面是一个看起来很不错的例子:

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

更新:我从未使用过RT音频(我通常使用类似的PortAudio ),但我认为pan的代码应该类似于上面定义的l和r(假设类型为int32_t带符号的32位整数):

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13243079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档