使用 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; } /* ...
随机推荐
- poj1850 Code
Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10059 Accepted: 4816 Description ...
- 洛谷P1290 欧几里得的游戏
题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的数的正整数倍,当然,得到的数 ...
- C++内存分配与释放
C++内存分配与释放 1. new 运算符 与 operator new一条 new 表达式语句( new Type; )中的 new 是指 new 运算符.operator new 是定义在 #in ...
- Debian9(8)下python3和python2同时安装如何使用pip
在bash下Python会调用python2.x python3会调用python3.x 如果使用pip install命令安装模块会安装python2的模块. 而python3的pip命令使用的是p ...
- 2017国庆 清北学堂 北京综合强化班 Day1
期望得分:60+ +0=60+ 实际得分:30+56+0=86 时间规划极端不合理,T2忘了叉积计算,用解析几何算,还有的情况很难处理,浪费太多时间,最后gg 导致T3只剩50分钟,20分钟写完代码, ...
- c#开发_Dev的关于XtraGrid的使用(GridControl小结)
1,增加新行用InitNewRow事件,给新行某字段赋值.后结束编辑. private void grdView_InitNewRow(object sender, DevExpress.XtraGr ...
- Spring boot初始
1 创建pom.xml parent:org.springframework.boot 包含启动的依赖 添加依赖,如 spring-boot-starter-web mvn dependency:t ...
- 数组A - 财务管理
Larry graduated this year and finally has a job. He's making a lot of money, but somehow never seems ...
- bzoj 1143 二分图最大独立集
我们可以将一个点拆成两个点x,y,那么如果存在一条i->j的路径,我们就连接xi,yj,那么答案就是n-最大匹配数. 因为i->j所以对于i与j只能选一个,那么我们只需要求出来二分图的最大 ...
- docker使用现有容器生成新的镜像
/*运行docker run后 --则进入该容器里了 我们做一些变更,比如安装一些东西 ,然后针对这个容器进行创建新的镜像 */ 基本形式: docker commit -m "change ...