您好,登錄后才能下訂單哦!
當需要使用Python處理音頻數據時,使用python讀取與播放聲音必不可少,下面介紹一個好用的處理音頻PyAudio工具包。
PyAudio是Python開源工具包,由名思義,是提供對語音操作的工具包。提供錄音播放處理等功能,可以視作語音領域的OpenCv。
PyAudio為跨平臺音頻I / O庫 PortAudio 提供 Python 綁定。使用PyAudio,您可以輕松地使用Python在各種平臺上播放和錄制音頻,例如GNU / Linux,Microsoft Windows和Apple Mac OS X / macOS。
PyAudio的靈感來自:
2.安裝
目前的版本是 PyAudio v0.2.11 。在大多數平臺上使用pip安裝PyAudio。對于v0.2.9之前的版本,PyAudio分發安裝二進制文件,這些文件 存檔在這里 。
微軟Windows
使用 pip 安裝:
python -m pip install pyaudio
筆記:
使用 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
筆記:
portaudio19-dev
)和python開發包( python-all-dev
)。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的 說明 。
1).采集音頻
下面以一段代碼演示如何從計算機麥克風采集一段音頻,采集音頻時長 4s,保存文件 output.wav
使用了tqdm模塊,可以方便顯示出來讀取過程,如下:
* recording 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 172/172 [00:03<00:00, 43.40it/s] * done recording
import pyaudio import wave from tqdm import tqdm def record_audio(wave_out_path,record_second): CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 2 RATE = 44100 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) wf = wave.open(wave_out_path, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) print("* recording") for i in tqdm(range(0, int(RATE / CHUNK * record_second))): data = stream.read(CHUNK) wf.writeframes(data) print("* done recording") stream.stop_stream() stream.close() p.terminate() wf.close() record_audio("output.wav",record_second=4)
要使用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,顯示播放進度條,如下:
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 172/172 [00:03<00:00, 43.40it/s]
"""PyAudio Example: Play a WAVE file.""" import pyaudio import wave from tqdm import tqdm def play_audio(wave_path): CHUNK = 1024 wf = wave.open(wave_path, 'rb') # instantiate PyAudio (1) p = pyaudio.PyAudio() # open stream (2) stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True) # read data data = wf.readframes(CHUNK) # play stream (3) datas = [] while len(data) > 0: data = wf.readframes(CHUNK) datas.append(data) for d in tqdm(datas): stream.write(d) # stop stream (4) stream.stop_stream() stream.close() # close PyAudio (5) p.terminate() play_audio("output.wav")
2).以回調方式播放音頻
當需要在執行其他程序時同時播放音頻,可以使用回調的方式播放,示例代碼如下:
"""PyAudio Example: Play a WAVE file.""" import pyaudio import wave from tqdm import tqdm import time def play_audio_callback(wave_path): CHUNK = 1024 wf = wave.open(wave_path, 'rb') # instantiate PyAudio (1) p = pyaudio.PyAudio() def callback(in_data, frame_count, time_info, status): data = wf.readframes(frame_count) return (data, pyaudio.paContinue) # open stream (2) stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True, stream_callback=callback) # read data stream.start_stream() while stream.is_active(): time.sleep(0.1) # stop stream (4) stream.stop_stream() stream.close() # close PyAudio (5) p.terminate() play_audio_callback("output.wav")
Reference:
1. http://people.csail.mit.edu/hubert/pyaudio/
總結
以上所述是小編給大家介紹的Python音頻操作工具PyAudio上手教程詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。