Skip to content

audio 模块

音频模块 已完成的能力: 1、支持mp3/wav解码播放,以及ESP_ADF框架中所有支持的解码器,但因不常用,默认编译并未将其它格式加入 2、支持opus/pcm录制,拥有语音服务/音频播放两套逻辑线,可用于聊天对话和节目播放 3、支持语音唤醒、本地命令词和网络指令(部分功能可用,尚未全部开发完成) 4、支持网络播放MP3,支持MP3的IDv3标签,会自动获取封面图等信息

本模块为轻便的极小实现,相比官方ADF框架大且完整的功能体系,本模块的设计主要考虑的是编译后的代码尺寸、运行速度、内存占用,目标是esp32s3同时拥有更多的模块能力。

static init(config: pointer) -> int

参数类型说明
configpointer
  • 返回: int
C++ 映射 initAudioHal

static set_voice_service_enabled(enabled: bool) -> None

设置音频服务是开启还是状态状态。音频服务和非音频服务模式,其本质区别并不是核心功能上的,而是服务模式上的。 同样是播放和录音,在音频服务模式下发出的事件、运行的逻辑有所差别。比如在音频模式下,录音实际上是一直在背后进行的,也就是麦克风一直在工作,因为需要随时接受唤醒词。 包括VAD检测、本地命令词识别等,全部都需要在音频服务模式下才会运行。 而在非音频服务模式下,只有当开始录音时麦克风才开始工作。 所以,如果想要进行语音识别、唤醒、语音对话,则必须要进入音频服务模式。如果只是简单的播放个声音,或者程序控制的开始和结束录音,则不需要进入音频服务模式。

enabled: 是否进入音频服务模式

参数类型说明
enabledbool
  • 返回: None

static get_voice_service_enabled() -> bool

判断是否已经处于音频服务模式

  • 返回: bool
C++ 映射 getVoiceServiceEnabled

static set_audio_service_net_status(connected: bool) -> None

在音频服务模式下,当前与网络服务器的连接是否有效。由于音频服务无法全部都在本地完成,部分功能是依赖于网络的,因此网络是否正常的连接着决定了一些功能的逻辑差异。 这个网络连接不是指的WiFi功4G是否连接,而是LLPy标准的那个websocket service是否连接上了并且成功的完成了用户登陆。

connected: 网络是否正常连接

参数类型说明
connectedbool
  • 返回: None

static get_audio_service_status() -> int

获取音频服务状态值

return: 返回的值为组合值,所有可能出现的值已经定义在audio_c.h中的AudioServiceStatus枚举里

  • 返回: int
C++ 映射 getAudioServiceStatus

static set_vad_enabled(enabled: bool) -> None

启用音频处理器的VAD检测

参数类型说明
enabledbool
  • 返回: None

static set_volume(volume: int) -> None

设置音频模块音量

volume: 音量,取值范围[0,100]

参数类型说明
volumeint
  • 返回: None

static get_volume() -> int

获取音频模块的音量

return: 返回的为当前音量,取值范围[0,100]

  • 返回: int
C++ 映射 getAudioOutputVolume

static set_recorder_params(format: int, save_path: str) -> None

设置录音的基础参数,本函数必须在start_recorder之前调用,如果录音已经启动了,则只有下一次启动录音时本参数才会起作用

参数类型说明
formatint
save_pathstr
  • 返回: None

static set_recorder_header_reserve(reserve_size: int) -> None

参数类型说明
reserve_sizeint
  • 返回: None

static start_recorder(max_rec_times: int) -> None

启动录音。启动录音有两个可能的目的,1是为了录制音频,得到实时的麦克风数据,2是为了打开麦克风,但是不获取数据,只为语音唤醒和语音指令功能,简称为监听模式

max_rec_times: 最大录音时长,如果为0则表示仅开启监听。非0值才会得到录音数据

参数类型说明
max_rec_timesint
  • 返回: None

static stop_recorder(force_drop_data: bool) -> None

停止录音

参数类型说明
force_drop_databool
  • 返回: None

static is_recording() -> bool

判断是否处于录音状态,注意,voice服务模式下的监听状态不属于录音状态

  • 返回: bool
C++ 映射 isRecording

static set_recorder_power_calc(maxpoints: int) -> None

计算录音强度,每次开始录音之后需要进行设置,不设置是不会计算强度的 maxpoints: 计算之后最大缓存的点数,由于录制时固定为60ms一帧,也就是每帧计算后得到一个数值点。推荐值为8,即缓存480ms内的音频强度数据,可以画出一条480ms时长的强度曲线。该值超过255也将强制设置为255

参数类型说明
maxpointsint
  • 返回: None

static get_recorder_power_results(result: pointer, maxpoints: int) -> int

获取录音强度结果,即最后计算的结果 result: 使用malloc(2, N)来进行分配,因为每一个点数是一个2字节的int16_t型,N是参数2的数值 maxpoints: 最大获取的点数,这个值超过set_recorder_power_calc设置的数量是无效的,超过当前已有点的数量也是无效的,会被自动改小

参数类型说明
resultpointer
maxpointsint
  • 返回: int
C++ 映射 getRecordPowerResults

static register_recorder_callback(callback: pointer, type: int) -> str

注册录音回调函数,本函数可以在录制开始之前也可以在过程中进行 callback: 回调函数,根据2号参数type值的不同,这个回调函数的参数也会不同。如果type=0,则参数列表为(current_time, total_time, audio_status),如果type=1,则参数列表为(data),即录制的音频数据,可以使用len(data)来得到data的长度 type: 要注册的回调函数的类型,可取值为AUDIO_CALLBACK_PROGRESS=0/AUDIO_CALLBACK_FRAME=1

参数类型说明
callbackpointer
typeint
  • 返回: str

static unregister_player_callback(callback_handler: pointer) -> str

取消由register_recorder_callback注册的函数,本函数可以在callback发生时调用

callback_handler: 由register_recorder_callback函数返回的值

参数类型说明
callback_handlerpointer
  • 返回: str

static start_player(url: str) -> None

启动播放器并播放参数url指定的文件,播放器是全局唯一实例,不可以创建多个,且其运行过程是完全异步的,不建议刚调用完start_player就马上调用stop_player

url: 要播放的文件的URL,支持http/https或本地文件路径,以及特殊的ws://opus也就是与本程序约定的服务端的WebSocket数据流

参数类型说明
urlstr
  • 返回: None

static stop_player() -> bool

停止播放器

return: 返回是否成功停止,如果根本不存在播放器或播放器已经停止,返回为false

  • 返回: bool
C++ 映射 stopPlayer

static pause_player() -> bool

暂停播放,之后可以使用resume_player再恢复播放

return: 如果播放器不在播放状态,则返回false

  • 返回: bool
C++ 映射 pausePlayer

static resume_player() -> bool

恢复暂停中的播放

return: 如果播放不是暂停状态,则返回false

  • 返回: bool
C++ 映射 resumePlayer

static is_player_paused() -> bool

判断播放器是否处于暂停状态

return: 如果播放器处于暂停状态,则返回true

  • 返回: bool
C++ 映射 isPlayerPaused

static push_player_stream_data(data: pointer, size: int) -> None

从外部向播放器进行推流

data: 要推流的数据 size: data的长度

参数类型说明
datapointer
sizeint
  • 返回: None

static set_player_config(config_item: int, value: int) -> None

设置播放器的一些不常用配置选项

config_item: 要设置哪个选项,所有可用的值在audio_c.h的AUDIO_CONFIG_ITEM枚举中,但只有PLAYER_CONFIG_LOOP、PLAYER_CONFIG_CACHE_MAX_SIZE、PLAYER_CONFIG_CACHE_RESTART_TIMES这几个值可以被设置 value: 对应项的值,如果是PLAYER_CONFIG_LOOP,则value为0表示最大循环次数,而PLAYER_CONFIG_CACHE_MAX_SIZE、PLAYER_CONFIG_CACHE_RESTART_TIMES的value则表示cache的大小(字节数)

参数类型说明
config_itemint
valueint
  • 返回: None

static get_player_config(config_item: int) -> int

获取播放器的一些不常用配置项的当前值

config_item: 要设置哪个选项,所有可用的值在audio_c.h的AUDIO_CONFIG_ITEM枚举中,但只有PLAYER_CONFIG_LOOP、PLAYER_CONFIG_LOOPTIMES、PLAYER_CONFIG_CACHE_MAX_SIZE、PLAYER_CONFIG_CACHE_RESTART_TIMES这几个值可以被获取。PLAYER_CONFIG_URL要使用get_player_config_str来获取 return: 参数指定的项的当前值

参数类型说明
config_itemint
  • 返回: int
C++ 映射 getPlayerConfig

static get_player_config_str(config_item: int) -> str

获取播放器的一些不常用配置项的当前值(字符串值类型)。本函数和get_player_config非常像,但针对配置项中有字符串值的情况

config_item: 目前仅能为PLAYER_CONFIG_URL return: 配置项的当前值(字符串类型)

参数类型说明
config_itemint
  • 返回: str
C++ 映射 getPlayerConfigStr

static get_player_data(name: str) -> str

获取播放的当前位置(根据已播放字节和文件采样率计算而来)

name: 要获取的数据项目名称,当前仅支持position

return: 如果参数name=position,则返回当前播放位置,是一个数值,单位是毫秒。如果name不正确或当前没有播放器,则返回None

参数类型说明
namestr
  • 返回: str

static get_playfile_length() -> str

获取在播放的文件的字节长度和时间长度,如果是从网络获取的音频文件,则前提是已经解析出了文件,一般收到audio_player_started事件了即为解析完成

return: 返回是一个tuple,结构为(file_size, file_time)

  • 返回: str

static get_playfile_tagdata(name: str) -> str

获取播放文件的ID3标签信息

tag_name: 要获取的ID3标签名,ID3所有可能的标签有:"TIT2" "TPE1" "TALB" "TPE2" "TCON" "TRCK" "TYER" "COMM" "TPOS" "TCOM" "APIC",但一个文件中并非所有的标签都存在,一般来说最常用的是APIC,也就是封面图。请在audio_player_started事件发生之后再调用本函数 return: 返回指针类型,指向ID3标签对应的数据,如果没有ID3或者文件尚未完成解析,则返回None,而解析完了但是对应标签的数据不存在,则返回False

参数类型说明
namestr
  • 返回: str

static get_player_run_status() -> int

获取播放器的运行状态

return: 返回一个int值,表示播放器的运行状态,具体值含义见audio_c.h的PLAYER_STATUS枚举

  • 返回: int
C++ 映射 getPlayerStatus

基于 llpython ESP 平台构建