前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python-声音录制和处理

python-声音录制和处理

作者头像
用户9925864
发布2022-07-27 09:30:05
9380
发布2022-07-27 09:30:05
举报

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

安装sounddevice包


直接通过pip就能安装。

代码语言:javascript
复制
pip3 install sounddevice -i https://pypi.tuna.tsinghua.edu.cn/simple

播放音乐


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

代码语言:javascript
复制
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函数来播放声音,需要传入需要播放声音的波形,和采样率。

代码语言:javascript
复制
import sounddevice as sd
sd.play(myarray, fs)

查看声音设备


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

代码语言:javascript
复制
sd.query_devices()

下面是我计算机上的声音设备,>标示为默认输入设备,<表示默认的输出设备,声音设备名称之前是序号。默认的设备也可以通过sd.default.device查看,返回的是一个列表,有两个元素。第一个元素为默认的输入设备,第二个元素为默认的输出设备,设备是用序号来表示的。

代码语言:javascript
复制
   0 Microsoft Sound Mapper - Input, MME (2 in, 0 out)
>  1 麦克风 (Conexant SmartAudio HD), MME (2 in, 0 out)
   2 Microsoft Sound Mapper - Output, MME (0 in, 2 out)
<  3 扬声器 (Conexant SmartAudio HD), MME (0 in, 2 out)
   4 主声音捕获驱动程序, Windows DirectSound (2 in, 0 out)
   5 麦克风 (Conexant SmartAudio HD), Windows DirectSound (2 in, 0 out)
   6 主声音驱动程序, Windows DirectSound (0 in, 2 out)
   7 扬声器 (Conexant SmartAudio HD), Windows DirectSound (0 in, 2 out)
   8 扬声器 (Conexant SmartAudio HD), Windows WASAPI (0 in, 2 out)
   9 麦克风 (Conexant SmartAudio HD), Windows WASAPI (2 in, 0 out)
  10 立体声混音 (Conexant HD Stereo Mix), Windows WDM-KS (2 in, 0 out)
  11 麦克风 (Conexant HD Audio capture), Windows WDM-KS (2 in, 0 out)
  12 Speakers (Conexant HD Audio output), Windows WDM-KS (0 in, 2 out)

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


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

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

代码语言:javascript
复制
sd.default.device[0] = 1

录制系统声音


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

代码语言:javascript
复制
fs = 44100 # Hz
length = 5 # s
recording = sd.rec(frames=fs * length, samplerate=fs, blocking=True, channels=1)

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

代码语言:javascript
复制
from scipy.io import wavfile
wavfile.write('recording.wav', fs, recording)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档