使用 Python 的 sounddevice 包录制系统声音
博客中的文章均为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()
下面是我计算机上的声音设备,>标示为默认输入设备,<表示默认的输出设备,声音设备名称之前是序号。默认的设备也可以通过sd.default.device查看,返回的是一个列表,有两个元素。第一个元素为默认的输入设备,第二个元素为默认的输出设备,设备是用序号来表示的。
0 Microsoft 声音映射器 - Input, MME (2 in, 0 out)
> 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)
使用 Python 的 sounddevice 包录制系统声音的更多相关文章
- Mac录屏同时录制系统声音和画外音(Soundflower无法安装解决方案)
个人博客地址:xzajyjs.cn 前言 以前一直有录屏的需求,但苦于自带的QuickTime 无法录制内屏声音,一直使用的是第三方的app.近期开腾讯会议需要录屏,但主持人本身没有开启录屏权限,只好 ...
- FastStone Capture无法录制系统声音解决方法(win10)
步骤一: 右键桌面-->个性化 步骤二: 主题-->高级声音设置 步骤三: 录音-->右键“立体声混音”,单击启用就OK了.
- Python黑帽编程1.3 Python运行时与包管理工具
Python黑帽编程1.3 Python运行时与包管理工具 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...
- python的egg包的安装和制作]
Defining Python Source Code Encodings Python egg 的安装 egg文件制作与安装 2011-06-10 14:22:50| 分类: python | ...
- 繁简转换OpenCC,autogb 和 autob5,iconv,python的jianfan包
OpenCC OpenCC 是跨平台.多语言的开放中文转换库,除了基本的简繁转换功能外,用户还可以选择对不同用词习惯和异体字的处理方式. OpenCC 还提供方便的网页转换界面. OpenOffice ...
- python自动化运维:系统基础信息模块
p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 第一章: 首先介绍下系统性能信息模块:psutil psutil能够轻松实现获取系统 ...
- Python/模块与包之模块
Python/模块与包之模块 1.什么是模块? 模块就是py文件 2.为什么要用模块? 如果在解释器上进行编码,把解释器关闭之前写的文件就不存在了,如果使用模块的话就能永久保存在磁盘中. 3.如何使用 ...
- mas录屏,带系统声音和麦克风声音
自带的QuickTime + Soundflower 可完美解决,同时录系统的声音和mic声音,也可以只录系统声音. 安装Soundflower 在应用程序 -> 实用工具,里面找到“音频 MI ...
- 数据分析:基于Python的自定义文件格式转换系统
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
随机推荐
- 公告:开通csdn博客,敬请关注!
公告:开通csdn博客,敬请关注!地址:https://blog.csdn.net/cyjch
- struts2初探(一)
首先需要了解Struts2框架的运行过程: request从发送到服务器,即tomcat,然后tomcat参考web.xml,发现所有的url都需要经过struts2的过滤, Struts2调用dof ...
- PID控制算法的C语言实现二 PID算法的离散化
上一节中,我论述了PID算法的基本形式,并对其控制过程的实现有了一个简要的说明,通过上一节的总结,基本已经可以明白PID控制的过程.这一节中先继续上一节内容补充说明一下. 1.说明一下反馈控制的原理, ...
- 【mysql】测试方案整理
http://www.cnblogs.com/callhe/ https://www.digitalocean.com/community/tutorials/how-to-measure-mysql ...
- socketpair + signal + select 的套路
1:起因 最近在看代码时连续两次看到这三个函数的组合使用,为方便以后借鉴和回忆,先记录下来. 这三个函数的应用场景是这样的: 1.1 首先socketpair函数创建一对已连接套接字,返回的两个描述符 ...
- oracle导入提示IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件
oracle导入提示:IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件IMP-00000: 未成功终止导入 解决办法:用户缺少导入权限,授予用户导入权限grant imp_ful ...
- 莫队+分块 BZOJ 3809
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1634 Solved: 482[Submit][Status][Di ...
- 新Linux系统配置yum源
新的Linux系统安装好以后,yum的源还是需要配置一下的,我使用的是redhat6.6版本,同时为了不注册而使用更多的yum源的资源,也需要做一下的修改. 1. 删除redhat原有的yum源 # ...
- html css 如何将表头固定
position属性取值为fixed时,则元素的位置将不受滚动条的影响,而是直接依据窗口定位,这就是将表头固定的最直接方法,网上其他途径感觉都是在走弯路.但是与此同时必须解决两个问题.第一:表体将随之 ...
- c++ virtual总结
virtual-关键字用于修饰成员函数时,有以下特性 1.用于修饰的基类的成员函数,被修饰的基类成员函数-其派生类的同名成员函数也默认带有virtual 关键字2.当virtual 用于修饰析构函数( ...