跳转至

ai voice*

第一章 概述*

ai voice 简介*

ai voice集成了蓝牙低功耗(BLE)、轻量级图形库(LVGL)、关键词识别(KWS)、音频输入输出以及Opus解码功能。它通过BLE实现设备间的无线通信,利用LVGL提供直观的用户界面,并通过KWS进行实时语音命令识别。音频模块确保高质量的声音采集和播放,而Opus解码则提供高效的音频处理。这些功能的结合,使应用在多种场景下提供出色的语音交互体验。

ai voice主要功能*

  • 支持AI语音交互+驱屏显示
  • 支持打断唤醒与大模型接入
  • 支持最新的蓝牙BLE 5.4连接
  • 支持opus解码播报

第二章 软硬件资源介绍*

1.1 硬件资源介绍*

未命名绘图.drawio

APUS_DEV_QFN52_V0.5开发板资源简介

1.2 软件资源介绍*

  • ai voice目录结构
ai_voice
├── app_system
   └── app_system_clk.c            /* 系统时钟配置 */
├── base
   ├── ai_audio_in_config.c        /* audio in 相关配置 */
   └── ai_audio_in_config.h
├── config
   ├── app_config.h                /* 本App应用的相关配置,包括mic、kws、audio in等配置 */
   ├── app_lv_conf.h               /* 本APP支持LVGL的相关配置文件,需要支持lvgl的再此配置 */
   └── sdk_config.h                /* sdk的相关配置, 包括Consle、Shell、PM、UAC、BLE等一系列配置 */
└── src
    ├── app_ble                    /* ble功能示例 */
    ├── app_lvgl                   /* lvgl显示示例 */
    ├── app_message                /* 串口通讯协议 */
    ├── app_voice                  /* voice事件处理*/
    ├── audio_out                  /* audio out播放功能*/
    ├── gpio_led                   /* led示例 */
    ├── kws                        /* 模型相关配置功能*/
    ├── opus_player                /* 播报的相关功能,支持opus解码播报 */
    └── usb                        /* usb功能 */
├── app.mk
├── main.c                          /* main函数入口 */
├── readme

第三章 开发板快速体验*

本章简介如下。 测试板子的资源,验证硬件功能。更快熟悉8302 功能快速进行sdk的学习和使用。

套件资源

  • 一块8302B dev 开发板
  • 1.32"IPS全视角360x360分辨率/圆形彩色液晶显示屏
  • 1快串口小板
  • 一个喇叭

演示视频:[https://mp.weixin.qq.com/s/HKsvxZA_dhdKWtXMmzk4Jg]

第四章 ai voice 开发指南*

4.1 编译和配置修改*

App和板级选择*

App:ai_voice

board: gx8302b_dev

麦克风选择和配置*

开发板上拥有两个数字麦克风、一个模拟硅麦、一个驻极体模拟麦,可以通过不同的调帽和软件配置进行麦克风测试和验证。

  • 驻级体模拟麦(MIC2)

修改apus/platform/boards/gx8302b_dev/board_config.h进行AMIC的硬件配置。

// AMIC
#define BOARD_HAS_AMIC    1                         /* 1 打开模拟麦克风  */
#define BOARD_AMIC_TYPE   1 //0: MEMS; 1: ECM       /* 0 硅麦 1 驻级体麦 */
#define BOARD_ECM_AMIC_CTRL_PIN    P4_1

修改apus/apps/ai_bypass/config/app_config.h进行AMIC的软件配置。

// 麦克风数目 和 参考声道数目 [根据项目需求来配置]
#define CONFIG_MIC_NUM      (1)
#define CONFIG_REF_NUM      (1)
#define CONFIG_OUT_NUM      (3)
// MIC SOURCE 根据项目需求来配置麦克风源,下面几项只能有一个为 1
#define CONFIG_MIC_SOURCE_AMIC     (1)
#define CONFIG_MIC_SOURCE_DMIC     (0)
#define CONFIG_MIC_SOURCE_IIS      (0)

驻级体麦克风的使用开发板需要如下图进行调帽连接

image-20241112163524886

  • 模拟硅麦(MIC1)

同上修改BOARD_AMIC_TYPE 类型位0

#define BOARD_AMIC_TYPE   0 //0: MEMS; 1: ECM       /* 0 硅麦 1 驻级体麦 */

模拟硅麦的使用开发板需要如下图进行调帽连接

image-20241112163205064

  • 数字麦克风(DMIC)

修改apus/platform/boards/gx8302b_dev/board_config.h进行DMIC的硬件配置。

// DMIC
#define BOARD_HAS_DMIC    1                 /* 1 打开数字麦克风  */
#define PDM_CLK_PIN    P1_0                 /* PDM时钟引脚 */
#define PDM_DATA_PIN   P1_1                 /* PDM数据引脚 */
#define BOARD_DMIC_NUM    2                 /* 数字麦克风数量 */

修改apus/apps/ai_bypass/config/app_config.h进行DMIC的软件配置。

// 麦克风数目 和 参考声道数目 [根据项目需求来配置]
#define CONFIG_MIC_NUM      (2)
#define CONFIG_REF_NUM      (1)
#define CONFIG_OUT_NUM      (4)
// MIC SOURCE 根据项目需求来配置麦克风源,下面几项只能有一个为 1
#define CONFIG_MIC_SOURCE_AMIC     (0)
#define CONFIG_MIC_SOURCE_DMIC     (2)
#define CONFIG_MIC_SOURCE_IIS      (0)

数字麦克风的使用开发板需要如下图进行调帽连接

image-20241112163636654

播报与LOADC输出*

目前ai voice 集成opus解码播报的功能。

修改apus/platform/boards/gx8302b_dev/board_config.h进行LOADC的硬件配置。

//LOADC
#define BOARD_HAS_LODAC 1
#define PWN_P_PIN      P1_2 //PWN_P
#define PWN_N_PIN      P1_3 //PWN_N

// MUTE GPIO
#define BOARD_HAS_LODAC_MUTE 1
#define LODAC_MUTE_PIN           P4_0
#define LODAC_MUTE_ENABLE_LEVEL  (0)

打开apus/apps/ai_bypass/config/app_config.h进行播报的软件配置。

#define CONFIG_OPUS_PLAYER

LOADC的使用开发板需要如下图进行调帽连接和喇叭的连接。

image-20241112170019382

注意: 播报的音频的单独烧录到Flash 3M 的起始地址上的,可以查看文件apus/apps/ai_voice/readme文件。

在liunx烧录播报音频tts.bin

cd apus
sudo ./tools/bootx/bootx -m apus -t u  -c "download 0xF00000 apps/ai_voice/src/opus_player/tts/apus_tts.bin;reboot" 

4.2 KWS开发*

指令词修改*

针对客户有不同的短指令需求,需要能做到自定义配置指令词。目前不支持自定义修改,可以联系国芯微工程师进行评估与提供。

模型切换*

  • 在apus/apps/ai_voice/src/kws预置了三个模型包供客户使用体验。例如切换Alexa的模型包
model_fst
├── bunkws_alexa                        /* Alexa英文模型 */
├── bunkws_cigarettes_v010              /* cigarettes英文模型 */
├── viva_general_asr_deng_069_8_0126    /* 小艾小艾中文模型 */
  • 切换不同的模型修改,需要修改apus/apps/ai_voice/app.mk 和 apus/subsys/vpa/algorithm_package/olab_lion_lib/olab_lion_lib.mk
 语言模型, 含有 BUNKWS 表示是 bunkws 的语言模型,stride 为 40ms,需要同步修改 app_config.h 的 CONFIG_ADUIO_IO_PCM_FRAME_NUM_PER_CONTEXT
# BUILD_MODEL_FST_VIVA_GENERAL_ASR_DENG_069_8_0126 := 1
# BUILD_MODEL_FST_BUNKWS_CIGARETTES_V010 := 1
# BUILD_MODEL_FST_BUNKWS_ALEXA := 1
# 声学模型, 含有 BUNKWS 表示是 bunkws 模型,stride 为 40ms
# BUILD_VUI_KWS_ENGINE_GENERAL_ASR_V011 := 1
BUILD_VUI_KWS_ENGINE_GENERAL_ASR_V012 := 1
# BUILD_VUI_KWS_ENGINE_GENERAL_ASR_V013 := 1
# BUILD_VUI_KWS_ENGIN_BUNKWS_CIGARETTES_V010 := 1
# BUILD_VUI_KWS_ENGIN_BUNKWS_ALEXA_V350 := 1

唤醒效果优化或事件ID定义*

如果需要对某个指令词唤醒效果做优化使其体验效果有提升,或者针对某个指令词事件id 做区分和修改,可以进行相关的修改。

例如apus/apps/ai_voice/src/kws/model_fst/viva_general_asr_deng_069_8_0126/kws_list.h

const VUI_KWS_PARAM g_kws_param_list[] = {
    ...
    {"你好智灯", {110, 63, 59, 26, 189, 64, 31, 49}, 8, 820, 100, 1}, 
    {"小艾小艾", {187, 81, 7, 12, 187, 81, 7, 12}, 8, 857, 100, 1}, 
    {"把灯打开", {28, 5, 31, 49, 31, 5, 107, 9}, 8, 783, 101, 0}, 
    ...
};
例如: {"小艾小艾", {187, 81, 7, 12, 187, 81, 7, 12}, 8, 857, 100, 1}解析
关键词:小艾小艾
关键词label:{187, 81, 7, 12, 187, 81, 7, 12}
关键词label长度:8
灵敏度阈值:857        /* 可以进行降低或者升高来修改灵敏度 */
event id:100        /* 可自定义 */
major:1             /* 唤醒词标志 */

4.3 串口协议开发*

串口协议解析