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

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

3天内不再提示

新手速成:掌握TTS/文件播放/录音核心,构建完整音频处理功能

合宙LuatOS 来源:合宙LuatOS 作者:合宙LuatOS 2025-11-21 19:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

刚接触音频开发时,TTS播放、文件播放与录音功能看似复杂,实则是实现完整音频处理的基础。本文从新手视角出发,拆解这三大功能的核心逻辑——资源管理、播放控制与状态反馈,帮你快速掌握核心并整合为完整的音频处理功能,高效完成开发任务。

一、概述

本文档详细介绍了基于 Air8000 开发板或者 Air8000 核心板的音频功能开发,涵盖音频播放、文字转语音、流式音频处理和录音等核心功能。通过本指南,开发者可以快速掌握 Air8000 的音频处理能力,并实现各种音频应用场景。

录音功能将麦克风采集的模拟声音信号转换为数字音频文件,支持 AMR 和 PCM 格式,可设置采样率、时长和存储路径,适用于语音记录、语音识别等场景。

TTS(文字转语音)将文本内容实时转换为语音播放,支持中文普通话和多种发音风格调节,可通过特殊标记控制语速、语调、音量等参数,适用于语音提示、内容播报等应用。

播放音频文件功能用于播放设备中的音频文件,支持 MP3、WAV、AMR 等多种格式,可进行单文件或多文件连续播放,适用于音乐、语音提示等场景。其中流式播放仅支持 PCM 格式。适用于音乐播放、语音提示、告警音效等各种音频应用场景。

二、演示功能概述

1、main.lua:主程序入口文件,加载以下 2-6 文件运行。

2、play_file.lua: 播放音频文件,可支持 wav,amr,mp3 格式音频:

自动播放一个 sample-6s.mp3 音乐

点 powerkey 按键进行音频切换

点击 boot 按键停止音频播放

3、play_stream: 流式播放音频,仅支持 PCM 格式:

创建一个播放流式音频 task(task_audio)

创建一个模拟获取流式音频的 task(audio_get_data)

此 task 通过流式传输不断向 exaudio.play_stream_write 填入播放的音频

播放 task 不断播放传入流式音频

使用 powerkey 按键进行音量减小,点击 boot 按键进行音量增加

4、play_tts: 支持文字转普通话输出,需要固件支持:

播放一个 TTS

点 powerkey 按键进行 tts 的音色切换

支持五种音色:51 – 许久、52 – 许多、53 – 晓萍、54 – 唐老鸭、55 – 许宝宝 - 点击 boot 按键停止音频播放

5、record_file: 录音到文件,仅支持 PCM 格式

主程序录音到/record.amr 文件

使用 powerkey 按键进行录音音量减小

点击 boot 按键进行录音音量增加

6、record_stream: 流式录音,仅支持 PCM。

主程序录音进行流式录音

录音过程中不断的进行 recode_data_callback 回调,回调内容为音频流的地址和长度

7、sample-6s.mp3/10.amr: 用于测试本地 mp3 和 amr 文件播放

8、test.pcm: 用于测试 pcm 流式播放(实际可以云端下载)

三、准备硬件环境

1、Air8000 开发板 + 喇叭或者Air8000 核心板 +AirAudio_1010 音频配件板 + 喇叭

wKgZO2kgOu2AA872AAi8B2I9-r0987.pngwKgZO2kgOsWAPKC7AAwN2zcPKHo254.png

Air8000 核心板和 AirAudio_1010 配件板的硬件接线方式为:

TYPE-C USB 数据线一根

Air8000 开发板/核心板通过 TYPE-C USB 口供电;

TYPE-C USB 数据线直接插到核心板的 TYPE-C USB 座子,另外一端连接电脑 USB 口;

四、准备软件环境

1、Luatools 下载调试工具

2、Air8000 V2016 版本固件,选择支持 TTS 功能的 1、3、5、7、13 或 101、103、105、107、113 号固件。

3、 luatos 需要的脚本和资源文件

4、 lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件;

五、API 接口

exaudio 扩展库

exaudio 扩展库是 audio 核心库的扩展库,通过简化配置参数和统一接口设计,让音频开发更简单易用。它完整支持录音、播放音频,播放 TTS(文字转语音)功能,并内置了流式处理、电源管理等高级特性,建议新项目直接使用 exaudio 替代 audio 核心库。

六、代码解析

1、main.lua:主程序入口;

wKgZO2kgO72AP4gHAAwXHd5dreM580.png

2、play_file.lua: 播放音频文件,可支持 wav,amr,mp3 格式音频

wKgZO2kgO-2APBMLAA0T4J4QF00522.png

3、play_stream: 流式播放音频,仅支持 PCM 格式

wKgZPGkgPBmAQIq1AA5BLOKJ1W0004.png

4、play_tts: 支持文字转普通话输出需要固件支持

wKgZO2kgPEyAIIPvAA4WLe59sKM398.png

5、record_file: 录音到文件,仅支持 PCM 格式

wKgZO2kgPHyAZe9FAApvzRIpVx8590.png

6、record_stream: 流式录音,仅支持 PCM

wKgZO2kgPKeAQlxVAAh0iTIW7js538.png

七、运行结果展示

1、play_file.lua: 播放音频文件,可支持 wav,amr,mp3 格式音频

wKgZO2kgPPCAHHjLAAr0Fl8VfrU219.png

2、play_stream: 流式播放音频,仅支持 PCM 格式

wKgZO2kgPR-AMai9AAaC-ULwQcg106.png

3、play_tts: 支持文字转普通话输出需要固件支持

wKgZPGkgPWyAbNtaAAqrJSYuBsU628.pngwKgZO2kgPYqAAeOqAAPcchOsmuE882.png

4、record_file: 录音到文件,仅支持 PCM 格式

wKgZO2kgPbWAM2LkAAhH8gpxYpg724.png

5、record_stream: 流式录音,仅支持 PCM

wKgZO2kgPdyAXzhqAAbEhEhmtZQ640.png

八、总结

本文演示了如何使用 Air8000 开发板或者 Air8000 核心板 +AirAUDIO_1010 音频配件板,实现完整的音频处理功能,涵盖了音频文件播放、流式播放、TTS 语音合成以及文件录音和流式录音两种录音模式,为开发各类语音应用提供了灵活的硬件基础和软件解决方案。

九、常见问题

1. 音频播放没有声音怎么办?

检查硬件连接是否正确、确认喇叭是否工作正常、检查音频配件板的供电和使能引脚配置是否正确、验证 GPIO 管脚配置是否正确。

2. TTS 播放没有声音怎么办?

确认所使用的固件是否支持 TTS 功能、检查 TTS 播放流程是否正常触发。

3. 录音功能无法工作怎么办?

确认麦克风硬件连接正确且完好、检查录音参数格式设置是否支持、确保存储空间充足。

4. 流式播放或录音过程中中断怎么办?

检查数据缓冲区管理逻辑确保数据持续供给、确认播放与录音的采样率及格式设置一致、优化系统任务调度避免阻塞。


今天的内容就分享到这里了!

审核编辑 黄宇

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

    关注

    0

    文章

    96

    浏览量

    18238
  • TTS
    TTS
    +关注

    关注

    0

    文章

    62

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    10. 100ASK_V853-PRO开发板支持录音播放音频

    ​ 本章主要讲述如何使用板载的MIC拾音咪头录音并使用喇叭播放音频
    的头像 发表于 05-12 10:40 2560次阅读
    10. 100ASK_V853-PRO开发板支持<b class='flag-5'>录音</b>和<b class='flag-5'>播放音频</b>

    鸿蒙开发实战项目:录音变声应用

    没有设置,默认是正常录音的速度,设置完成以后点击开始录音,启动录音功能,点击录音结束后,停止录音
    发表于 03-01 17:24

    【振南ZN-X开发板(51版)】VS1003录音到FlashROM 文件播放[简易Flash录音笔]

    VS1003录音到FlashROM WAV文件播放[简易Flash录音笔]录音是VS1003的另一个大的
    发表于 06-17 14:32

    16k录音+播放的代码

    前言:最近在做毕设的过程中,需要用到录音播放方面的知识。所以,在借鉴了正点原子例程之后,成功修改出了16k录音+播放的代码。在录音之后马上接
    发表于 08-12 06:46

    基于HarmonyOS Player,实现音频播放、管理控制和采集

    只对核心代码进行讲解,对于完整代码,我们在9 参考章节提供下载方式。接下来我们会讲解整个工程的代码结构,如下图:api:音频播放器及媒体接口文件
    发表于 09-16 15:07

    【1024平头哥开发套件开发体验】CB5654 开发实现用TTS播放文件内容!

    前段时间实现一个播放SD的里的音乐的功能!今天试着实现读取SD卡里的文件,并用TTS播放文件内容
    发表于 01-13 18:38

    CB5654开发应用TTS

    前段时间实现一个播放SD的里的音乐的功能!今天试着实现读取SD卡里的文件,并用TTS播放文件
    发表于 03-08 06:37

    如何通过OpenHarmony的音频模块实现录音变速功能

    景、全连接、全智能时代的智能物联网操作系统。多媒体子系统是OpenHarmony系统中的核心子系统,为系统提供了相机、音频和视频等多媒体功能。多媒体子系统的音频模块、
    发表于 08-25 11:45

    HarmonyOS音频开发指导:使用OpenSL ES开发音频播放功能

    携带录音数据的buffer。size:表示buffer的大小。 完整示例 参考以下示例代码,播放一个音频文件。 添加头文件。 #includ
    发表于 10-24 17:17

    MD播放录音功能

    MD播放录音功能              录音
    发表于 12-22 09:59 2005次阅读

    微雪电子Arduino 音频播放扩展板简介

    Arduino音频播放模块 VS1053音频解码 带录音功能 支持常用音频文件格式 多
    的头像 发表于 12-19 15:56 2880次阅读
    微雪电子Arduino <b class='flag-5'>音频</b><b class='flag-5'>播放</b>扩展板简介

    基于ESP32构建音频播放

    在这里,我们将使用LM386 和一个带有 ESP32 的扬声器来播放音乐文件音频输出可能不大,但此应用程序显示了 ESP32 板播放音频文件的能力。
    发表于 08-08 15:37 2.6w次阅读
    基于ESP32<b class='flag-5'>构建</b>的<b class='flag-5'>音频</b><b class='flag-5'>播放</b>器

    你要的录音&amp;播放录音功能,直接用!Air201资产定位模组LuatOS快速入门

    音频解码芯片(Audio Codec)及MIC麦克,可支持本地的录音功能;使用配套喇叭即可将录音保存的数据进行播放,操作极为方便。 本期,我
    的头像 发表于 09-27 07:06 935次阅读
    你要的<b class='flag-5'>录音</b>&amp;<b class='flag-5'>播放</b><b class='flag-5'>录音</b><b class='flag-5'>功能</b>,直接用!Air201资产定位模组LuatOS快速入门

    4路TTS语音播报控制器:联动控制,音频定时播放

    wav格式文件,可播放音乐或录音文件。 通常集成有RS485通讯接口,遵循Modbus通信协议,支持设备地址0 - 254更改,支持固定波特率通信,方便与其他设备进行连接和数据传输。
    的头像 发表于 10-31 15:44 314次阅读

    速通音频处理掌握TTS播放文件播放录音核心,实现完整功能

    播放TTS播放音频文件录音构建完整音频
    的头像 发表于 11-21 19:27 79次阅读
    速通<b class='flag-5'>音频</b><b class='flag-5'>处理</b>:<b class='flag-5'>掌握</b><b class='flag-5'>TTS</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>