1. 背景

基于目前ESP32平台的小智聊天机器人比较火,以及个人对这方面比较感兴趣,也一直从事相关音频方向的技术开发,本人淘了一块虾哥Xmini-C3开发板回来试用研究,购买链接如下:

小智AI机器人智能语音聊天虾哥Xmini-C3开发板已接入DeepSeek豆包-淘宝网

2. 介绍

虾哥Xmini-C3开发板是一个由虾哥开源的 ESP32 项目,github地址如下:

78/xiaozhi-esp32: An MCP-based chatbot | 一个基于MCP的聊天机器人

3.硬件

开发板硬件效果如下图所示:

4.开发

开发板买回来后,迫不及待地上电开机配网试用了一下效果,聊天对话交流这些都还不错,但是让它播放歌曲的时候,明显感觉声音比较沉闷,音量调到稍大一些时就有明显的破音,严重影响体验,激起了我改造它的兴趣。

4.1 首先声音比较沉闷怀疑是不是喇叭效果不行,换了个音腔好一点的喇叭,如下图所示:

更换喇叭后效果确实改善一点点,但还是没有达到理想的效果,下载了github下的开发环境,下一步打算调一下EQ看看;

4.2  看板子上使用的音频codec是顺芯的ES8311,下载它的datasheet来研究了一番,发现它的EQ调节只支持一段,可调节的效果比较有限,如简单拉高一下低频什么的,还是达不到想要的效果,只能再想想其他办法。

网上搜索了解了一下,无意间看到晶益微公司官网上有个JY6311刚好跟ES8311是PinToPin的,并且主要是它的DAC EQ支持3段调节,能够满足常用的EQ效果调节需求,果断在官网申请了样片并下载了相关的datasheet以及申请驱动支持包等。

参照ES8311提前把驱动移植进了开发环境,并按JY6311的EQ调节工具相关说明调节了一版EQ和DRC参数集成到了驱动里面。芯片到手后立刻焊接起来听了一下效果,果然调节了3段EQ后声音没那么沉闷了,人声比较突出,低音也比较强劲,并且由于使用DRC调节了增益曲线,解决了破音问题,听起来舒服多了, 感觉比我的智能音箱效果还要好一些。

5. JY6311驱动移植简要步骤

下面简单介绍一下上面的基于虾哥开源的xiaozhi-esp32-main开发环境移植JY6311驱动的简要步骤(JY6311驱动支持包可到晶益微官网申请下载)(此处codec驱动直接移植到managed_components目录下,若espressif__esp_codec_dev放在components目录下,请参考移植到对应目录下即可):

5.1 拷贝jy6311驱动文件到相关目录

  • 在xiaozhi-esp32-main\managed_components\espressif__esp_codec_dev\device目录下新建jy6311目录,把jy6311.c、jy6311.h、jy6311_user_cfg.h三个文件拷贝到jy6311目录下,如下两图所示:

  • 把jy6311_codec.h头文件拷贝到xiaozhi-esp32-main\managed_components\espressif__esp_codec_dev\device\include目录下,如下图所示:

  • 把jy6311_audio_codec.cc和jy6311_audio_codec.h拷贝到xiaozhi-esp32-main\main\audio_codecs目录下,如下图所示:

5.2 在xiaozhi-esp32-main\managed_components\espressif__esp_codec_dev目录下的Kconfig文件中增加jy6311驱动组件内核编译选项配置,如下图所示:

代码如下:

    config CODEC_JY6311_SUPPORT
        bool "Support JY6311 Codec Chip"
        default y
        help
            Enable this option to support codec JY6311.

5.3 在xiaozhi-esp32-main\managed_components\espressif__esp_codec_dev目录下的CMakeLists.txt文件中增加jy6311驱动组件源码编译选项配置,如下图所示:

代码如下:

if (CONFIG_CODEC_JY6311_SUPPORT)
  list(APPEND COMPONENT_SRCS device/jy6311/jy6311.c)
endif()

5.4 在xiaozhi-esp32-main\managed_components\espressif__esp_codec_dev\include目录下esp_codec_dev_defaults.h文件中增加包含jy6311_codec.h头文件,如下图所示:

代码如下:

#ifdef CONFIG_CODEC_JY6311_SUPPORT
#include "jy6311_codec.h"
#endif

5.5 在xiaozhi-esp32-main\main\boards\xmini-c3目录下config.h文件中增加AUDIO_CODEC_JY6311_ADDR宏定义配置,如下图所示:

代码如下:

#define AUDIO_CODEC_JY6311_ADDR  JY6311_CODEC_DEFAULT_ADDR

5.6 在xiaozhi-esp32-main\main\boards\xmini-c3目录下xmini_c3_board.cc文件中增加包含audio_codecs/jy6311_audio_codec.h头文件和创建Jy6311AudioCodec对象实例的代码,如下两图所示:

代码如下:

#include "audio_codecs/jy6311_audio_codec.h"

static Jy6311AudioCodec audio_codec(
  codec_i2c_bus_, 
  I2C_NUM_0,
  AUDIO_INPUT_SAMPLE_RATE, 
  AUDIO_OUTPUT_SAMPLE_RATE,
  AUDIO_I2S_GPIO_MCLK,
  AUDIO_I2S_GPIO_BCLK,
  AUDIO_I2S_GPIO_WS, 
  AUDIO_I2S_GPIO_DOUT,
  AUDIO_I2S_GPIO_DIN,
  AUDIO_CODEC_PA_PIN, 
  AUDIO_CODEC_JY6311_ADDR);
return &audio_codec;

5.7 在xiaozhi-esp32-main\main目录下的CMakeLists.txt文件中增加jy6311_audio_codec.cc文件的编译选项配置,如下图所示:

代码如下:

"audio_codecs/jy6311_audio_codec.cc"

6 分享

效果改造好一点后满足感油然而生,想着目前这个小智聊天机器人最近比较火,把改造后的成果分享出来和大家一起共享,也欢迎其他技术爱好者提出其他宝贵建议并持续开发优化。

上面基于虾哥Xmini-C3开发环境(V1.7.6版本)移植好JY6311驱动的开发环境也上传到了github上,链接地址如下:

Clover-Luckily/xiaozhi-esp32-jy6311: xiaozhi-esp32 with jy6311

开发环境的搭建使用等请参考虾哥Xmini-C3的开发环境使用即可,github地址上面已经给出;

另附珠海晶益微电子有限公司的官网地址如下,可供下载datasheet、申请样片和驱动支持包等:

晶益微电子 | 低功耗高性能数模混合芯片提供商

7 参数对比

基于这款产品是使用电池的,对功耗比较在乎,特意测量了一下功耗,发现jy6311的功耗完全出乎我的意料,在播放+录音场景下只有2.8mA左右,好奇功耗如此之低该不会是以牺牲性能为代价吧,特意参考两款codec的datasheet简单对比了一下主要性能参数,发现是我想多了,jy6311的性能和功耗都比es8311的要更好,并且jy6311还集成了更多的实用模块,如LDOs、PLL、MICBIAS等。在这个性能层面上能够做到这样的低功耗,在国内也算是首屈一指了,感觉只有TI和ADI的新一代产品才有如此的性能与功耗表现。

以下简单罗列了一下这两款codec的主要性能参数对比,仅供参考:

jy6311与es8311主要性能参数对比
参数 JY6311 ES8311
声道数 单声道 单声道
集成LDOs
ADC分辨率 24位 24位
DAC分辨率 24位 24位
采样率 8-192K 8-96K
ADC信噪比 106dB 100dB
DAC信噪比 110dB 110dB
ADC THD+N -92dB -93dB
DAC THD+N -96dB -80dB
工作电压 1.8-3.3V 1.8-3.3V
功耗(播放+录音) 5mW 14mW
ADC PGA增益范围 0~42dB 0~30dB
MICBIAS输出 1.8-2.5V
PLL精准频率 支持
ADC EQ调节 1段 1段
ADC DRC调节 支持4点 支持2点
DAC EQ调节 3段 1段
DAC DRC调节 支持4点 支持2点

Logo

一站式 AI 云服务平台

更多推荐