LuatOS核心库API——【audio 】

audio音频核心库作为数字音频处理系统的基石,承载着从采集、编码到播放的全流程控制。其底层技术机制融合了信号处理、数据压缩与实时调度等多领域知识,理解其工作原理对于开发高性能音频应用至关重要。本文将系统剖析音频核心库的关键技术构成与运行逻辑,帮助开发者建立完整的认知体系。

一、概述

audio 核心库 是指 LuatOS 通过对 es8311 或者 TM8211 编解码器进行配置以及传输,从而实现录音,播放音频,播放 TTS(文字转语音)功能,由于此核心库开发较早,历史包袱导致参数过多,使用非常不方便,建议使用 exaudio 扩展库。

重要概念解释:

1.1 硬件 DAC&ADC

也常称为 codec(编码器) ,decoder(解码器) 音频的编解码芯片,目前仅支持"es8311","TM8211",其中 es8311 支持 模拟音频转数据音频的输入,即为录音,也支持数据音频转为模拟音频的输出,即为播放。

1.2 采样率:

决定 "声音会不会漏了高频细节"(比如没抓住小鸟叫),采样率越高,细节越丰富,但是占用的空间也越大

1.3 位深:

决定 "声音的音量变化会不会生硬"(比如能不能分清小声说话和轻声咳嗽),使用 bit 表示,表示单次采样,模拟量使用数据量保存的位数,位数越高质量越高,占用空间越大

1.4 流式播放

一边传输音频数据,一边进行播放,适合一些对实时性要求较高的场景,或者需要对音频进行编码的场景

1.5 流式录音

一边录音,一边上传数据,适合对录音实时性要求较高或者需要对音频进行编码的场景。

1.6 es8311 和 TM8211 的区别

es8311 支持音频的编码和解码,即支持录音和播放,如果需要打电话,则需要使用 es8311

TM8211 仅支持音频的解码,即支持播放

es8311 相对于 TM8211 需要一路 I2C 作为信令的收发,因此电路上 TM8211 要更为简单.

780EHV 模块内部集成了 es8311,方便大家使用音频相关功能,并使用 GPIO20 控制 es8311 的使能;Air8000 以及 Air780 系列其他型号内部不含 es8311,需要外挂,

1.7 audio、exaudio、codec 三个库文件的区别和联系

audio、codec 是核心库,可以调用的最底层的代码,exaudio 是扩展库

audio 库和 exaudio 库都是实现了录音和播放,但是 exaudio 使用更加简单,去掉了历史原因造成的 audio 的冗余参数

codec 库 是实现了音频数据的编码和解码,不会对音频直接播放,audio 和 exaudio 可以对编解码后的音频进行播放

1.8 audio 核心库使用相关组合关系图

如图所示,audio 核心库大致可以分为如下几种组合关系,用户可根据所需功能自行搭配

二、核心示例

1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

3、由于 audio 核心库使用起来比较复杂,所以目前已经不推荐使用 audio 核心库,而是推荐使用 exaudio 扩展库来开发音频应用

4、此处仅仅简单地列举 audio 核心库中少数 api 的使用方法,供大家学习理解使用

三、常量详解

这些常量用于 audio 库的各种配置和操作,在脚本代码中不需要声明,可直接调用。

3.1 音频格式常量

这些常量用于指定音频数据的格式:

audio .PCM

3.2 音频事件常量

这些常量用于 audio.on() 回调函数中的事件类型

audio .MORE_DATA

audio .DONE

audio .RECORD_DATA

audio .RECORD_DONE

3.3 休眠模式常量

这些常量用于 audio.pm() 函数的休眠模式

audio .RESUME

audio .STANDBY

audio .SHUTDOWN

audio .POWEROFF

四、函数详解

4.1 配置相关

配置相关函数用于音频硬件配置、参数设置和事件注册。

audio .config(id, paPin, onLevel, dacDelay, paDelay, dacPin, dacLevel, dacTimeDelay)

功能

配置音频硬件参数。

参数

id

paPin

onLevel

dacDelay

paDelay

dacPin

dacLevel

dacTimeDelay

返回值

无

示例

audio .setBus(id, bus_type, config_table)

功能

配置音频 DAC(编解码器)

参数

id

bus_type

config_table

返回值

local result = audio.setBus(id, bus_type, config_table)

result

例子

audio .vol(id, value)

功能

设置播放音量

参数

id

value

返回值

local result = audio.vol(id, value)

result

例子

audio .micVol(id, value)

功能

设置 mic 音量

参数

id

value

返回值

local result = audio.micVol(id, value)

result

例子

audio .on(id, callback)

功能

注册音频事件回调函数

参数

id

callback

返回值

无

例子

audio .pm(id,pm_mode)

功能

休眠控制(一般会自动调用 RESUME 模式)

参数

id

pm_mode

返回值

local result = audio.pm(id,pm_mode)

result

例子

4.2 检查相关

检查相关函数用于获取音频状态、错误信息和调试信息。

audio .getError(id)

功能

获取最近一次播放结果

参数

id

返回值

local result = audio.getError(id)

result

user_stop

file_no

例子

audio .isEnd(id)

功能

检查音频通道是否播放结束

参数

id

返回值

local result = audio.isEnd(id)

result

例子

audio .debug(on_off)

功能

配置调试信息输出

参数

on_off

返回值

无

例子

4.3 播放相关

播放相关函数,用于音频播放控制。

audio .play(id, path, errStop)

功能

播放音频文件或者停止播放(可以是文件或 TTS)

注意事项:

1、播放完成后,会回调一个 audio.DONE 消息

2、可以用 pause 来暂停或者恢复

3、audio.play(0) 即为停止播放,可以停止文件或 TTS

参数

id

path

errStop

返回值

local result = audio.play(id, path, errStop)

result

例子

audio .pause(id, pause)

功能

暂停或恢复播放

参数

id

pause

返回值

local result = audio.pause(id, pause)

result

例子

audio .playStop(id)

功能

停止播放音频文件,等同于 audio.play(id)

参数

id

返回值

local result = audio.playStop(id)

result

例子

audio .tts(id, text)

功能

播放或暂停播放 TTS 文本转语音

参数

id

text

返回值

local result = audio.tts(id, text)

result

例子

audio .start(id, audio _format, num_channels, sample_rate, bits_per_sample, is_signed)

功能

启动一个音频通道,仅用于流式播放。

参数

id

audio _format

num_channels

sample_rate

bits_per_sample

is_signed

返回值

local result = audio.start(id, audio_format, num_channels, sample_rate, bits_per_sample, is_signed)

result

示例

audio .write(id, data)

功能

向音频通道中写入音频数据,用于播放

参数

id

data

返回值

local result = audio.write(id, data)

result

示例

audio .finish(id)

功能

写入最后一块数据后,通知多媒体通道已经没有更多数据需要播放了

参数

id

返回值

local result = audio.finish(id)

result

示例

audio .stop(id)

功能

停止指定的多媒体通道

参数

id

返回值

local result = audio.stop(id)

result

示例

audio .record(id, record_type, record_time, amr_quailty, path, nil, buff0, buff1,channelCount)

功能

录音

参数

id

record_type

record_time

amr_quailty

path

reserved

buff0

buff1

返回值

local result = audio.record(id, record_type, record_time, amr_quailty, path, nil, buff0, buff1,channelCount)

result

示例 1: 录制到文件

示例 2: 流式录音

audio .recordStop(id)

功能

停止录音

注意:audio 的回调函数返回 audio.RECORD_DONE 的 event 才是真正的结束

参数

id

返回值

local result = audio.recordStop(id)

result

示例

五、模组支持说明

780EHM,780EHV,780EGH,780EGG,以及 8000 全系列均支持;

780EPM,780EGP,700ECP 不支持。

724,722,720,820,795 也不支持。

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

相关推荐
青瓦梦滋6 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
zhang133830890756 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
揽秀亭长7 小时前
简谱生成的方法与5个工具使用
音视频
知已难寻7 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
糖糖单片机设计7 小时前
基于 STM32 与中移 OneNet 的智慧电梯监控平台系统
stm32·单片机·嵌入式硬件·51单片机·语音识别
wangchunyu1147 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck8 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir8 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人8 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
IpdataCloud8 小时前
批量查IP的API接口怎么选?免费API配额瓶颈与离线库本地批量方案实测
网络·网络协议·tcp/ip