本帖最后由 cepoly 于 2018-9-13 20:10 编辑
现在小朋友的玩具相当是高大上了,以前在手机上一款“会说话的猫”,都能让小朋友不要妈妈了,现在又来了AI玩具机器人,小朋友也是不亦乐乎,天天抱着睡觉了,价格也是相当的诱人,但对于DIY的老司机来说,还是贵啊。有没有DIY房地产的工程师,把房价降下来!
硬件:
一片ESP8266-07
一片8978语音芯片,可录音及播放
电源电路
软件:
实现智能语音对话功能
先上电路原理图
WM8978音频编译码器WM8978是一个低功耗、高质量的立体声多媒体数字信号编译码器。它主要应用于便携式应用。它结合了立体声差分麦克风的前置放大与扬声器、耳机和差分、立体声线输出的驱动,减少了应用时必需的外部组件,比如不需要单独的麦克风或者耳机的放大器。 WM8978可以被应用为一个主机或者一个从机。基于共同的参考时钟频率,比如 12MHz和13MHz,内部的PLL可以为编译码器提供所有需要的音频时钟。与控制器连接使用,ESP8266作为主机,WM8978作为从机。 WM8978 通信接口WM8978有两个通信接口,一个是数字音频通信接口,另外一个是控制接口。音频接口是采用I2S接口,支持左对齐、右对齐和I2S标准模式,以及DSP模式A和模拟B。控制接口用于控制器发送控制命令配置WM8978运行状态,它提供2线或3线控制接口,对于STM32控制器,我们选择2线接口方式,它实际就是I2C总线方式,其芯片地址固定为0011010。通过控制接口可以访问WM8978内部寄存器,实现芯片工作环境配置,总共有58个寄存器,标示为R0至R57,每个寄存器意义参考《WM8978_v4.5》了解。 WM8978寄存器是16bit长度,高7位([15:9]bit)用于标示寄存器地址,低9为有实际意义。所以在控制器向芯片发送控制命令时,必须传输长度为16bit的指令,芯片会根据接收命令高7位值寻址。 WAVE文件WAVE文件是非常简单的一种RIFF文件,包括编码方式、声道数目、采样频率、每个采样需要的bit数等等信息。绝大部分WAVE文件是PCM编码。PCM编码声音数据可以说是在"数字音频技术"介绍的源数据,主要参数是采样频率和量化位数。
录音与识别播放对话后语音通过I2S接口将音频数据发送到WM8978芯片,这样在WM8978芯片的扬声器接口即可输出声音,整个系统构成一个简单的音频播放器。反过来,我们可以实现录音功能,控制启动WM8978芯片的麦克风输入功能,音频数据从WM8978芯片的I2S接口传输到ESP8266,经过编码后,利用云端识别接口,把语音数据推送至云端对话识别。 WM8978寄存器配置 static uint16_t wm8978_RegInit[] = { 0x000, 0x000, 0x000, 0x000, 0x050, 0x000, 0x140, 0x000, 0x000, 0x000, 0x000, 0x0FF, 0x0FF, 0x000, 0x100, 0x0FF, 0x0FF, 0x000, 0x12C, 0x02C, 0x02C, 0x02C, 0x02C, 0x000, 0x032, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x038, 0x00B, 0x032, 0x000, 0x008, 0x00C, 0x093, 0x0E9, 0x000, 0x000, 0x000, 0x000, 0x003, 0x010, 0x010, 0x100, 0x100, 0x002, 0x001, 0x001, 0x039, 0x039, 0x039, 0x039, 0x001, 0x001 };
|