Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用带portaudio的numpy提取低音、中高音_Python_Audio_Numpy_Fft_Portaudio - Fatal编程技术网

Python 如何使用带portaudio的numpy提取低音、中高音

Python 如何使用带portaudio的numpy提取低音、中高音,python,audio,numpy,fft,portaudio,Python,Audio,Numpy,Fft,Portaudio,在这个例子中,我对portaudio和numpy很好奇 我不是100%确定fft,我如何传递numpy块并返回低音、中音和高音的-1.0到1.0之间的三个值 我不介意这仅仅是一个频道,因为我能理解其中的音频部分,当我看着它们时,数学在我面前游荡:)你所指的问题的选择答案中提到的,给你“光谱”--给出各种频率范围/片段(例如,以赫兹表示)中声音强度的大量值集合 如何将(比如说)一千个强度(比如说,每10赫兹频谱片一个强度)转换成三个数字,这当然是一个很有启发性的问题——例如,你可以决定哪些频率范围

在这个例子中,我对portaudio和numpy很好奇

我不是100%确定fft,我如何传递numpy块并返回低音、中音和高音的-1.0到1.0之间的三个值

我不介意这仅仅是一个频道,因为我能理解其中的音频部分,当我看着它们时,数学在我面前游荡:)

你所指的问题的选择答案中提到的,给你“光谱”--给出各种频率范围/片段(例如,以赫兹表示)中声音强度的大量值集合

如何将(比如说)一千个强度(比如说,每10赫兹频谱片一个强度)转换成三个数字,这当然是一个很有启发性的问题——例如,你可以决定哪些频率范围对应于“低音”和“高音”,而这两者之间的所有频率都是“中音”,并计算出每个区域的平均强度。值得一提的是,我认为“低音”的通用约定是高达250Hz,“高音”为6KHz及以上(介于“中频”)的通用约定,例如cfr——但这是一个相当武断的约定,所以,“选择你的毒药”!)


一旦你有了相对水平,你就需要将它们彼此标准化,并适当地调整它们,使其位于你想要的范围内(可能是在对数范围内,因为人类的听觉就是这样工作的;-)。

实际上,你不会使用傅里叶变换来实现这一点

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

要获得低频低音部分,您需要使用低通滤波器。低通滤波器滤除高频。它们也被称为“高截止”过滤器。
要获得中频中频,您需要使用带通滤波器。带通滤波器滤除低频和高频。它们也被称为“钟形过滤器”。
要获得高频高音部分,您需要使用高通滤波器。高通滤波器滤除所有低频。它们也称为“低截止”滤波器

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

每个滤波器都有一个阈值频率。阈值频率是一个特殊频率,滤波器应从该频率开始滤波。根据滤波器阶数,信号将衰减6 dB/oct(第一阶)、12 dB/oct(第二阶)、18 dB/oct(第三阶)等。对于您的应用,二阶设计可能很好。
请注意,过滤器通常会在某些方面干扰信号,并且阶数越高,听到的声音就越多。顺便说一下,这是纯物理,适用于所有信号处理,包括傅里叶变换


使用这三个滤波器相当于只使用三个光谱点进行傅里叶变换

您希望-1到1.0是什么意思?你用什么频率范围来定义低音、中音和高音?选择频率是一个很好的点,因为现在使用三个相同大小的范围就足够了。为了提高速度,我宁愿能够从numpy获得3个片段,而不是使用python来转换频谱。因为这是用于图形的,这可能就足够了,如果没有,我可以稍后再处理频率。主要的优先事项是性能,而不是在纯python中进行太多的处理。