乐鑫Esp32学习之旅 23 安信可 esp32-a1s 音频开发板移植最新 esp-adf 音频框架,小试牛刀如何实现在线文字转语音播放。
Posted on 2020-02-04 14:18 CoreHouse 阅读(1036) 评论(0) 编辑 收藏 举报- 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
1、 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 “Hellow World”。
2、 巧用eclipes编辑器,官方教程在在Windows下搭建esp32开发环境,打印 “Hellow World”。
3、 认识基本esp32的GPIO接口,开始点亮您的第一盏 LED和中断回调实现按键功能 。
4、体会esp32的强大的定时器功能, 实现定时2s闪烁一盏LED灯。
5、接触实践esp32的pwm宽度脉冲功能, 实现呼吸效果闪烁一盏LED灯。
6、smartConfig和微信airKiss在esp32的实现,一键配网轻松快捷连接路由器。
7、利用GPIO中断做一个按键的短按和长按的回调事件,再也无须担心触发源。
8、esp32上实现本地 UDP 客户端和服务端角色,在局域网内实现通讯。
9、esp32上实现本地 TCP 客户端和服务端角色,可断线重连原路返回数据。
10、乐鑫esp32 SDK编程利用rmt驱动ws2812七彩灯,实现彩虹渐变效果。
11、入门 乐鑫esp-adf 音频框架开发,esp32造一个蓝牙耳机,实现切换歌曲,获取歌曲信息等功能。
12、开源一个微信公众号airkiss配网esp32以及局域网发现功能的工程,分享一个airkiss配网小工具。
13、esp32 内置 dns 服务器,无需外网访问域名返回指定网页。
14、esp32 sdk编程实现门户强制认证,连接esp32热点之后,自动强制弹出指定的登录界面。
15、认识本地离线语音唤醒识别框架 esp-skainet ,实现较低成本的硬件语音本地识别控制。
16、学习本地语音唤醒离线识别框架 esp-skainet ,如何修改唤醒词? 如何自定义命令词?如何做意图动作?
17、全网首发,乐鑫esp32 sdk直连京东微联·小京鱼 · IoT开放平台,实现叮咚音响语音智能控制。
18、入门京东微联·小京鱼的控制面板H5开发,读懂vue语法,做自己的控制页面。
19、重磅开源,如何在微信小程序上ble蓝牙配网esp32,blufi的那些事!
20、一篇好文,开发过程中编译esp32固件太大,无法正常启动?教你如何自定义分区表partitions.csv。
21、 esp32蓝牙配网blufi的高度封装,集成简单、使用简单、容易上手,提高开发效率!
22、讨论下程序员 “青春饭” 那些事,分享在esp32实现多种加密算法md5 |AES CBC-ECB| Sha1 | Sha256 等!
23、安信可 esp32-a1s 音频开发板移植最新 esp-adf 音频框架,小试牛刀如何实现在线文字转语音播放。
文章目录
一、前言
时光如梭,我已经在CSDN驻扎了4年了,不忘初心,我依然是每次学习新的东西,就立刻写博文总结出来,养成 “好记性不如烂笔头” 的习惯,往后回头看,那是值得回忆的里程碑。
与往常过年一样,依旧带着一包一电脑,还拎着几个开发板回家,今年疫情严重,不走亲戚,只好慢慢敲代码;
这2个月,在武汉发现的新型病毒感染肺炎事件中,我看到了一代中国人的团结凝聚的力量,也看到了背后的一幕。从几个人感染到目前全国1.7w的感染确诊,一场无硝烟的战争,有人发国难财,有的抬高口罩价格,有的卖假货,有的虚报荒情,人心叵测。这里愿各位朋友,务必注意个人卫生健康习惯,不仅是为了自己,也为了家里人,更是体现一个国家的优良传统。
二、安信可 esp32-a1s 模块
本篇文章 为什么要先从安信可 esp32-a1s
模块说起,并不是打广告,我们都知道:乐鑫esp32可以实现很多语音的功能,包括在线离线语音识别,在线合成等。乐鑫的开发板都是一个 esp32模组 + 一个音频芯片分别焊在板子里面,而安信可 esp32-a1s
模块恰恰结合了这点,把 esp32芯片最小系统和音频芯片做成了一个模组,也就是一个模组里面 有 esp32芯片和音频解码芯片。
与乐鑫官方模块有何优点?最大的好处就是内置音频芯片,做音频相关时候不用关心如何连接音频芯片,后面为大家介绍如何做一个最简单的 “阉割版esp32播放器”。
下面把安信可 esp32-a1s
模块统称为 模块!
下面整理了模块的常见问题:
- 模块内含一个 esp32芯片和音频模组?具体点?
- 答: 采用具有双核处理器的ESP32作为主控,模块内部配置有4M的PSRAM和CodeC音频处理芯片,音频芯片为 AC101。
- 到手之后,这模块为何比平常大了那么大?
- 答: 主要是因为里面多了个音频芯片 ac101!为了验证与上述是否一致?我把开发板里面的模块外壳拆开,给大家看看。专业拆货,请勿模仿!保护罩设计有很多讲究,主要的防尘功能,以及是否对信号有干扰,平常不要拆开它!
- 这模块内部连线怎么样的?可用的io有哪些?
三、移植乐鑫最新 esp-adf 框架进去安信可音频开发板
据了解,安信可音频开发板已经售卖上架有2年多了,但是一直不温不热,很大原因在于推广不够,或技术支持不到位,于是乎,我决定根据现有的代码,统一移植乐鑫最新 esp-adf 框架进去,实现以下功能:
- 音乐播放器或录音机支持音频格式,例如MP3,AAC,FLAC,WAV,OGG,OPUS,AMR,TS,EQ,Downmixer,Sonic,ALC,G.711 …
- 从以下来源播放音乐:HTTP,HLS(HTTP实时流),SPIFFS,SDCARD,A2DP来源,A2DP接收器,HFP …
- 集成媒体服务,例如:DLNA,VoIP …
- 网络广播
- 语音识别以及与Alexa,DuerOS等在线服务的集成…
3.1 如何移植?
这里先贴出我已经移植好的框架地址:
- GitHub:https://github.com/Ai-Thinker-Open/ESP32-A1S-AudioKit.git
- 码云:https://gitee.com/xuhongv/AiThinker-esp32-A1s-AudioKit
首先,我们知道在玩其乐鑫框架时候,会有通过面板对board 板子的选项,我就从这里入手,于是乎认真查找,分别找到了components下的audio_board 和 audio_hal 的2个文件夹。
文件夹《audio_board》 顾名思义,就是对板子的定义,首先,我们新建一个开发板选项,同时新建文件夹放我们板子的io口定义等。
然后,我们编辑 component.mk文件,增加条件编译语句,看得出来,当选定为安信可板子时候,指定的文件夹编译:
ifdef CONFIG_ESP_AI_THINKER_V2_2_BOARD
COMPONENT_ADD_INCLUDEDIRS += ./ai_thinker_audio_kit_v2_2
COMPONENT_SRCDIRS += ./ai_thinker_audio_kit_v2_2
endif
其次,照葫芦画瓢,我们在《ai_thinker_audio_kit_v2_2》文件夹新建几个源文件,一一实现方法,过程是非常讲究的,这里我直接拿前辈的代码不断适配,期间花了整整一天,总结如下:
- esp32芯片对音频芯片i2s的驱动初始化等io初始化的管脚初始化。
- esp32芯片驱动 SD 卡的 io 口定义;
- esp32音频设置的回调函数定义,包括声音设置,调大调小等;
- 开发板的按键初始化工作实现。
- 还有一些零碎的可用的 led 的管脚定义。
最后,就是重点的如何驱动音频芯片AC101的具体细节源码实现,那么在文件夹《audio_hal》里面增加源码 ac101.c 和 ac101.h 文件。别忘了还要在component.mk文件增加条件编译:
COMPONENT_ADD_INCLUDEDIRS += ./driver/ac101
COMPONENT_SRCDIRS += ./driver/ac101
四、在线语音合成
首先,需要在 百度AI开放平台 创建一个语音合成的应用。选择语音识别或者语音合成。
创建一个应用:
创建应用是为了得到一些接入参数,就是 api key
和 secret key
。
跑起官方例程 /examples/cloud_services/pipeline_baidu_speech_mp3,然后通过面板设置家庭路由器ssid和密码,还有上面的2个参数!
然后插上耳机或喇叭听吧!
有任何疑问联系本人下方邮箱或加qq群或文章留言,不要私信我,我已经屏蔽私信!多多支持!
另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!
- 玩转
esp8266
带你飞、加群QQ
群,不喜的朋友勿喷勿加:434878850 - 个人邮箱:xuhongv@yeah.net 24小时在线,有回必回复!
- esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
- esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
- 关注下面微信公众号二维码,干货多多,第一时间推送!