目录:
sounddevice 是基于 PortAudio 的音频处理模块,用于音频的录制和播放。
安装依赖:
$ pip install sounddevice
为了进行音频数据处理,通常还需要安装 NumPy:
$ pip install numpy
import sounddevice as sd
print(sd.query_devices()) # 打印所有可用的音频设备
# 0 Dubbing Virtual Device , Core Audio (1 in, 1 out)
# 1 27B1G5, Core Audio (0 in, 2 out)
# 2 HECATE G2无线版, Core Audio (0 in, 2 out)
# 3 HECATE G2无线版, Core Audio (1 in, 0 out)
# > 4 MacBook Pro麦克风, Core Audio (1 in, 0 out)
# < 5 MacBook Pro扬声器, Core Audio (0 in, 2 out)
# 6 Microsoft Teams Audio, Core Audio (1 in, 1 out)
我的机器总共有 7 个可用的音频设备,输出结果中:
> 表示默认输入设备,< 表示默认输出设备;1 in 表示输入声道有 1 个,2 out 表示输出声道有 2 个。使用 sd.rec() 函数可以轻松实现录制音频。
import sounddevice as sd
from scipy.io import wavfile
# 设置录音参数
duration = 5 # 录制时长(秒)
fs = 44100 # 采样率(Hz),CD音质
channels = 1 # 声道数,2 为立体声
print("开始录制...")
# 开始录音,blocking=True 会阻塞直到录音完成
recording = sd.rec(int(duration * fs),
samplerate=fs,
channels=channels,
dtype='float64',
blocking=True)
print("录制结束。")
# 保存为WAV文件
wavfile.write('my_recording.wav', fs, recording)
代码中使用了 scipy 库,scipy 是一个基于 NumPy 构建的开源 Python 库,提供了丰富的函数和算法,涵盖数值积分、优化、线性代数、信号处理、统计等多个科学计算领域,在这里的目的是将声音信息保存为 WAV 文件。
使用如下命令安装依赖:
$ pip install scipy
我第一次运行时报了如下错误:
sounddevice.PortAudioError: Error opening InputStream: Invalid number of channels [PaErrorCode -9998]
原因是代码里设置了 channels=2,表示输入设备使用双声道,但是我机器的默认输入设备是 MacBook Pro麦克风, Core Audio (1 in, 0 out),这里的 1 in 表示只有 1 个声道,重新设置 channels=1,可以正常录入声音,并在同级目录保存为 my_recording.wav 文件。
使用 sd.play() 函数播放音频。
import sounddevice as sd
import numpy as np
# 生成一段 440H 的正弦波作为示例音频数据
fs = 44100
length = 5
t = np.linspace(0, length, int(fs * length))
audio_data = np.sin(2 * np.pi * 440 * t) # 440Hz 正弦波
print("开始播放...")
# 播放音频,block=False 表示异步播放,不阻塞主程序
sd.play(audio_data, fs, blocking=False)
sd.wait() # 等待播放完成
print("播放结束。")
上面示例使用 numpy 创建了音频数据从而进行播放,也可以选择直接播放音频文件。
import sounddevice as sd
import scipy.io.wavfile as wavfile
sample_rate, data = wavfile.read('my_recording.wav')
sd.play(data, sample_rate)
sd.wait()
↶ 返回首页 ↶