sounddevice库在Python中的应用及示例
发布时间:2023-12-15 19:39:01
sounddevice是一个Python库,用于在Python程序中处理音频数据。它提供了一个简单易用的接口,用于录制和播放音频数据,以及对音频数据进行实时分析和处理。
以下是sounddevice库的一些常见用例及示例:
1. 录制音频数据:
sounddevice可以使用默认的系统音频设备来录制音频数据。以下示例将录制2秒钟的音频数据,并将其保存到名为recording.wav的文件中:
import sounddevice as sd
from scipy.io.wavfile import write
# 设置采样率和录制时间
sample_rate = 44100 # 采样率
duration = 2 # 录制时间(秒)
# 录制音频数据
recording = sd.rec(int(duration * sample_rate), samplerate=sample_rate, channels=2)
# 等待录制结束
sd.wait()
# 保存音频数据
write("recording.wav", sample_rate, recording)
2. 播放音频文件:
sounddevice可以使用默认的系统音频设备来播放音频文件。以下示例将加载名为sound.wav的音频文件并播放它:
import sounddevice as sd
from scipy.io.wavfile import read
# 加载音频文件
sample_rate, data = read("sound.wav")
# 播放音频数据
sd.play(data, sample_rate)
sd.wait()
3. 实时分析音频数据:
sounddevice可以实时获取系统音频设备的音频数据,并对其进行分析。以下示例将获取当前系统音频设备的音频数据,并计算其频谱:
import sounddevice as sd
import numpy as np
import matplotlib.pyplot as plt
# 设置采样率和持续时间
sample_rate = 44100 # 采样率
duration = 5 # 持续时间(秒)
# 获取音频数据
data = sd.rec(int(duration * sample_rate), samplerate=sample_rate, channels=1)
sd.wait()
# 计算频谱
fft = np.fft.fft(data[:, 0])
freq = np.fft.fftfreq(len(fft), 1 / sample_rate)
plt.plot(freq, np.abs(fft))
plt.xlabel("Frequency (Hz)")
plt.ylabel("Amplitude")
plt.show()
4. 实时处理音频数据:
sounddevice可以对实时音频数据进行处理,例如应用滤波器。以下示例将获取当前系统音频设备的音频数据,并对其应用一个低通滤波器:
import sounddevice as sd
import numpy as np
# 设置采样率和持续时间
sample_rate = 44100 # 采样率
duration = 5 # 持续时间(秒)
# 定义滤波器
cutoff_freq = 5000 # 截止频率(Hz)
b, a = scipy.signal.butter(4, 2 * cutoff_freq / sample_rate, "lowpass")
# 处理音频数据
def process_audio(indata, outdata, frames, time, status):
outdata[:] = scipy.signal.lfilter(b, a, indata)
# 打开音频流并处理数据
with sd.Stream(callback=process_audio):
sd.sleep(int(duration * 1000))
这些示例只是sounddevice库在Python中的一些常见用例。sounddevice还提供了许多其他功能,如设置录制和播放的音频设备、控制音量、实时监控录制音频等。您可以查阅sounddevice库的官方文档以了解更多详细信息并探索更多用例。
