python构建聊天机器人之录制声音保存为音频文件(利用pyaudio进行录音)
最近心血来潮想利用 python构建一个智能语音聊天机器人,这样就能在我们无聊的时候和我们聊天以此打发时间啦:)。
要想最终实现聊天机器人的构建需要经过一系列过程功能的实现,大致思路为程序接受用户的语音保存为音频文件→识别音频文件转换为文本→调用第三方机器人接口获得文本反馈→将文本反馈转换为语音读出来→后期美化补充。
说干就干,首先要实现将我们的声音录制下来保存为音频文件。说到录音,我们都知道是由计算机内部声卡实现的,所以我们需要利用pyaudio库调用声卡进行声音录制,而保存音频文件我们可以使用python自带的wave库来将音频保存为wav音频文件。
说到音频,我们有必要了解一下计算机存储与播放音频的原理。自然界我们听到的声音被称为模拟信号,而计算机能够处理的我们称之为数字信号,将模拟信号转换为数字信号需要经历采样,量化与编码的步骤。采样涉及到①采样率:即1s采集多少次声音,也就是所得数字信号每秒的样本数。采样率越高,声音还原越真实自然,同时占资源也就越多,常见的有16000,44100。②采样位数(深度):声卡在播放时所使用的数字信号的二进制位数,简单来说就是声卡处理声音的解析度,就是采样点的大小,一般有8,16两个参数可以选择,数值越大,解析度越高,声音越真实。③采样宽度:采样宽度即为采样的一个点在存储器中需要占用的字节宽度byte,当采样深度为paInt16时宽度为2。④帧长度:一帧记录了一个声音单元,帧的长度是样本长度与声道数的乘积,ACC规定帧的大小为1024,sample和mp3为1152。比如一段5s的音频,采样率为16000,则共有样本数80000个,同时用ACC编码一帧数有1024个样本,则可以计算出共有78.125帧。同时一段音频帧的长度也可以通过一个帧对应的采样样本个数/采样频率得出,即为1024/16000=64ms。⑤声道:声道数也就是声音录制时的音源数量或播放时相应的扬声器数量。我们平时常说的立体声很明显就是多声道的。而量化与编码就是进一步将采集的样本处理为二进制保存在硬盘之中。
了解了音频相关知识我们使用起来pyaudio就显得十分轻松。在导入pyaudio和wave库之后我们需要实例化一个pyaudio对象,接着设置参数,主要包括帧长度,采样深度,采样率,声道数,采样时间,存储列表,接着调用open函数来设置参数,之后再以帧数(帧数可以通过帧长度,采样时间和采样率计算)为单位将二进制文件保存到存储列表之中,然后停止录制,最后将二进制对象转换为wav音频文件即可,在转化为wav文件时需要设置声道,采样率和采样宽度(可以根据pyaudio对象get_sample_size函数输入采样深度获取)。
后续的开发也在进行哦,欢迎小伙伴们关注!
源代码如下(亲测可用哦~):
import pyaudio,wave#导入相关的库#实例化一个pyaudio对象
pa=pyaudio.PyAudio()#设置声卡参数
chunk=1024#帧长度
Format=pyaudio.paInt16#采样深度
CHANNELS=2#声道
RATE=16000#采样率
record_seconds=5#设置录制时间
#RATE/chunk*record_seconds为一秒采样数除以一帧长度和录制秒数可以得到帧数#新建一个列表,用来存储数据
record_list=[]#打开声卡,设置参数,设置音频流
stream=pa.open(format=Format,rate=RATE,channels=CHANNELS,frames_per_buffer=chunk,input=True)#开始录制
print('开始录制...')#进行录制与采样
for i in range(0,int(RATE/chunk*record_seconds)):data=stream.read(chunk)#为每一帧的样本二进制数据record_list.append(data)#得到的是保存的二进制数据#录制完成
stream.stop_stream()#停止调用声卡
stream.close()#关闭声卡
pa.terminate()#结束pyaudio对象
print('录制结束...')#保存音频文件(wav文件类型)
file=wave.open('voice.wav','wb')#创建voice文件
file.setnchannels(CHANNELS)#设置声道数
file.setsampwidth(pa.get_sample_size(Format))#设置采样宽度,通过pa.get_sample_size(format)可以得到
file.setframerate(RATE)#设置采样率
file.writeframes(b''.join(record_list))#将二进制文件加入到wav文件之中
file.close()
python构建聊天机器人之录制声音保存为音频文件(利用pyaudio进行录音)相关推荐
- NoneBot2,基于Python的聊天机器人
NoneBot2,基于Python的聊天机器人 第一步,配置python 第二步,配置[go-cqhttp](https://github.com/Mrs4s/go-cqhttp) 第三步,配置[No ...
- python制作聊天机器人原理_用 Python 来做一个聊天机器人吧!(一)
在我的一个回答里,我提到了用 Python 搭建聊天机器人.从今天开始,我就带着大家从0开始搭建一个聊天机器人. (顺便说一句,我喜欢把链接像上面这样加在文字里,如果找不到文中所说的资源,可以看看周围 ...
- 问答系统实践(二)构建聊天机器人小天1.0
口水简介 本文主要教你如何构建基于模糊检索和深度学习的聊天机器人.之前在专栏的一篇文章已经介绍了FAQ客服机器人的基本构建流程,所以本文就不重复介绍了.详细请参看: 其实无论客服机器人还是聊天机器人都 ...
- ChatterBot构建聊天机器人
一.预备知识 机器人应答逻辑(Logic Adapter),针对每个部分设计了不同的适配器 Closet Match Adapter:字符串模糊匹配(编辑距离) Closet Meaning Adap ...
- Keras深度学习实战(34)——构建聊天机器人
Keras深度学习实战(34)--构建聊天机器人 0. 前言 1. 模型与数据集分析 1.1 命名实体识别 1.2 数据集分析 1.3 模型分析 2. 实现聊天机器人 2.1 命名实体提取模型 2.2 ...
- python英文聊天机器人(亲测可用)
python英文聊天机器人(亲测可用) 本文参考https://www.cnblogs.com/youcong/p/10462924.html 第一步: 下载所需包 pip install aiml ...
- 采用FFmpeg从视频中提取音频(声音)保存为mp3文件
采用FFmpeg从视频中提取音频(声音)保存为mp3文件 作者:雨水,日期:2016年1月9日 CSDN博客:http://blog.csdn.net/gobitan 摘要:看到好的视频文件,如果想把 ...
- Windows Phone 8初学者开发—第21部分:永久保存Wav音频文件
第21部分:永久保存Wav音频文件 原文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Begi ...
- python使用md5加密_如何使用Python构建加密机器人并将其连接到Facebook Messenger
python使用md5加密 by Paul Pinard 保罗·皮纳德(Paul Pinard) 认识Sato the Cryptobot,他能够从外部API获取任何加密货币的价格! (Meet Sa ...
最新文章
- 1.8 Remove
- log4j无法显示mybatis sql
- python3 音乐播放器_python3 音乐播放器
- PHP获取用户地址方法
- 【剑指offer】找出数组中出现一次的两个数
- php 时间周期,php 的生命周期
- 重磅!教育部撤销518个高校专业
- zynq中mgtx应用_【干货分享】ZYNQ常用外设设计 (上)
- SCSS和Sass有什么区别?
- 宏、函数、宏和函数的区别
- Exchange 2007 前端 IIS 内存占用过高
- servlet的请求和重定向详解
- Centos7 完全卸载MySQL8.0
- 离线地图开发之标注柱状图特效(源代码)
- 立即从iOS 10和macOS Sierra下载壁纸
- matlab线性方程组画图,线性方程组求解在Excel和Matlab中的实现
- 显著目标检测的研究思路
- 【51nod 1538】一道难题(常系数齐次线性递推)
- 图文并茂:超可爱的12星座猫
- “清华学霸计划表”刷爆家长群:自律的孩子有多棒?你想象不到
热门文章
- Unity3d小球碰到墙壁之后反弹
- 用nodejs写一个yys挂机脚本
- 使用html 语言建立一个简单的网页,如何用记事本建立简单的网页(1).doc
- python小模块----cookie
- 2022年11月骨传导耳机排名,骨传导蓝牙耳机品牌怎么选?
- python selenium中析构方法报错sys.meta_path is None, Python is likely shutting down如何解决?
- 周末了,看,首富出门遛狗。
- 吴莫愁公布恋情爱上哈林 演唱会庾澄庆单膝跪地似求婚
- pnpm安装使用教程以及pnpm node版本管理以及EPERM operation not permitted symlink问题解决
- CTOR是否有助于BCH分片技术?