4.1 FFT算法
Python提供了丰富的科学计算功能,如Numpy、Scipy等,其均由编译好的C语言写成,因此运算速度很快,完全满足程序实时显示的要求。实验程序采用Scipy模块的fft方法,并进行相关设置,最终频谱显示横坐标表示频率,对于8000Hz的双声道音频信号频率范围为1~4000Hz ,纵坐标表示幅度。
4.2 多线程技术
为了保证图形显示的实时性及音频数据捕获的准确性,两者功能应该相对独立,即在两个独立的线程中完成相关工作,但两个线程之间又应该是相互联系,即完成某一段音频数据捕获后再进行该段数据的显示,即两线程的同步。利用Python的threading模块,调用threading.Thread类创建两个线程,调用threading.Condition类创建条件变量,以使绘图线程与录音线程保持同步。
5 结语
利用Python和DirectSound可以非常方便地开发音频程序和进行科学计算,有着其他编程语言无法比拟的效率。本文基于Python编程语言及DirectSound模块,介绍了利用声卡进行数据采集的方法及关键代码,并借助多线程技术和Python高效的科学计算和绘图功能,将其应用于音频数据波形和频谱的实时显示,编制音频信号的软件示波器和频谱分析仪,程序实现简单、高效,易于根据需要增加更丰富的功能。
参考文献
[1] 杨昆,汪兴东.Python程序员指南. 北京:中国青年出版社[M],2001
[2] 张小虹,王丽娟,任姝婕.数字信号处理基础. 北京:清华大学出版社[M],2007.
[3] 李春洪,毛跃奇,陈贵来等.基于DirectSound的声音实时仿真研究[J]. 计算机仿真,2001;18(3):47-49.
|