『開發技巧』Python音頻操作工具PyAudio上手教程
0.引子
當需要使用Python處理音頻數據時,使用python讀取與播放聲音必不可少,下面介紹一個好用的處理音頻PyAudio工具包。
PyAudio是Python開源工具包,由名思義,是提供對語音操作的工具包。提供錄音播放處理等功能,可以視作語音領域的OpenCv。
1.簡介
PyAudio為跨平台音頻I / O庫PortAudio提供Python 綁定。使用PyAudio,您可以輕松地使用Python在各種平台上播放和錄制音頻,例如GNU / Linux,Microsoft Windows和Apple Mac OS X / macOS。
PyAudio的靈感來自:
- pyPortAudio / fastaudio:PortAudio v18 API的Python綁定。
- tkSnack:Tcl / Tk和Python的跨平台聲音工具包。
2.安裝
目前的版本是PyAudio v0.2.11。在大多數平台上使用pip安裝PyAudio。對於v0.2.9之前的版本,PyAudio分發安裝二進制文件,這些文件 存檔在這里。
微軟Windows
使用pip安裝:
python -m pip install pyaudio
筆記:
- 如果pip尚未與您的Python安裝捆綁在一起,請在此處獲取 。
- pip將獲取並安裝PyAudio輪(預先打包的二進制文件)。目前,有車輪兼容Python 2.7,3.4,3.5和3.6 的 官方發行版。對於這些版本,可以使用32位和64位車輪。
- 這些二進制文件包括使用MinGW構建的PortAudio v19 v190600_20161030。它們僅支持Windows MME API,不包括對DirectX,ASIO等的支持。如果需要支持未包含的API,則需要編譯PortAudio和PyAudio。
Apple Mac OS X.
使用Homebrew安裝必備的portaudio庫,然后使用pip安裝PyAudio:
brew install portaudio
pip install pyaudio
筆記:
Debian / Ubuntu
使用包管理器安裝PyAudio:
sudo apt-get install python-pyaudio python3-pyaudio
如果沒有最新版本的PyAudio,請使用pip安裝它:
pip install pyaudio
筆記:
- pip將下載PyAudio源並為您的系統構建它。請務必事先安裝portaudio庫開發包(
portaudio19-dev)和python開發包(python-all-dev)。 - 為了更好地隔離系統包,請考慮在virtualenv中安裝PyAudio 。
PyAudio來源
源代碼可從Python Package Index(PyPI)下載:pypi.python.org/pypi/PyAudio。
或克隆git存儲庫:
git clone https://people.csail.mit.edu/hubert/git/pyaudio.git
要從源代碼構建PyAudio,您還需要構建 PortAudio v19。有關為各種平台構建PyAudio的一些說明,請參閱編譯提示。要使用Microsoft Visual Studio構建PyAudio,請查看Sebastian Audet的說明。
3.示例
1).采集音頻
下面以一段代碼演示如何從計算機麥克風采集一段音頻,采集音頻時長 4s,保存文件 output.wav
使用了tqdm模塊,可以方便顯示出來讀取過程,如下:
要使用PyAudio,首先使用pyaudio.PyAudio()(1)實例化PyAudio ,它設置portaudio系統。
要錄制或播放音頻,請使用pyaudio.PyAudio.open() (2)在所需設備上打開所需音頻參數的流。這設置了pyaudio.Stream播放或錄制音頻。
通過使用流式傳輸pyaudio.Stream.write()音頻數據或使用流式傳輸音頻數據來播放音頻 pyaudio.Stream.read()。(3)
請注意,在“阻止模式”中,每個pyaudio.Stream.write()或 pyaudio.Stream.read()阻止直到所有給定/請求的幀都被播放/記錄。或者,要動態生成音頻數據或立即處理錄制的音頻數據,請使用下面概述的“回調模式”。
使用pyaudio.Stream.stop_stream()暫停播放/錄制,並pyaudio.Stream.close()終止流。(4)
最后,使用pyaudio.PyAudio.terminate()(5)終止portaudio會話
2).播放音頻
下面使用播放的功能來播放1)中保存的音頻 output.wav
通過tqdm,顯示播放進度條,如下:
2).以回調方式播放音頻
當需要在執行其他程序時同時播放音頻,可以使用回調的方式播放,示例代碼如下:
Reference:
1.http://people.csail.mit.edu/hubert/pyaudio/

