淘姐妹

淘姐妹

python怎么实现录音 python实现录音

电脑 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】


咪哥杂谈

本篇阅读时间约为 6 分钟。

1

前言

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

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

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

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

下面进入正题。

2

环境准备

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

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

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

安装命令如下:

 

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

 

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

 

3

录音功能实现

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

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

先来看代码。

设定参数:

 

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

具体实现录音代码:

 

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

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

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

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

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

4

音频基础知识普及

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

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

其次,关键的名词解释。

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

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

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

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

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

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

5

播放功能实现

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

 

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

6

总结

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

放上一段,我用 Python 录制的 wav 音频文件。短暂的 3 s。

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

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

往期精彩回顾

Python零基础福利来了!

Python减少代码量的两个内置函数

你点的每个在看,我都认真当成了喜欢


php基础知识上传示例 学习php的基础知识交流


  • 前言
  • 第一章 PHP语言学习介绍
    • 1.1 PHP部署安装环境
    • 1.2 PHP代码工具选择
  • 第二章 PHP代码基本语法
    • 2.1 PHP函数知识介绍
    • 2.2 PHP常量变量介绍
      • 2.2.1 PHP变量知识:
      • 2.2.2 PHP常量知识:
    • 2.3 PHP注释信息介绍
    • 2.4 PHP数据类型介绍
      • 2.4.1 整形数据类型
      • 2.4.2 布尔数据类型
      • 2.4.3 字符串数据类型
      • 2.4.4 浮点型数据类型
      • 2.4.5 PHP数据类型之查看和判断数据类型
    • 2.5 PHP流程控制语句
    • 2.6 PHP算数运算方法
      • 2.6.1 PHP程序自加自减运算
      • 2.6.2 PHP程序比较运算符号
      • 2.6.3 PHP程序逻辑运算符号
      • 2.6.4 PHP程序位运算
      • 2.6.5 PHP三元运算符合其它运算符
  • 第三章 PHP流程控制语句
    • 3.1 if条件控制语句
    • 3.2 if嵌套语句
    • 3.3 switch语句使用
    • 3.4 while循环语句说明
    • 3.5 for循环语句
    • 3.6 goto循环语句
  • 第四章 PHP函数基本语法
  • 第五章 PHP数组结构
    • 5.1 for循环遍历索引数组
    • 5.2 常用操作数组函数
  • 第六章 PHP正则表达式
  • 第七章 PHP文件系统管理
    • 7.1 fopen、fread、fclose操作读取文件
    • 7.2 PHP创建和修改文件内容
    • 7.3 PHP创建临时文件
    • 7.4 php移动、拷贝和删除文件
  • 总结

PHP是安全中需要掌握的一门语言,就这么一点儿时间教网络安全,不可能精通,这里就不要求你精通PHP,但是对于一些基础代码能够认识、能够编写那么就可以了。

同时,这里需要和HTML结合,如果你HTML还没懂,那么就需要加强一些HTML的技术能力了。值得一提的是,你看网页中那么多HTML代码,真的是人去写的么,那是不现实的,都是通过框架自动生成的,像现在的少儿编程不也是一样么。

外文名PHP:Hypertext Preprocessor,中文名:“超文本预处理器”是一种通用开源脚本语言。语法吸收了C语言、java和Perl的特点,利于学习,使用广泛,主要适用于web开发领域。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

PHP可以安装的环境比较广泛,可以在windows环境和Linux环境安装部署,并且已经集成比较多环境包安装。以下的这些全是各种环境包英文名,只不过代表的是不同集成环境包的名字,不用去深究。如下所示:

AppSer【【微信】】 WAMPServer …等等 对于我们才入门的学习者来说,选择集成环境包的原则: 1、更新更快,版本较新 2、操作简单易于上手 3、选择项不要过多 因此,我们下面使用的集成环境包是:PHPstudy;当然,如果你对这块比较熟悉了,也可以自行选择集成环境包。 可以在官方网站下载&#【【网址】】/

写代码的工具有很多,对于刚开始学习PHP的朋友来说,选择工具有几个原则 1、不要使用带自动提示的工具(例如eclipse、zend studio等PHP开发工具集) 2、写完的代码必须要有颜色高亮显示(不要使用txt文本编辑器等无代码颜色显示的编辑器) 推荐的开发工具: 1)、sublime 2)、PHPstorm(推荐) 注:这两个工具已经在开发环境文件夹中,直接使用即可,两个工具的使用和配置,稍后写在附录文章中。

新建test.php文件,在这个test.php文件中写入如下代码:

你可以在浏览器地址栏里面,输入你的服务器地址。我们当前是以自己的电脑作为网页服务器使用的,可以在地址中输入:

代码信息解读说明:

1、phpinfo是一个函数(功能),这个函数会显示一个当前电脑(服务器)的详细的PHP信息。 2、电脑是一个很笨的东西,需要我们人为的告诉他,代码写完了。我们用分号(;)来告诉他代码写完了。因此只要写完一段代码,就需要在后面加分号。 3、而前后两行的回车空行,是为了让代码更加好看,避免叠在一起,看着不舒服。其实中间有多少个回车空行都没有关系的,保证好看就行了。PHP的语法解释器(PHP最核心部分)不会处理这些空行的。

代码编写注意事项:

1、PHP的代码信息全部要用半角的英文、很多人容易写成全角的英文/中文和符号造成PHP代码报错。 2、PHP代码的最后一行可以加也可不加分号。由于很多学习者特别是初学者经常犯一个毛病,写完一行代码不加分号,因此容易犯错,某些公司规定一行代码写完,就必须加分号。 3、我们在写文件test.php这个文件命名的时候,只要英文半角(a-z A-Z 0-9 _-)这些字符来命名文件,文件命名不要用中文,不要用特殊符号,不要中间加空格,严格区分大小。

在这个test01.php文件中写入如下代码:

$叫作美元符,英文单词:dollar。PHP的变量必须以美元符开始。说明搞PHP有”钱”途。

变量的几个特点介绍:

1、必须要以 开 始 , 如 变 量 x 必 须 要 写 成 开始,如变量x必须要写成 xx 2、变量的首字母不能以数字开始 3、变量的名字区分大小写 4、变量不要用特殊符号、中文,_不算特殊符号 5、变量命名要有意义(别写xxx,aaa,ccc)这种变量名

变量的分类情况说明:

可变变量,外部变量,环境变量

  1. 可变变量举例说明
  1. 外部变量举例说明 PHP的外部变量是PHP在使用过程中规定好的一些变量。这个变量的规定是这样定的。

PHP代码调用以上HTML代码中的外部变量方法如下所示:

通过上面的实验我们知道了,通过$_POST这个外部变量,可以得到从表单输入的值。另外我们总结一些外部变量,要求知识点的学习级别:了解含义,默写这个单词的写法和作用。

  1. 环境变量举例说明 环境变量我们主要用的有 【【微信】】 和 _【【微信】】和 S?ERVER_ENV两个环境变量。不过,$_ENV逐渐被PHP的新版本给废弃了。

其它环境变量:

常量就是长久不变的值,常量在代码中的定义,以及书写方式如下所示:

常量知识说明:

1、常量名可以小写,但是通常大写 2、常量名可以不加引号,但是通常加上引号 3、在字符串中调用常量的时候,必须在引号外面 4、常量名建议只用字母和下划线

?>此外,系统还为我们准备了一些内置的常量,这些常量都是规定好的,先熟悉几个,还有更多的系统变量可以在入门以后扩展深入学习。

所谓注释,汉语解释为注解,更为准确一些,因为代码是英文的,并且代码很长,时间长了人会忘了代码的意思作用,所以可以加上注释进行说明提示。

注释功能说明:

1、对重点进行标注 2、时间长了容易忘记代码,方便快速回忆,以及方便查找信息 3、可以让其他人更容易看懂配置信息 4、还可以生成文档,代码写完相关的文档就写完了,提高工作效率 5、拥有注释、空行、回车之后的代码看起来更优美 6、注释可用来排错,不确定代码中哪一块写错了,可以将一大段注释,确定错误区域。 7、注释中的部分的内容,电脑不会执行它

PHP注释的方法如下所示:

  1. 单行注释(只注释一行)

单行注释举例演示:

  1. 多行注释(注释多行)

多行注释举例演示:

数据类型就是对数据分类的一种划分方式而已,例如以下举例说明: 哺乳动物:人、猫、马、鸭嘴兽…等等 蔬菜类型:西红柿、菠菜、茄子…等等 水果类型:西瓜、桃子、苹果…等等 PHP中一共有八种数据类型,包括4种标量数据类型:boolean(布尔类型)、integer(整形)、float/double(浮点型)和string(字符串型),2种复合数据类型:array(数组类型)和object(对象类型),2中特殊的数据类型:resource(资源类型)与null(无/空白类型)。

整形表示即为整数,英文称之为integer,英文简写为int;整形分为8进制、10进制、16进制,整形在计算机里面是有最大值和最小值范围的。大家经常听说32位计算机,也就是32位计算机一次运算处理的最大范围是-2的32次方到2的32次方-1;而64位计算机,就是一次运算处理的最大范围是-2的64次方到2的64次方-1。

8进制声明方式:

10进制声明方式:

16进制声明方式:以0x开始,后面跟0-f的,0x的后面的abcdef不区分大小写。(了解即可)

所谓布尔类型,汉语翻译过来之后,更好的解释是用道家中易经的语言进行解释,即为:阴/阳,男/女,真/假,对/错,存在/不存在,0/1等等。

布尔类型举例说明:

在PHP语言中声明字符串有三种方式: 1、用单引号声明 2、用双引号声明 3、用字界符声明

单引号声明

用英文半角的单引号,将字符串包起来:

双引号声明

在字符串两面加双引号

字界符声明

1、在变量后面的等号写三个小于号 <<< 2、然后在<<<后面写上字符(建议英文大写字符) 3、然后换行写上任意想写的字符 4、写完后,顶行。在行最开始处,再写上<<<后面的字符和分号。

那双引号和单引号有什么区别呢:

  1. 双引号解析变量,但是单引号不解析变量
  2. 在双引号里面插入变量,变量后面如果有英文或中文字符,会把这个字符和变量拼起来,视为一整个变量。一定要在变量后面接上特殊字符,例如空格等分开。
  3. 如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。
  4. 双引号解析转义字符,单引号不解析转义字符。但是单引号能解析\
  5. 单引号效率高于双引号,尽可能使用单引号
  6. 双引号和单引号可以互相嵌套,双引号中可以插入单引号,单引号当中插入变量,这个变量会被解析。
  7. 神奇的字符串拼接胶水――(.)点,用来拼接字符串。
  8. 一般将定界符声明字符串视为双引号一样的功能来看待。

所谓浮点类型,可以理解为,我们数学里面的小数。声明方式分为两种: 1、普通声明方式 2、科学声明方式

普通声明浮点数:

科学声明浮点数:

【【微信】】() 函数用于输出变量的相关信息。显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。 参考资料&#【【网址】】/php/php-【【微信】】.html

查看数据类型: 1、gettype(传入一个变量)能获得变量的类型 2、【【微信】】(传入一个变量)输出变量类型和值

判断数据类型方法: 使用is_*系列函数,is_types这一系列的函数,来进行判断某个数据属于哪种类型,如果是这个类型返回真,不是这个类型返回假。

算数运算符,就是小学所学过的大多数知识:

自加自减运算就是把自己加1或者减1。如果学习过其它变成语言。会发现,此处的用法又是计算机里面的一个规定。可以这样用,用起来更加简洁。

上面的用法说明其实很简单,按照上面的例子,分成步骤去按过程判断即可:

比较运算符,在大家小学的时候就学了很多

逻辑运算符号比较简单,是我们人类进行逻辑思考时的一种方式。

三元运算符,相当于是if…else结构,不过三元运算符的写法更加简洁,语法格式如下:

比如:郝斌同学是无趣的人。他回家时候做的事如下所示: 如果半夜回家,先去睡觉 如果早上回家,先去洗澡 如果中午回家,先去吃法 如果晚上回家,先去烧水 下面来了解下他的活动安排PHP语法规则:

流程代码信息示例01:

流程代码信息示例02:

比如:王总在出行计划和工作项目中具有极高的规划性,他给自己的生活秘书和工作秘书分别指派了出差的行程: 生活上:先查天气,下雨带雨具和毛巾,不下雨要带防晒霜,雨具、毛巾和防晒霜的情况要提前检查,如果没有要及时购买。 工作上:要提前沟通出差的工作任务,准备好了要及时检查确认,打印签单。没有及时准备好的情况下,要列出主要的项目议题。

类似于上面的这种情况判断,就需要用到if…else if…else反复嵌套的结构了. 在if语句中可以嵌套一个或多个if语句,以实现多个参数的判断,这就是if语句的多种嵌套.

嵌套结构如下所示:

流程代码信息示例01:

比如:王同学家里特别有钱,所以他的行程方式和正常人的有些不一样. 他的出行方式有以下6种方式: 司机开车/民航/自己家的专机/火车动车/骑马/游轮 switch…case的语法结构如下:

上面的break是可选的,上面的default也是可选的,不要在case后面写成分号,后面是冒号.不要在case后面写判断区间,如($foo >20 或者 $foo == 30) Switch里面的变量最好是整形 字符串 因为布尔判断更适合if…else.

比如:王总需要反复往返于北京和大连,就是典型的循环结构.假设王总投资这个项目需要往返大连100次,每次访问都会计数一次.难道写一百遍同样的代码?显然对于智商极高的程序员来说不可能这样处理。

需要抽象人类的思维逻辑,定义一个循环结构:

版权声明:除非特别标注原创,其它均来自互联网,转载时请以链接形式注明文章出处。

上一篇能够使用smb协议的安卓文件管理器 androidsmb权限

下一篇mac濡備綍鐪嬭嚜宸辩殑ip mac濡備綍鏌ョ湅缃戠珯ip