pyaudio
和sounddevice
都是用于Python中音频处理和流的库,允许用户通过他们的API录制、播放和处理音频数据。下面是对这两个库的简要介绍:
PyAudio 提供了 Python 绑定到 PortAudio,这是一个跨平台的音频I/O库。它允许你很容易地使用Python语言进行音频录制和播放。
特点:
典型用途:
示例代码:
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
库是基于PortAudio的,提供了一个简洁的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数组。选择哪一个库取决于你的项目需求和个人偏好。