Audio
Component registry: espressif/brookesia_service_audio
Helper header:
#include "brookesia/service_helper/audio.hpp"Helper class:
esp_brookesia::service::helper::Audio
Overview
brookesia_service_audio provides:
Playback: Stream from URL; pause, resume, stop.
Codecs: PCM, OPUS, G711A encode/decode.
Volume: Set and query volume.
Playback state: Idle / playing / paused with events.
Encoder: Start/stop/configure; configurable read size.
Decoder: Start/stop and feed compressed data; streaming decode.
Persistence: Optional brookesia_service_nvs for volume and related settings.
Features
Codec Formats
The audio service supports the following codec formats:
Format |
Encode |
Decode |
Notes |
|---|---|---|---|
PCM |
Yes |
Yes |
Lossless |
OPUS |
Yes |
Yes |
VBR and fixed bitrate |
G711A |
Yes |
Yes |
Telephony quality |
Playback
URL playback.
Pause, resume, stop.
State events for UI sync.
Encoder Configuration
Codecs: PCM, OPUS, G711A.
Channels: 1–4.
Bits per sample: 8, 16, 24, 32.
Sample rates: 8000, 16000, 24000, 32000, 44100, 48000 Hz.
Frame duration (ms).
OPUS: VBR and bitrate.
Decoder Configuration
Codecs: PCM, OPUS, G711A.
Channels: 1–4.
Bits per sample: 8, 16, 24, 32.
Sample rates: 8000, 16000, 24000, 32000, 44100, 48000 Hz.
Frame duration (ms).
Events
Playback state changes (Idle, Playing, Paused).
Encoder events.
Encoded data ready.
Standard Include / Helper Class
Standard include:
#include \"brookesia/service_helper/audio.hpp\"Helper class:
esp_brookesia::service::helper::Audio
Service Interfaces
Functions
SetPlaybackConfig
Description
Set playback config. Call before starting the service.
Execution
Requires scheduler: Not required
Parameters
ConfigType:
ObjectRequired: required
Description: Playback config. Example: {“player_task”:{“name”:”Thread”,”core_id”:0,”priority”:5,”stack_size”:4096,”stack_in_ext”:true},”mixer_gain”:{“initial_gain”:6.000000238418579E-1,”target_gain”:1E0,”transition_time”:1500}}
Schema JSON
Show raw JSON
{
"name": "SetPlaybackConfig",
"description": "Set playback config. Call before starting the service.",
"require_scheduler": false,
"parameters": [
{
"name": "Config",
"description": "Playback config. Example: {\"player_task\":{\"name\":\"Thread\",\"core_id\":0,\"priority\":5,\"stack_size\":4096,\"stack_in_ext\":true},\"mixer_gain\":{\"initial_gain\":6.000000238418579E-1,\"target_gain\":1E0,\"transition_time\":1500}}",
"type": "Object",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call Audio SetPlaybackConfig {"Config":null}
SetEncoderStaticConfig
Description
Set encoder static config. Call before starting the service.
Execution
Requires scheduler: Not required
Parameters
ConfigType:
ObjectRequired: required
Description: Encoder static config. Example: {“recorder_task”:{“name”:”Thread”,”core_id”:0,”priority”:10,”stack_size”:4096,”stack_in_ext”:true},”fetcher_task”:{“name”:”EncoderFetcher”,”core_id”:1,”priority”:12,”stack_size”:6144,”stack_in_ext”:true}}
Schema JSON
Show raw JSON
{
"name": "SetEncoderStaticConfig",
"description": "Set encoder static config. Call before starting the service.",
"require_scheduler": false,
"parameters": [
{
"name": "Config",
"description": "Encoder static config. Example: {\"recorder_task\":{\"name\":\"Thread\",\"core_id\":0,\"priority\":10,\"stack_size\":4096,\"stack_in_ext\":true},\"fetcher_task\":{\"name\":\"EncoderFetcher\",\"core_id\":1,\"priority\":12,\"stack_size\":6144,\"stack_in_ext\":true}}",
"type": "Object",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call Audio SetEncoderStaticConfig {"Config":null}
SetDecoderStaticConfig
Description
Set decoder static config. Call before starting the service.
Execution
Requires scheduler: Not required
Parameters
ConfigType:
ObjectRequired: required
Description: Decoder static config. Example: {“feeder_task”:{“name”:”Thread”,”core_id”:1,”priority”:5,”stack_size”:4096,”stack_in_ext”:true},”mixer_gain”:{“initial_gain”:8.999999761581421E-1,”target_gain”:1E0,”transition_time”:1500}}
Schema JSON
Show raw JSON
{
"name": "SetDecoderStaticConfig",
"description": "Set decoder static config. Call before starting the service.",
"require_scheduler": false,
"parameters": [
{
"name": "Config",
"description": "Decoder static config. Example: {\"feeder_task\":{\"name\":\"Thread\",\"core_id\":1,\"priority\":5,\"stack_size\":4096,\"stack_in_ext\":true},\"mixer_gain\":{\"initial_gain\":8.999999761581421E-1,\"target_gain\":1E0,\"transition_time\":1500}}",
"type": "Object",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call Audio SetDecoderStaticConfig {"Config":null}
SetAFE_Config
Description
Set AFE config. Call before starting the service.
Execution
Requires scheduler: Not required
Parameters
ConfigType:
ObjectRequired: required
Description: AFE config. Example: {“feeder_task”:{“name”:”Thread”,”core_id”:1,”priority”:5,”stack_size”:40960,”stack_in_ext”:true},”fetcher_task”:{“name”:”Thread”,”core_id”:0,”priority”:5,”stack_size”:6144,”stack_in_ext”:true},”vad”:null,”wakenet”:null}
Schema JSON
Show raw JSON
{
"name": "SetAFE_Config",
"description": "Set AFE config. Call before starting the service.",
"require_scheduler": false,
"parameters": [
{
"name": "Config",
"description": "AFE config. Example: {\"feeder_task\":{\"name\":\"Thread\",\"core_id\":1,\"priority\":5,\"stack_size\":40960,\"stack_in_ext\":true},\"fetcher_task\":{\"name\":\"Thread\",\"core_id\":0,\"priority\":5,\"stack_size\":6144,\"stack_in_ext\":true},\"vad\":null,\"wakenet\":null}",
"type": "Object",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call Audio SetAFE_Config {"Config":null}
GetAFE_WakeWords
Description
Get AFE wake words. Return type: JSON array<string>. Example: [“ni hao xiao zhi”,”hello brookesia”]
Execution
Requires scheduler: Not required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "GetAFE_WakeWords",
"description": "Get AFE wake words. Return type: JSON array<string>. Example: [\"ni hao xiao zhi\",\"hello brookesia\"]",
"require_scheduler": false,
"parameters": []
}
CLI Command
svc_call Audio GetAFE_WakeWords
PauseAFE_WakeupEnd
Description
Pause AFE wakeup-end task.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "PauseAFE_WakeupEnd",
"description": "Pause AFE wakeup-end task.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call Audio PauseAFE_WakeupEnd
ResumeAFE_WakeupEnd
Description
Resume AFE wakeup-end task.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "ResumeAFE_WakeupEnd",
"description": "Resume AFE wakeup-end task.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call Audio ResumeAFE_WakeupEnd
PlayUrl
Description
Play audio from a URL. Supports loop and interrupt playback.
Execution
Requires scheduler: Required
Parameters
UrlType:
StringRequired: required
Description: Audio URL, for example: “file://spiffs/example.mp3”.
ConfigType:
ObjectRequired: optional
Default:
{"interrupt":true,"delay_ms":0,"loop_count":0,"loop_interval_ms":0,"timeout_ms":0}Description: Playback config. Example: {“interrupt”:true,”delay_ms”:0,”loop_count”:0,”loop_interval_ms”:0,”timeout_ms”:0}
Schema JSON
Show raw JSON
{
"name": "PlayUrl",
"description": "Play audio from a URL. Supports loop and interrupt playback.",
"require_scheduler": true,
"parameters": [
{
"name": "Url",
"description": "Audio URL, for example: \"file://spiffs/example.mp3\".",
"type": "String",
"required": true,
"default_value": null
},
{
"name": "Config",
"description": "Playback config. Example: {\"interrupt\":true,\"delay_ms\":0,\"loop_count\":0,\"loop_interval_ms\":0,\"timeout_ms\":0}",
"type": "Object",
"required": false,
"default_value": {
"interrupt": true,
"delay_ms": 0,
"loop_count": 0,
"loop_interval_ms": 0,
"timeout_ms": 0
}
}
]
}
CLI Command
svc_call Audio PlayUrl {"Url":null,"Config":null}
PlayUrls
Description
Play audio from multiple URLs. Supports loop and interrupt playback.
Execution
Requires scheduler: Required
Parameters
UrlsType:
ArrayRequired: required
Description: Audio URL list. Example: [”file://spiffs/example1.mp3”,”file://spiffs/example2.mp3”]
ConfigType:
ObjectRequired: optional
Default:
{"interrupt":true,"delay_ms":0,"loop_count":0,"loop_interval_ms":0,"timeout_ms":0}Description: Playback config. Example: {“interrupt”:true,”delay_ms”:0,”loop_count”:0,”loop_interval_ms”:0,”timeout_ms”:0}
Schema JSON
Show raw JSON
{
"name": "PlayUrls",
"description": "Play audio from multiple URLs. Supports loop and interrupt playback.",
"require_scheduler": true,
"parameters": [
{
"name": "Urls",
"description": "Audio URL list. Example: [\"file://spiffs/example1.mp3\",\"file://spiffs/example2.mp3\"]",
"type": "Array",
"required": true,
"default_value": null
},
{
"name": "Config",
"description": "Playback config. Example: {\"interrupt\":true,\"delay_ms\":0,\"loop_count\":0,\"loop_interval_ms\":0,\"timeout_ms\":0}",
"type": "Object",
"required": false,
"default_value": {
"interrupt": true,
"delay_ms": 0,
"loop_count": 0,
"loop_interval_ms": 0,
"timeout_ms": 0
}
}
]
}
CLI Command
svc_call Audio PlayUrls {"Urls":null,"Config":null}
PlayControl
Description
Control audio playback.
Execution
Requires scheduler: Required
Parameters
ActionType:
StringRequired: required
Description: Playback action. Allowed values: [Pause, Resume, Stop]
Schema JSON
Show raw JSON
{
"name": "PlayControl",
"description": "Control audio playback.",
"require_scheduler": true,
"parameters": [
{
"name": "Action",
"description": "Playback action. Allowed values: [Pause, Resume, Stop]",
"type": "String",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call Audio PlayControl {"Action":null}
SetVolume
Description
Set playback volume.
Execution
Requires scheduler: Required
Parameters
VolumeType:
NumberRequired: required
Description: Volume in range [0, 100].
Schema JSON
Show raw JSON
{
"name": "SetVolume",
"description": "Set playback volume.",
"require_scheduler": true,
"parameters": [
{
"name": "Volume",
"description": "Volume in range [0, 100].",
"type": "Number",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call Audio SetVolume {"Volume":null}
GetVolume
Description
Get playback volume. Return type: number. Example: 70
Execution
Requires scheduler: Not required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "GetVolume",
"description": "Get playback volume. Return type: number. Example: 70",
"require_scheduler": false,
"parameters": []
}
CLI Command
svc_call Audio GetVolume
SetMute
Description
Set playback mute.
Execution
Requires scheduler: Required
Parameters
EnableType:
BooleanRequired: required
Description: Enable mute.
Schema JSON
Show raw JSON
{
"name": "SetMute",
"description": "Set playback mute.",
"require_scheduler": true,
"parameters": [
{
"name": "Enable",
"description": "Enable mute.",
"type": "Boolean",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call Audio SetMute {"Enable":null}
StartEncoder
Description
Start audio encoder.
Execution
Requires scheduler: Required
Parameters
ConfigType:
ObjectRequired: required
Description: Audio encoder config. Example: {“type”:”PCM”,”general”:{“channels”:0,”sample_bits”:0,”sample_rate”:0,”frame_duration”:0},”extra”:null,”fetch_interval_ms”:10,”fetch_data_size”:4096}
Schema JSON
Show raw JSON
{
"name": "StartEncoder",
"description": "Start audio encoder.",
"require_scheduler": true,
"parameters": [
{
"name": "Config",
"description": "Audio encoder config. Example: {\"type\":\"PCM\",\"general\":{\"channels\":0,\"sample_bits\":0,\"sample_rate\":0,\"frame_duration\":0},\"extra\":null,\"fetch_interval_ms\":10,\"fetch_data_size\":4096}",
"type": "Object",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call Audio StartEncoder {"Config":null}
StopEncoder
Description
Stop audio encoder.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "StopEncoder",
"description": "Stop audio encoder.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call Audio StopEncoder
PauseEncoder
Description
Pause audio encoder.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "PauseEncoder",
"description": "Pause audio encoder.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call Audio PauseEncoder
ResumeEncoder
Description
Resume audio encoder.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "ResumeEncoder",
"description": "Resume audio encoder.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call Audio ResumeEncoder
StartDecoder
Description
Start audio decoder.
Execution
Requires scheduler: Required
Parameters
ConfigType:
ObjectRequired: required
Description: Audio decoder config. Example: {“type”:”PCM”,”general”:{“channels”:0,”sample_bits”:0,”sample_rate”:0,”frame_duration”:0}}
Schema JSON
Show raw JSON
{
"name": "StartDecoder",
"description": "Start audio decoder.",
"require_scheduler": true,
"parameters": [
{
"name": "Config",
"description": "Audio decoder config. Example: {\"type\":\"PCM\",\"general\":{\"channels\":0,\"sample_bits\":0,\"sample_rate\":0,\"frame_duration\":0}}",
"type": "Object",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call Audio StartDecoder {"Config":null}
StopDecoder
Description
Stop audio decoder.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "StopDecoder",
"description": "Stop audio decoder.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call Audio StopDecoder
FeedDecoderData
Description
Feed audio data to the decoder.
Execution
Requires scheduler: Not required
Parameters
DataType:
RawBufferRequired: required
Description: Audio data to decode.
Schema JSON
Show raw JSON
{
"name": "FeedDecoderData",
"description": "Feed audio data to the decoder.",
"require_scheduler": false,
"parameters": [
{
"name": "Data",
"description": "Audio data to decode.",
"type": "RawBuffer",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call Audio FeedDecoderData {"Data":null}
ResetData
Description
Reset audio data. Includes player volume.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "ResetData",
"description": "Reset audio data. Includes player volume.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call Audio ResetData
Events
PlayStateChanged
Description
Emitted when playback state changes.
Execution
Requires scheduler: Required
Items
StateType:
StringDescription: Playback state. Allowed values: [Idle, Playing, Paused]
Schema JSON
Show raw JSON
{
"name": "PlayStateChanged",
"description": "Emitted when playback state changes.",
"require_scheduler": true,
"items": [
{
"name": "State",
"description": "Playback state. Allowed values: [Idle, Playing, Paused]",
"type": "String"
}
]
}
CLI Command
svc_subscribe Audio PlayStateChanged
AFE_EventHappened
Description
Emitted when an AFE event occurs.
Execution
Requires scheduler: Required
Items
EventType:
StringDescription: AFE event. Allowed values: [VAD_Start, VAD_End, WakeStart, WakeEnd]
Schema JSON
Show raw JSON
{
"name": "AFE_EventHappened",
"description": "Emitted when an AFE event occurs.",
"require_scheduler": true,
"items": [
{
"name": "Event",
"description": "AFE event. Allowed values: [VAD_Start, VAD_End, WakeStart, WakeEnd]",
"type": "String"
}
]
}
CLI Command
svc_subscribe Audio AFE_EventHappened
EncoderDataReady
Description
Emitted when encoder data is ready.
Execution
Requires scheduler: Not required
Items
DataType:
RawBufferDescription: Encoded audio data.
Schema JSON
Show raw JSON
{
"name": "EncoderDataReady",
"description": "Emitted when encoder data is ready.",
"require_scheduler": false,
"items": [
{
"name": "Data",
"description": "Encoded audio data.",
"type": "RawBuffer"
}
]
}
CLI Command
svc_subscribe Audio EncoderDataReady
RecorderDataReady
Description
Emitted when recorder data is ready.
Execution
Requires scheduler: Not required
Items
DataType:
RawBufferDescription: Recorded raw audio data.
Schema JSON
Show raw JSON
{
"name": "RecorderDataReady",
"description": "Emitted when recorder data is ready.",
"require_scheduler": false,
"items": [
{
"name": "Data",
"description": "Recorded raw audio data.",
"type": "RawBuffer"
}
]
}
CLI Command
svc_subscribe Audio RecorderDataReady