简 介: 利用Python中的soundcard软件包可以对声卡MIC,SPEAKER操作。基于此,配合可编程信号源DG1062可获得声卡的详细幅频特性。 : ,,,
§01 操作声卡
在之前通过实验( )初步测试了计算机声卡录制声音所对应的频率范围,并在 记录了 。实验中使用了录音软件Audacity进行录制。为了方便后期实验,需要测试直接在Python语言中操作声卡。
一、soundcard 软件包
在python中提供对于声卡操作的软件包包括:
上面两个软件都可以正常安装。由于只在 中给出了示例程序,所以下面仅对软件包进行测试。
1、读取音频设备信息
(1) 测试程序
from headm import *
import soundcard as sc
speakers = sc.all_speakers()
printf(speakers)
default_speaker = sc.default_speaker()
printf(default_speaker)
mics = sc.all_microphones()
printf(mics)
default_mic = sc.default_microphone()
printf(default_mic)
(2) 读取结果
[<Speaker
扬声器 (VIA High Definition Audio) (2 channels)>, <Speaker DELL U2410-1 (NVIDIA High Definition Audio) (2 channels)>, <Speaker SPDIF Interface (TX0) (VIA High Definition Audio) (2 channels)>, <Speaker SPDIF Interface (TX1) (VIA High Definition Audio) (2 channels)>] <Speaker 扬声器 (VIA High Definition Audio) (2 channels)> [<Microphone Analog (USB Capture AIO Analog) (2 channels)>, <Microphone 立体声混音 (VIA High Definition Audio) (2 channels)>, <Microphone Digital (USB Capture AIO) (2 channels)>, <Microphone 麦克风 (3- USB Audio Device) (1 channels)>, <Microphone 数字音频接口 (USB3. 0 capture) (1 channels)>, <Microphone 线路输入 (VIA High Definition Audio) (2 channels)>] <Microphone 麦克风 (3- USB Audio Device) (1 channels)>
2、获取特定输入
利用 get_microphone()
获得对应的mic
输入。
one_mic = sc.get_microphone('线路输入')
printf(one_mic)
上述代码输出:
<Microphone 线路输入 (VIA High Definition Audio) (2 channels)>
二、录音与回复
1、录音
下面给出了录音的函数:
data = default_mic.record(samplerate=48000, numframes=48000)
2、回放函数
下面给出了回放函数:
default_speaker.play(data/numpy.max(data), samplerate=48000)
3、录音和回复
下面的代码测试了利用 “”进行录音,然后通过缺省喇叭进行回放。
with one_mic.recorder(samplerate=48000) as mic,\
default_speaker.player(samplerate=48000) as sp:
for _ in range(10):
data = mic.record(numframes=10240)
sp.play(data)
修改回复的samplerate参数,可以改变回复是声音的频率。
三、显示录制信号波形
1、采集正弦波
from headm import *
import soundcard as sc
default_mic = sc.default_microphone()
one_mic = sc.get_microphone('线路输入')
data = one_mic.record(samplerate=48000, numframes=1024)
plt.plot(data)
plt.xlabel("Samples")
plt.ylabel("Values")
plt.grid(True)
plt.tight_layout()
plt.show()
▲ 图1.3.1 显示采集到的正弦波波形
▲ 图1.3.2 显示采集到的正弦波波形
从上面可以看到在数据的起始部分显示了一些数据为0的采集数据。这可能是声卡在被初始化的时候对应的起始数据为0。下面通过对声卡先进行初始化,采集 一段之后,再采集,就可以避免这种情况。
from headm import * import soundcard as sc default_mic = sc.default_microphone() one_mic = sc.get_microphone('线路输入') with one_mic.recorder(samplerate=