0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【离线语音】安信可VC-01/02二次开发篇:自定义音频播放控制

AIoT行业洞察 来源:AIoT行业洞察 作者:AIoT行业洞察 2025-09-25 16:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


安信可离线语音VC-01/02:硬件规格书、开发资料、烧录工具、应用开发

安信可离线语音模组 VC-01、VC-02 系列教程 【基础认知篇】
安信可离线语音模组 VC-01、VC-02 系列教程 【快速上手篇】
安信可离线语音模组 VC-01、VC-02 系列教程 【中级入门篇】
安信可离线语音模组 VC-01、VC-02 系列教程 【高级进阶篇】
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】虚拟开发环境搭建和分享
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】事件和GPIO控制
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】PWM输出
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】串口输出
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】SDK音频替换失败记录过程
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】自定义音频播放控制

安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】自定义音频播放控制

简介


在本篇文章中将介绍如何使用SDK来进行自定义音频播放的功能。

在上一篇文章安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】自定义音频替换失败过程中,简要概述了res_build_tool.py 文件, 其主要的作用就是将音频文件进行转换,从而使编译固件的时候能够将音频文件编译到BIN中,然后在各项事件触发的时候实现播放。

虽然在上一篇文章中我们失败的尝试了替换对应的语音文件,但是还有另一种方法来实现音频数据的播放。 即使用user_player.h进行控制。

自定义音频播放


1、根据蜂鸟M的离线开发指导手册得知,其user_player.h文件可以被用户使用并且控制音频的播放。

其文件位于/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/inc/user_player.h

#ifndef USER_INC_USER_PLAYER_H_
#define USER_INC_USER_PLAYER_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "unione.h"
#include "user_event.h"
/** @addtogroup uni_player_inf
@{*/
/**
*@brief 播放文件
*@param type 播放类型
*@param file 播放文件名
*@retval 0  操作成功
*@retval -1 操作失败
*/
int user_player_play(AUDIO_PLAY_TYPE type, const char *file);
/**
*@brief 播放列表序号音频
*@param file_list 文件列表 [1, 2, 3]
*@param num 列表序号
*@retval 0  操作成功
*@retval -1 操作失败
*/
int user_player_reply_list_num(const char *file_list, int num);
/**
*@brief 随机播放列表音频
*@param file_list 文件列表 [1, 2, 3]
*@retval 0  操作成功
*@retval -1 操作失败
*/
int user_player_reply_list_random(const char *file_list);
/**
*@brief 顺序播放列表中所有音频
*@param file_list 文件列表 [1, 2, 3]
*@retval 0  操作成功
*@retval -1 操作失败
*/
int user_player_reply_list_in_order(const char *file_list);
/**
*@brief 停止播放
*@param type 播放类型
*@retval 0  操作成功
*@retval -1 操作失败
*/
int user_player_stop(AUDIO_PLAY_TYPE type);
/**
*@brief 设置最小音量
*/
int user_player_set_volume_min(void);
/**
*@brief 设置最大音量
*/
int user_player_set_volume_max(void);
/**
*@brief 设置中等音量
*/
int user_player_set_volume_mid(void);
/**
*@brief 增加音量
*/
int user_player_set_volume_up(void);
/**
*@brief 减小音量
*/
int user_player_set_volume_down(void);
/**
*@brief 设置喇叭静音
*/
int user_player_speaker_mute(void);
/**
*@brief 取消设置喇叭静音
*/
int user_player_speaker_unmute(void);
/**
*@brief 系统进入无回复播报模式
*/
int user_player_shutup_mode(void);
/**
*@brief 系统退出无回复播报模式
*/
int user_player_shutup_exit(void);
/** @}*/
#ifdef __cplusplus
}
#endif
#endif

上述为所有用户音频播放函数定义。功能相当丰富,包括了音频的播放和音量的调节,而正好对应的example中也有音频播放的示例。


2、修改

/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/inc/user_config.h 中对USER_RUN_DEMO_SELECT 的宏, 指向USER_DEMO_PLAYER

wKgZPGjU_oyAX64AAAElHzsvhBY586.jpg



3、查找这个宏,检查SDK是否支持。

wKgZO2jU_oyACOZHAADzCJBHJKg312.jpg


可以从上述user_main 的入口宏判断得知, USER_DEMO_I2C_TIMEUSER_DEMO_SPI_LCD 是不被支持的,而hb_player则没问题。

4、使用TTS maker生成一段音频数据。并且命名为109放到tones目录下。

wKgZPGjU_o2AZv2vAACntXsbOfg589.jpg


5、修改原本代码中播放的 9.MP3 ,拷贝到tones目录下的109。

#include "user_player.h"
#define TAG "player_demo"
static void _player_test_process(void *args) {
  while (1) {
    uni_sleep(10);
    user_player_set_volume_min();
    LOGT(TAG, "set min vol");
    /*播放9.mp3文件*/
    user_player_play(AUDIO_PLAY_REPLY, "109"); //9.mp3
    uni_sleep(10);
    user_player_set_volume_mid();
    LOGT(TAG, "set mid vol");
    /*播放列表中的101.MP3文件*/
    user_player_reply_list_num("[9,101,102]", 1);
    uni_sleep(10);
    user_player_set_volume_max();
    LOGT(TAG, "set max vol");
    /*随机播放列表中的某个文件*/
    user_player_reply_list_random("[9,101,102]");
    uni_sleep(10);
    /*顺序播放列表中的所有文件*/
    user_player_reply_list_in_order("[9,101,102]");
    uni_sleep(10);
  }
}
static Result _create_player_test_thread(void) {
  thread_param param;
  uni_pthread_t pid;
  uni_memset(¶m, 0, sizeof(param));
  param.stack_size = STACK_SMALL_SIZE;
  param.priority = OS_PRIORITY_LOW;
  uni_strncpy(param.task_name, "player_test", sizeof(param.task_name) - 1);
  if (0 != uni_pthread_create(&pid, ¶m,
                              _player_test_process, NULL)) {
    LOGE(TAG, "create thread failed");
    return E_FAILED;
  }
  uni_pthread_detach(pid);
  return E_OK;
}
int hb_player(void) {
  _create_player_test_thread();
  return 0;
}

这段代码创建了一个独立线程,在线程中循环执行音频播放测试。它先依次设置播放器的音量为最小、中等和最大,然后分别调用接口播放单个指定文件、播放列表中的特定文件、随机播放播放列表中的文件,以及顺序播放整个播放列表。

每次操作后线程都会短暂休眠,保证播放流程有序进行。该代码用于验证播放器在不同音量和播放模式下的功能是否正常。

6、烧录和测试

wKgZPGjU_o2Afj3TAAC7bOVRNiw544.jpg

实验现象


系统上电后等待初始化后 “你好我是小美”将优先被播放, 之后进行音量调整并且循环往复。 这里会存在一个问题即,SDK中所有的音频的采样率都是16000Hz。

这个采样率已经在
/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/src/sdk/player/src/uni_media_player.c中进行了定义。

wKgZO2jU_o6ATDdZAADVel7F8rI115.jpg


和/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/src/sdk/audio/audio_player/src/uni_audio_player.c 中被定义。

chaijie_default.png


所以自定义的音频文件最好和这个定义的采样率保持一致,否则会出现采样率不匹配出现奇怪的声音。

wKgZPGjU_o-AZsDBAAE_U-1Hibw017.jpg


如上图所示,创建的音频文件的采样率为24000, 所以下载到VC-02中, 音频播放的时候会很奇怪(属于正常现象)。

附件

uni_app_release_update.zip

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 音频播放
    +关注

    关注

    0

    文章

    16

    浏览量

    7978
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1111

    浏览量

    52019
  • 安信可
    +关注

    关注

    0

    文章

    238

    浏览量

    5159
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    简单认识VC系列离线语音识别模组

    VC系列是基于云知声US516P6芯片推出的离线语音识别模组,支持中英文双语、150条指令
    的头像 发表于 04-14 17:02 915次阅读

    宇树人形机器人的配置,核心代码,调试方法,二次开发接口

    宇树人形机器人的配置,核心代码,调试方法,二次开发接口
    的头像 发表于 12-10 09:05 5598次阅读

    小智AI语音模组实测:实现语音控制关灯

    ,完整复现一智能语音产品的测试流程。 No01、开箱与硬件初探 很幸运收到送测试的Ai-
    的头像 发表于 11-19 16:09 1354次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>小智AI<b class='flag-5'>语音</b>模组实测:实现<b class='flag-5'>语音</b><b class='flag-5'>控制</b>关灯

    【AI语音模组】自制小智管家?Ai-WV01-32S测试体验

    项目。 这次带来一款新作品: 基于 Ai-WV01-32S 模组打造的小智语音硬件。 测试总结 项目 表现 模组集成度 ⭐⭐⭐⭐⭐ 焊
    的头像 发表于 11-19 16:06 872次阅读
    【AI<b class='flag-5'>语音</b>模组】自制小智管家?<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>Ai-WV<b class='flag-5'>01</b>-32S测试体验

    零代码实现茶吧机自定义语音控制定制

    零代码实现茶吧机自定义语音控制定制 前言 茶吧机集成离线语音控制,核心是通过自然
    的头像 发表于 10-17 16:43 1434次阅读
    零代码实现茶吧机<b class='flag-5'>自定义</b><b class='flag-5'>语音</b><b class='flag-5'>控制</b>定制

    直播回顾 | 掌握车载通信核心技术,虹科CAN总线实战:PCAN二次开发技术直播助您轻松拿捏总线开发“创新引擎

    •1CAN总线二次开发:构建智能汽车“神经网络”的核心能力在“软件定义汽车”的时代,整车电子电气架构正从分布走向集中,车载网络的数据量和复杂度呈指数级增长。基于PCAN等专业工具的二次开发能力
    的头像 发表于 10-09 17:33 768次阅读
    直播回顾 | 掌握车载通信核心技术,虹科CAN总线实战:PCAN<b class='flag-5'>二次开发</b>技术直播助您轻松拿捏总线<b class='flag-5'>开发</b>“创新引擎

    如何使用SDK进行自定义音频播放功能

    在上一文章离线语音模组 VC-01
    的头像 发表于 09-25 15:52 4354次阅读
    如何使用SDK进行<b class='flag-5'>自定义</b><b class='flag-5'>音频</b><b class='flag-5'>播放</b>功能

    SDK音频替换失败记录过程

    离线语音模组 VC-01VC-02 系列教
    的头像 发表于 09-25 15:50 2129次阅读
    SDK<b class='flag-5'>音频</b>替换失败记录过程

    VC-01/02二次开发: PWM输出

    系列教程 【二次开发】虚拟开发环境搭建和分享 离线
    的头像 发表于 08-27 16:06 1154次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>VC-01</b>/<b class='flag-5'>02</b><b class='flag-5'>二次开发</b><b class='flag-5'>篇</b>: PWM输出

    轻松配置小智AI语音开发板,IOT小程序功能更新

    版使用教程: AI语音开发板全面升级商用版!(附教程) 为了让开发体验更加流畅,
    的头像 发表于 08-19 17:46 1550次阅读
    轻松配置小智AI<b class='flag-5'>语音</b><b class='flag-5'>开发</b>板,<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>IOT小程序功能更新

    VC-01/02二次开发: 事件和GPIO控制

    系列教程 【二次开发】虚拟开发环境搭建和分享 离线
    的头像 发表于 08-19 14:02 1371次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>VC-01</b>/<b class='flag-5'>02</b><b class='flag-5'>二次开发</b><b class='flag-5'>篇</b>: 事件和GPIO<b class='flag-5'>控制</b>

    离线语音VC-01/02教程:中级入门

    系列教程 【二次开发】虚拟开发环境搭建和分享 离线
    的头像 发表于 07-31 09:33 991次阅读
    【<b class='flag-5'>离线</b><b class='flag-5'>语音</b>】<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>VC-01</b>/<b class='flag-5'>02</b>教程:中级入门<b class='flag-5'>篇</b>

    AI语音开发板AiPi-PalChatV1 + MCP,通过HomeAssistant自动化控制设备

    以下作品由社区用户 WT_0213制作 自从拥有了AiPi-PalChatV1 Ai
    的头像 发表于 06-25 14:04 1105次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>AI<b class='flag-5'>语音</b><b class='flag-5'>开发</b>板AiPi-PalChatV1 + MCP,通过HomeAssistant自动化<b class='flag-5'>控制</b>设备

    HarmonyOS应用自定义键盘解决方案

    自定义键盘是一种替换系统默认键盘的解决方案,实现键盘个性化交互。允许用户结合业务需求与操作习惯,对按键布局进行可视化重构、设置多功能组合键位,使输入更加便捷和舒适。在安全防护层面,自定义键盘可以
    的头像 发表于 06-05 14:19 2619次阅读

    云MES系统源码,支持 SaaS 多租户,支持二次开发

    万界星空科技MES生产制造执行系统源码,有演示,多个项目应用案例,成熟稳定。支持二次开发,商业授权后商用。
    的头像 发表于 05-07 11:14 938次阅读
    云MES系统源码,支持 SaaS 多租户,支持<b class='flag-5'>二次开发</b>