使用 Python 的 sounddevice 包录制系统声音

您所在的位置:网站首页 内录音频采集器怎么用 使用 Python 的 sounddevice 包录制系统声音

使用 Python 的 sounddevice 包录制系统声音

2024-07-13 05:50| 来源: 网络整理| 查看: 265

博客中的文章均为meelo原创,请务必以链接形式注明本文地址

 

sounddevice是一个与Numpy兼容的录音以及播放声音的包。

 

安装sounddevice包

直接通过pip就能安装。

pip install sounddevice

 

播放音乐

首先,用numpy生成440Hz的正弦波

import numpy as np fs = 44100 # Hz f = 440 # Hz length = 5 #s myarray = np.arange(fs * length) myarray = np.sin(2 * np.pi * f / fs * myarray)

用sounddevice包播放音乐非常简单。调用play函数来播放声音,需要传入需要播放声音的波形,和采样率。

import sounddevice as sd sd.play(myarray, fs)

 

查看声音设备

计算机上可能有多个声音播放/录制设备,sounddevice会默认使用系统默认的设备。调用query_devices()函数会显示系统所有的声音设备。

sd.query_devices()

下面是我计算机上的声音设备,>标示为默认输入设备, 1 立体声混音 (Realtek High Defini, MME (2 in, 0 out) 2 麦克风 (Realtek High Definition, MME (2 in, 0 out) 3 Microsoft 声音映射器 - Output, MME (0 in, 2 out) < 4 扬声器 (Realtek High Definition, MME (0 in, 2 out) 5 主声音捕获驱动程序, Windows DirectSound (2 in, 0 out) 6 立体声混音 (Realtek High Definition Audio), Windows DirectSound (2 in, 0 out) 7 麦克风 (Realtek High Definition Audio), Windows DirectSound (2 in, 0 out) 8 主声音驱动程序, Windows DirectSound (0 in, 2 out) 9 扬声器 (Realtek High Definition Audio), Windows DirectSound (0 in, 2 out) 10 扬声器 (Realtek High Definition Audio), Windows WASAPI (0 in, 2 out) 11 立体声混音 (Realtek High Definition Audio), Windows WASAPI (2 in, 0 out) 12 麦克风 (Realtek High Definition Audio), Windows WASAPI (2 in, 0 out) 13 Speakers (Realtek HD Audio output), Windows WDM-KS (0 in, 6 out) 14 立体声混音 (Realtek HD Audio Stereo input), Windows WDM-KS (2 in, 0 out) 15 麦克风 (Realtek HD Audio Mic input), Windows WDM-KS (2 in, 0 out) 16 线路输入 (Realtek HD Audio Line input), Windows WDM-KS (2 in, 0 out)

 

修改默认的输入设备为系统输出声音

系统默认的声音输入设备是麦克风,如果需要录制系统声音则需要将声音设备切换成立体声混音。有可能不存在立体声混音这个选项,这时你需要升级你的声卡驱动更新为比2013-5-10发布的6.0.10.1900更高的版本。

通过上面运行sd.query_devices()可以看到,我的计算机立体声混音设备序号为1。因此我需要设置:

sd.default.device[0] = 1

 

录制系统声音

录音和声音播放一样简单,这时你需要调用rec函数,传入需要录音的时长(采样的点数),同时设置blocking=True表示录音完成再返回,最后设置channels=1表示只录制一个声道。

fs = 44100 # Hz length = 5 # s recording = sd.rec(frames=fs * length, samplerate=fs, blocking=True, channels=1)

最后使用scipy.io将音频保存为文件。

from scipy.io import wavfile wavfile.write('recording.wav', fs, recording)

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3