用C处理“JACK音频”数据?

时间:2012-12-13 00:37:46

标签: c audio jack

我的问题略显抽象,但有充分的理由。我已经成功运行了一个用C语言编写的JACK脚本,它将麦克风音频数据循环到扬声器,但是我想知道如何在播放过程中改变我自己的音频流,也许我想尝试的一件事是过滤高(或低)频率(完全关闭它们)。根据我的理解,音频作为模拟信号传递并转换为数字值(在一定范围内)。

我猜我被迫采用这两种方式中的一种,我认为一种方法是处理每个值并检查它是否低于频率(或高于频率)我不想要然后改变值为0(或上一个循环周期的前一个值,以防止播放期间音频中出现空白点)。我猜测的第二种方式是JACK为缓冲区提供由频谱指定的完整数组值。我该怎么做呢? (将来我想用原始数据做其他事情,但我认为这是熟悉原始音频处理的一个很好的开始)

以下是我的简化代码: http://pastebin.com/Hmiumqkz 您可以看到我尝试打印 in 值,因为它应该是一个“浮动”我认为我可以从那里过滤频率,但我不确定,因为我没有得到任何东西在我运行此代码时打印在控制台中它只是将麦克风环回到扬声器,但没有任何打印到控制台......

注意:我已经成功编译和测试了使用Gstreamer,ALSA,NAudio,irrKang和Phonon库的程序,它们不允许我在操作系统和原始音频数据之间具有交叉兼容性我要求我的项目,我要求的是请在懒惰报告之前请三思,让我使用“其他图书馆”只是为了“更容易”,但我已经尝试过了,但他们都让我失望。

2 个答案:

答案 0 :(得分:0)

你还没有真正问过一个可以在这里回答的问题,所以我会指出一些外部资源。

以下是基于热门RBJ filters

设计均衡器的教程

http://blog.bjornroche.com/2012/08/basic-audio-eqs.html

大部分内容都是用类似C的伪代码编写的,会逐步引导您完成。

答案 1 :(得分:-1)

这是正确答案(你会注意到proccess(){}回调函数中的printf()函数)for循环打印出缓冲区中的当前帧(频域但for()循环随着时间的推移打印所以它的时域也是 - 它的频率和时间)

http://pastebin.com/axDLw7cc