本章的主题为如何用Python处理音频文件,也就是说如果你有一个声音文件,你希望对其进行一些修改,那么Python也有相应的模块可以来做这件事。
10.1 要解决什么问题
如果我们有一段录音,但在录制过程中夹杂了一些噪音。现在我们希望将这些噪音过滤掉,那么我们能否用Python来解决呢?当然可以。除此之外,我们还可以进行一些简单的信号处理,比如傅里叶变换之类的操作。
10.2 实现思路
本章的题目旨在抛砖引玉,仅介绍一些用Python进行音频文件处理的简单示例,以及如何进行音频文件的修改,过滤一定幅度的噪音。
10.3 相关模块的安装及介绍
本节将介绍本章涉及的相关模块的安装及介绍。
10.3.1 wave模块
wave模块用于读取音频数据,不支持压缩和解压缩,使用方法跟文件操作几乎一样。该模块提供了open接口用于打开wav音频文件,并且支持只读模式和只写模式。此外,也提供了很多获取音频参数的接口以及设置音频参数的接口,我们这里只使用最基本简单,如果读者有更复杂的需求,可以进一步详细的学习。
f = wave.open(r'test.wav', 'rb')str_data = f.readframes(nframes)f.close()
10.3.2 pylab模块
pylab模块是matplotlib库中一部分,所以我们这里需要安装matplotlib模块。matplotlib模块实现了很多matlab上的功能,因此有些基本的需要matlab来实现的需求,我们就可以用Python的matplotlib库来实现。
matplotlib模块的安装可以通过pip命令,也可以下载whl文件进行安装。
pip install matplotlib
如果通过安装命令进行安装,可能会遇到安装超时出错的情况,这种情况下可以更改默认超时时间,命令如下。作者在下载过程中就遇到了超时的问题,所以也修改了默认超时时间。
pip install --default-timeout=200 matplotlib
也可以通过下面的网址,下载跟我们环境一致的安装文件,比如作者使用的是win32版本。
![c6805aae45e3d804c5519980f4b3e038.png](https://i-blog.csdnimg.cn/blog_migrate/8265e55e5239ea53bcc7b3f167c8e625.jpeg)
图10-1 matplotlib模块下载页面
下载完成后,我们需要将下载的文件matplotlib-3.1.1-cp36-cp36m-win32.whl放入C:Program Files (x86)Python3.6.8Scripts目录中,然后再用pip命令进行安装。
PS C:Program Files (x86)Python3.6.8Scripts> .pip3.6.exe install --default-timeout=300 .matplotlib-3.1.1-cp36-cp36m-win32.whlProcessing c:program files (x86)python3.6.8scriptsmatplotlib-3.1.1-cp36-cp36m-win32.whlCollecting cycler>=0.10 (from matplotlib==3.1.1)Using cached https://files.pythonhosted.org/packages/f7/d2/e07d3ebb2bd7af696440ce7e754c59dd546ffe1bbe732c8ab68b9c834e61/cycler-0.10.0-py2.py3-none-any.whlCollecting python-dateutil>=2.1 (from matplotlib==3.1.1)Using cached https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whlCollecting kiwisolver>=1.0.1 (from matplotlib==3.1.1)Downloading https://files.pythonhosted.org/packages/15/14/a7ae5a7d5fae78b40dd0d388d83010330cba2df1721b1bd91a8b99044141/kiwisolver-1.1.0-cp36-none-win32.whl (44kB)|████████████████████████████████| 51kB 130kB/sCollecting pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 (from matplotlib==3.1.1)Using cached https://files.pythonhosted.org/packages/11/fa/0160cd525c62d7abd076a070ff02b2b94de589f1a9789774f17d7c54058e/pyparsing-2.4.2-py2.py3-none-any.whlRequirement already satisfied: numpy>=1.11 in