玩轉Python:處理音頻文件,兩個非常重要的庫,很實用,附代碼

pyaudiosounddevice都是用於Python中音頻處理和流的庫,允許用戶通過他們的API錄製、播放和處理音頻數據。下面是對這兩個庫的簡要介紹:

PyAudio

PyAudio 提供了 Python 綁定到 PortAudio,這是一個跨平臺的音頻I/O庫。它允許你很容易地使用Python語言進行音頻錄製和播放。

特點:

  • 跨平臺(工作在Unix/Linux、MacOS和Windows上)
  • 允許你直接訪問聲卡或其他音頻接口,例如通過麥克風錄製聲音或者向揚聲器輸出聲音
  • 支持阻塞和非阻塞流
  • 提供了詳細的錯誤信息和音頻流狀態

典型用途:

  • 音頻錄製和播放
  • 音頻信號處理
  • 實現音頻應用,如語音識別和合成

示例代碼:

import pyaudio
import wave

# 打開WAV文件
wf = wave.open('file.wav', 'rb')

# 初始化PyAudio
p = pyaudio.PyAudio()

# 打開流
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

# 讀取數據
data = wf.readframes(1024)

# 播放流
while len(data) > 0:
    stream.write(data)
    data = wf.readframes(1024)

# 停止流
stream.stop_stream()
stream.close()

# 關閉PyAudio
p.terminate()

SoundDevice

sounddevice庫是基於PortAudio的,提供了一個簡潔的Pythonic接口,用於錄製和播放音頻。

特點:

  • 跨平臺(與PortAudio一樣)
  • 提供了同步和異步的音頻流接口
  • 支持NumPy,方便進行科學計算
  • 相對於PyAudio,API更加簡潔和Pythonic

典型用途:

  • 實時音頻處理
  • 實驗心理學中的音頻刺激
  • 用於科學研究的音頻數據採集

示例代碼:

import sounddevice as sd
import numpy as np

duration = 5.5  # seconds
frequency = 440  # Hz

# 生成一個音頻信號
t = np.linspace(0, duration, int(duration * 44100), False)
audio = np.sin(2 * np.pi * frequency * t)

# 播放音頻
sd.play(audio, samplerate=44100)
sd.wait()  # 等待音頻播放完畢

總結

兩個庫都能夠處理音頻流,但在API設計上有所不同。PyAudio 更接近底層PortAudio接口,提供了很多配置選項和詳細的控制。而SoundDevice 提供了更加簡化和易於使用的接口,對於需要快速上手的項目而言可能更適合。如果需要進行復雜的音頻處理,或者與其他底層音頻庫(如Librosa或SciPy)結合使用,SoundDevice可能更合適,尤其是因爲它支持NumPy數組。選擇哪一個庫取決於你的項目需求和個人偏好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章