欢迎访问宙启技术站
智能推送

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库的官方文档以了解更多详细信息并探索更多用例。