gpt4 book ai didi

c++ - 如何使用 RtAudio 调整音频声像

转载 作者:太空狗 更新时间:2023-10-29 23:18:41 25 4
gpt4 key购买 nike

我使用 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;

如果这是更奇葩的东西,你应该在谷歌上搜索“pan law”。这是一个看起来不错的例子:

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

更新:我从未使用过 RT 音频(我通常使用类似的 PortAudio),但我认为要平移的代码看起来像这样,其中 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++ - 如何使用 RtAudio 调整音频声像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13243079/

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