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

    文章

    14

    浏览量

    7926
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1094

    浏览量

    51236
  • 安信可
    +关注

    关注

    0

    文章

    217

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    ,完整复现一智能语音产品的测试流程。 No01、开箱与硬件初探 很幸运收到送测试的Ai-
    的头像 发表于 11-19 16:09 516次阅读
    <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 272次阅读
    【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测试体验

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

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

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

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

    SDK音频替换失败记录过程

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

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

    系列教程 【二次开发】虚拟开发环境搭建和分享 离线
    的头像 发表于 08-27 16:06 704次阅读
    <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 946次阅读
    轻松配置小智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 852次阅读
    <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 666次阅读
    【<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 771次阅读
    <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>设备

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

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

    语音开放平台的使用——VC系列SDK的获取

    离线语音开放平台提供了开发量接近于零的SDK生成功能,对于功能简单的
    的头像 发表于 04-12 11:24 700次阅读
    <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</b>系列SDK的获取

    离线语音开发板:二次开发语音控制LED灯

    前言 经过前面的学习,相信大家已经了解离线语音开发环境的搭建流程。甚至已经编译过固件,并进行了测试。本文将从产品创建开始讲起,一步一步实现语音控制
    的头像 发表于 03-19 10:53 789次阅读
    <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'>开发</b>板:<b class='flag-5'>二次开发</b><b class='flag-5'>语音</b><b class='flag-5'>控制</b>LED灯

    智能语音识别照明解决方案,平台自定义,中英切换

    智能语音识别照明方案引入NRK3502芯片,支持平台自定义离线控制,中英双语切换。NRK3502具备高性能和灵活自定义能力,
    的头像 发表于 01-10 13:23 821次阅读
    智能<b class='flag-5'>语音</b>识别照明解决方案,平台<b class='flag-5'>自定义</b>,中英切换

    深居浅出AutoCAD二次开发

    深居浅出AutoCAD二次开发,net版
    发表于 01-06 14:12 12次下载