前言
这几天看了点PyQt相关的知识,感觉可以结合之前得一些内容做出点什么好玩的东西。
之前做过文本转语音的聊天机器人,昨天又恰好做了关于音频处理的。借此机会,整合一下,来做个有界面的语音文本聊天机器人好了。
先来看看最终的效果图。
文本语音聊天机器人效果图
对这些基础内容不是很了解的可以参考我之前的文章。
环境
环境搭建是个坑,之前一直在用的pyttsx语音引擎竟然不支持Python36,只能在Python27版本使用。所以无奈只能选用微软的提供的win32com.client了。
本机环境
本机环境如下
Windows10 64位
Python36
PyCharm pro
所需包
所需包一开始我是手动统计的,但是后来觉得版本这块最好还是精确一下,于是使用了pip的一个freeze命令。
pip freeze > requirements.txt
得到了下面的这些所需的库文件(我删除了一些没用到的)。
PyAudio==0.2.11
PyQt5==5.8.2
pyttsx==1.1
pywin32==221
requests==2.13.0
sip==4.19.2
各大模块
下面开始针对各大模块简要的介绍一下。
百度语音接口
百度语音接口是用来处理本地音频到文本内容转换而使用的。需要用到标准库中的wave库,来处理.wav音频文件。
# coding: utf8
# @Author: 郭 璞
# @File: baiduyuyin.py
# @Time: 2017/5/11
# @Contact: 1064319632@qq.com
# @blog: http://blog.csdn.net/marksinoberg
# @Description: 借助百度语音识别接口实现本地语音解析
import pyaudio
import wave
import requests
import json
class BaiDuYuYin(object):
def __init__(self):
# get the token
self.token = self.gettoken()
def gettoken(self):
try:
apiKey = "Ll0c嘿嘿2ZSGAU"
secretKey = "44c8a这个不能说34936227d4a19dc2"
auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apiKey + "&client_secret=" + secretKey
response = requests.get(url=auth_url)
jsondata = response.text
return json.loads(jsondata)['access_token']
except Exception as e:
raise Exception("Cannot get the token, the reason is {}".format(e))
def parse(self, wavefile='local.wav'):
"""
返回音频文件对应的文本内容。
注意返回的是列表类型的数据,待会处理的时候要格外的小心。
:param wavefile:
:return:
"""
try:
fp = wave.open(wavefile, 'rb')
# 已经录好音的音频片段内容
nframes = fp.getnframes(