python人像录制加声音_Python实现电脑录音(含音频基础知识讲解)

article/2025/4/7 23:00:16

1452496483279d4116cede428c412c95.png

Python实现电脑录音(含音频基础知识讲解)

前言

今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能。

在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 github 上搜,用现成的就好。关于这个想法,其实 github 上已经有人实现了。

但是有些细节点,和我想的不太一样。所以呢,我还是决定自己体验一波流程,顺便踩踩坑,毕竟是从兴趣出发。

而在上篇文章留言区中,有个小伙伴也提出,其实在去年,就已经用树莓派实现了这系列的功能,我觉得还是蛮有意思的一件事。

下面进入正题。

环境准备

开始之前,先要介绍的是今天的主角,PyAudio。

这款第三方库,是一个跨平台音频库。

跨平台的性质,不用多说了吧!就是多面兼容你的系统,不论你是用的 windows 、mac、linux,它都是支持的。

安装命令如下: pip install PyAudio

mac的同志们,需要注意下,安装的时候可能会报错,安装如下即可。

brew install portaudio

完备的第三方库都会有对应的文档,地址如下:

https://people.csail.mit.edu/hubert/pyaudio/docs/#pyaudio

录音功能实现

先来介绍一下,如何使用它来进行录制音频功能!

PS: 音频方面的东西,我之前也没过多了解,近期写了 PyAudio 库的代码实现后才发现,要想明白代码的含义,还要有一些音频方面的知识作为前置储蓄,所以下面我会结合代码去通俗讲解,若有哪里不对的地方,欢迎评论区留言指出!

先来看代码。

设定参数:

CHUNK 

设定具体实现的参数,分别有 缓冲区帧数、采样位数、声道模式、采样频率。

具体实现录音代码:

def 

先用正常代码逻辑思维解释下,其中涉及到的专业名词,继续往下看,后面会有相应的解释。

首先对 pyaudio 库进行实例化。用其生成的实例化对象对数据流进行相应的打开,也就是 open 函数。在这块,分别传入了参数,采样位数、声道、采样频率,以及最后的缓冲区帧数。

调用 Python 自带的 wave 库,再次进行写入 wav 的相关设置。此处的操作类似 Python 写 txt ,只不过多了点音频设置而已。

采样频率 * 音频秒数/ 每个缓冲区帧数 ,得到的就是你要写入多少个块缓冲区的数量。最终,只需要每次循环写入固定的 1024,一共循环得出的多少个块缓冲区。即可得到最终的数据。

这里的公式计算,如果在不了解下述基础概念之前,是很难理解的。

音频基础知识普及

看了上面的代码解释,是不是一脸懵逼。来普及下所涉及到的专业名词。

首先, wav 和 mp3 的后缀结尾,有什么不同?

d43ccd3554cbde1f9273ccabb6fa8710.png

其次,关键的名词解释。

采样位数:可以理解数字音频设备处理声音的解析度,即对声音的辨析度。就像表示颜色的位数一样(8位表示256种颜色,16位表示65536种颜色),有8位,16位等。这个数越大,解析度就越高,录制和回放的声音也就越真实。

采样频率:就是对声音信息1秒钟采样多少次,以记录成数字信息。如CD音频是44.1KHz采样率,它对声音以每秒44100次的频率来记录信息。原则上采样率越高,声音的质量越好。

截取了一段百度百科的例子,关于采样频率的设定,代码中选择的即 44100 Hz 。

d1b6a6d65cd43e9830d69b65e1dbb458.png

每个缓冲区帧数:通俗的举个例子,你手里有 102400 块钱,现在要上交给女朋友。但是,你心想一口气全给她,怕撑爆了她的钱包。于是你定了一个值,每次只给她 1024 元。

这里的 1024 元即每个缓存区的帧数。你想全部上交,需要几次才能完成呢?是不是得重复上交这个动作 100 次!此时,这里的 100 次,便对应了上述代码的循环次数,即公式算出来的有多少个块缓存区

弄懂音频基础知识后,再去回看代码,你会发现那些参数的意义就一目了然了。

播放功能实现

有了以上知识点,对于读文件来说,就相当 easy 了!直接放上核心代码:

def 

读文件的话,没有什么可讲的,我是直接从官方文档的例子中 copy 的,修改了一下相应的参数,即可实现。

总结

总的来说,音频的操作,Python中的 PyAudio 库是非常友好的,当然,经过各种查阅资料,发现在写入音频文件时,不同人有不同的写法,而文中的这套公式算法,应该是较为简洁的一种。

老规矩,有想要本章全部源码的同学,后台回复 音频 ,即可获得地址。

文中关于音频的解释,哪里有错误,欢迎评论区留言指出!


http://chatgpt.dhexx.cn/article/xmkMNyZV.shtml

相关文章

linux 下 FFmpeg 录制命令

linux 下 FFmpeg 录制命令 转载自:http://blog.topspeedsnail.com/archives/1325 录制屏幕(mkv格式): ffmpeg -f x11grab -r 30 -i :0.0 -f alsa -i hw:0,0 -acodec flac -vcodec ffvhuff out.mkv 1 ffmpeg -f x11grab -r 30 -…

linux下录制视频流,Ubuntu Linux 下的PSP视频输出以及录制

前阵子,由于想录个PSP游戏的视频而又不想切到Windows,所以折腾了一下Ubuntu Linux下的办法。 最终算是实现了,以下为方法。 1、工具 需要PSP端视频输出软件,如irshell 5和FreeCheat(FC),本人用的是FC,irshe…

如何录制电脑系统声音(Audacity)

文章目录 如何录制电脑系统声音什么是AudacityAudacity 如何使用 如何录制电脑系统声音 思路:利用音频录制工具(电脑录音软件) 电脑自带录音机 现在电脑系统都自带有录音机功能,无需安装,我们直接在开始菜单里面就可…

05_Git命令详解 - CRUD

教程目录 01_版本控制概述 02_Git概述 03_Git下载和安装 04_Git底层原理解析 05_Git命令详解 - CRUD 06_Git命令详解 - 分支 07_Git命令详解 - 后悔药 08_Git远程仓库 Git高层命令 - CRUD 初始化仓库 # 命令 git init 解析:要对现有的某个项目开始用 Git…

java开发中常用的Git命令详解

java开发中常用的Git命令详解(IDEA内如何操作) 一:写这篇文章的目的是什么?二:使用场景在哪里?1:当我们要使用idea去git仓库拉代码时,首先我们的idea得配置git工具2:项目…

Git 常用命令详解

Git 常用命令详解 1. Git 常用命令1.1 常用git 命令图表汇总1.2 配置个人信息1.3 创建版本库1.4 常用Git命令汇总 2. Git 解决代码冲突3. Git 分支管理4. Git 提交代码4.1 Git本地多次提交合并成一次提交4.1.1 多次提交合并需求4.1.2 多次提交合并Git操作步骤 1. Git 常用命令 …

git命令详解( 五 )

此篇只会来介绍rebase和merge的区别 rebase merge 区别 rebase 下面我们进行一个小练习来练习一下rebase 看一下题目要求: 共有三个特性分支 —— side1 side2 和 side3将这三分支按顺序推送到远程仓库因为远程仓库已经被更新过了,所以我们还要把那些工作…

git add 命令详解

1. 前言 2. git add 基本操作 3. git add 命令参数 4. git add 背后做了什么 1. 前言 众所周知,git 中有工作区、暂存区、版本库三大组成部分 工作区: 电脑中能看到的目录,也就是写代码的地方 暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下…

git命令详解( 四 )

此篇为git命令详解的第四篇,话不多说,我们直接上知识点好吧 git Push 偏离的工作 gitPush: 此命令负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。一旦 git push 完成, 你的朋友们就可以从这个远程仓库下载你分享的成…

常用git命令详解

常用git命令 前言: 原链接:生哥哥牛逼(破音) 不争气的生哥哥链接404了,害得我要重新整理 一、概念: 1.基本概念 工作区:就是你在电脑里能看到的目录。 暂存区:英文叫 stage 或 index。一般存放在 .gi…

【Git】常用命令详解(循序渐进,逐步分析)

目录 一、Git常用命令 1.1、设置用户签名 1.2、初始化本地库 1.3查看本地库状态 1.3、添加文件到暂存区 1.4、将暂存区文件添加文件到本地库 1.5、查看历史版本(提交历史记录) 1.6、修改文件 1.7、版本穿梭 一、Git常用命令 1.1、设置用户签名…

windows大多数的弹窗提示内容是可以复制的(我们主要用于报错内容复制粘贴去百度)

现在以记事本保存时候的弹窗为例,用鼠标点击弹窗的任意位置,然后CtrlC,然后在新的记事本中可以粘贴这个提示内容了。如下图粘贴效果 1.大多数弹窗适用 2.主要用于把“报错内容”复制粘贴去百度 找解决方案

vscode 编辑特效 文字爆炸效果插件

1、在vscode应用扩展商店下载Power Mode插件 2、在vscode最左下角打开设置 在搜索框输入settings.json {"files.autoSave": "off","workbench.colorTheme": "Visual Studio Light","[json]": {"editor.quickSuggestio…

初始C语言——完数问题

问题描述: 描述:一个数如果恰好等于它的因子之和(除本身以外),这个数就成为“完数”。例:6的因子为1,2,3,而6123,因此6是完数。找出1000以内的所有完数。 代…

C语言_求完数

2020年9月5日 11:11:31 /*一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 61+2+3, 编程找出 1000 以内的所有完数。 */ 两种方法: 方法一的年代比较久远,而且算法思维比较复杂和抽象&#x…

1000以内完数c语言程序_C语言完数编程题目详解

首先看一下完数的概念:完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如61+2+3.(6的因子是1,2,3) 题目概要:请写一个C语言程序,要求输入一个数字n输出…

C语言完数计算

完数定义&#xff1a;如果一个数等于它的因子之和 例如:6123 编程工具&#xff1a;codeblocks #include<stdio.h> #include<stdlib.h> #include<math.h> void main() {int sum;//所有因子的的和int arr[20] { 0 };//声明一个数组用来存储所有的因子int n;…

C语言入门——1000以内的完数

完数定义 如果一个数恰好等于它的真因子之和&#xff0c;则称该数为“完全数” [2] 。各个小于它的约数&#xff08;真约数,列出某数的约数&#xff0c;去掉该数本身&#xff0c;剩下的就是它的真约数&#xff09;的和等于它本身的自然数叫做完全数&#xff08;Perfect numbe…

C语言———求”完数“

一个数如果恰好等于它的因子之和&#xff0c;这个数就称为 "完数 "。例如61&#xff0b;2&#xff0b;3&#xff0c;编程找出1000以内的所有完数。 分析过程 所谓完数&#xff0c;就是其因子之和&#xff08;不包括自己本身&#xff09;等于其本身&#xff0c;称其…

[C语言] [试题详解] 求1000之内的所有 完数

题目>>> 一个数如果恰好等于它的因子之和&#xff0c;这个数就称为“完数”。 例如&#xff0c;6的因子为1、2、3&#xff0c;而6&#xff1d;1&#xff0b;2&#xff0b;3&#xff0c;因此6是“完数”。 编程序找出1000之内的所有完数&#xff0c;并…