利用免费的百度语音及合成服务,图灵机器人聊天服务,在加上一点简单的硬件模块,我们就可以用树莓派搭建自己的语音机器人
1 组成模块
- 树莓派
- 支持3.5mm输入的小音箱
- 不到20块钱的小麦克风
- 可以同时接入麦克风和音箱的USB声卡
- (不是必须) MAX7219 LED点阵屏
程序流程图
2 音频输入和输出
树莓派3B带有3.5MM音频输出口,所以可以直接接到自己的音箱上,但是没有音频输入接口,所以所以可以买一个可同时支持输入和输出的USB声卡,把麦克风和音箱接上。
3.5MM输出功能可能需要进入配置页面打开,执行sudo raspi-config
命令进入系统配置,在Advanced Options -> Audio中打开3.5MM。
怎么用python程序控制音频输入和输出?可以直接利用PyAudio这个库,教程地址:http://people.csail.mit.edu/hubert/pyaudio/#examples ,教程中给出了很多example,可以看到使用起来是很简单的,它使用流对象来处理输入输出数据,并且支持非阻塞调用
可以用下面的代码来测试麦克风和音箱工作是否正常,这段程序就是接收麦克风的信号同时输出到音箱,如果工作正常就是一个话筒的效果
import pyaudio
import os
import sys
import time
#os.close(sys.stderr.fileno())
WIDTH=2
CHANNELS=2
RATE=44100
p=pyaudio.PyAudio()
def callback(in_data,frame_count,time_info,status):
return (in_data,pyaudio.paContinue)
stream=p.open(format=p.get_format_from_width(WIDTH),
channels=CHANNELS,
rate=RATE,
input=True,
output=True,
stream_callback=callback)
stream.start_stream()
while stream.is_active():
time.sleep(0.1)
stream.stop_stream()
stream.close()
p.terminate()
这段程序使用非阻塞方法,指定回调函数为callback,我们可以从输入参数in_data中获取从麦克风输入的数据,在return的时候传入的数据则会输出到音箱。
3 百度语音识别和语音合成
百度提供了语音识别和语音合成的API接口,我们只要注册并创建应用就可以调用了。
在官网上创建一个应用,记住分配的AppID, API Key和Secre