如何使用naudy与portaudio提取低音,中高音

时间:2009-11-25 00:54:50

标签: python audio numpy fft portaudio

就像在这个例子中How to extract frequency information from an input audio stream (using PortAudio)?我对portaudio和numpy感到好奇......

我对fft不是100%肯定,我怎样才能将numpy传递给nunky并从低音,中音和高音中获得-1.0到1.0的三个值?

我不介意这只是为了一个频道,因为我可以理解音频部分,当我看到它们时,它是在我面前游泳的数学:)

2 个答案:

答案 0 :(得分:1)

你所指向的SO问题的选定答案中提到的Fourier Transform为你提供了“频谱” - 一大堆值,给出了各种频率/频率切片中的声音强度(例如,在赫兹表示。

如果你想要的话,如何将一千种强度(比如说,每个10赫兹频谱中的一个)转换成三个数字,当然是一个非常具有启发性的问题 - 例如你可以决定哪个频率范围对应于“低音”和“高音”,其间的所有内容都是“中”,并计算每个中的平均强度。对于它的价值,我相信“低音”的常见惯例是高达250Hz,高音为6KHz及以上(中间为“中音”),例如, this page - 但这是一个任意的惯例,所以,“选择你的毒药”! - )

一旦你拥有相对级别,你就会想要相互标准化它们并适当地缩放它们以达到你想要的范围(大概是对数刻度,因为这是人类听觉的工作原理; - 。)

答案 1 :(得分:1)

实际上,你不会使用傅立叶变换来做到这一点。

通常使用滤波器分割低音,中音和高音中的任何音频信号。 filter是一种衰减某些频率范围的信号处理设备。滤波器可以数字或电气方式构建。例如,它们用于扬声器中的音频交叉系统。

要获得低频低音部分,您可以使用低通滤波器。低通滤波器滤除高频。它们也被称为“高切”过滤器 要获得中频部分,您可以使用带通滤波器。带通滤波器滤除低频和高频。它们也被称为“钟形滤波器” 要获得高频高音部分,您可以使用高通滤波器。高通滤波器滤除任何低频。它们也被称为“低切”过滤器。

实际上,您也可以只使用高通和低通滤波器。如果从原始信号中减去两个滤波信号,结果将是带通滤波信号。这样可以节省一个过滤器。

每个滤镜都有一个阈值频率。阈值频率是一个特殊频率,滤波器应从该频率开始滤波。根据滤波器的顺序,信号将衰减6 dB / oct(1阶),12 dB / oct(2阶),18 dB / oct(3阶)等。对于您的应用,二阶设计是可能没事。
请注意,过滤器通常会在某些方面弄乱您的信号,顺序越高,听得越多。顺便说一句,这是纯粹的物理学,适用于所有信号处理,包括傅里叶变换。

使用这三个滤波器(可以)等效于仅使用三个光谱点进行傅立叶变换。

相关问题