音频编解码器配置
此组件仅适用于基于 ESP32 的芯片。
audio 组件允许您显式启用音频编解码器并为每个编解码器库调整高级选项。默认情况下,编解码器由需要它们的其他组件自动启用。例如,将 Speaker Media Player 配置为以 FLAC 为首选格式,或嵌入 Opus 音频文件。大多数用户根本不需要配置此组件。
在以下情况下使用此组件:
- 构建支持额外编解码器的固件,而这些编解码器不是自动引入的。
- 覆盖解码器缓冲区的默认内存放置,以减少播放开始时的卡顿或释放内部 RAM。
- 调整 Opus 特定选项,例如浮点实现或伪堆栈大小。
通过此组件启用编解码器是叠加的:它不能禁用其他组件需要的编解码器。
# Example configuration entryaudio: codecs: flac: mp3: opus: wav:-
codecs (可选, mapping):用于启用和配置各个音频编解码器的映射。每个编解码器键可以留空以使用默认设置启用该编解码器,也可以填充下面描述的每个编解码器的选项。
-
flac (可选, mapping):启用并配置 FLAC 解码器。
- buffer_memory (可选, string):分配 FLAC 工作缓冲区的位置(对于立体声流,通常为 16–64 KB)。取值为
psram或internal。可用时默认为psram,否则为internal。
- buffer_memory (可选, string):分配 FLAC 工作缓冲区的位置(对于立体声流,通常为 16–64 KB)。取值为
-
mp3 (可选, mapping):启用并配置 MP3 解码器。
- buffer_memory (可选, string):分配 MP3 解码器状态缓冲区的位置。取值为
psram或internal。可用时默认为psram,否则为internal。
- buffer_memory (可选, string):分配 MP3 解码器状态缓冲区的位置。取值为
-
opus (可选, mapping):启用并配置 Opus 解码器。
-
floating_point (可选, boolean):使用浮点 Opus 实现而不是定点实现。在 ESP32-S3 上默认为
true(其 FPU 足够快,可以从中受益),在其他目标上默认为false,这些目标上定点解码更快。 -
state_memory (可选, string):分配 Opus 解码器状态和其他持久缓冲区(每个实例约 30–50 KB,外加共享表)的位置。取值为
psram或internal。可用时默认为psram,否则为internal。 -
pseudostack (可选, mapping):配置 Opus 伪堆栈——一个在解码操作期间大量用作临时分配的工作内存缓冲区。
-
threadsafe (可选, boolean):为
true时,每个使用 Opus 的 FreeRTOS 任务都通过 pthread 线程本地存储获得自己的伪堆栈;对于来自多个任务的并发解码是安全的。为false时,共享单个全局伪堆栈,这使用更少的内存,但不适合并发使用。默认为true。 -
buffer_memory (可选, string):分配伪堆栈缓冲区的位置。取值为
psram或internal。可用时默认为psram,否则为internal。 -
size (可选, integer):伪堆栈缓冲区的大小,以字节为单位。必须在
60000和240000之间。默认为120000(120 KB),可以安全地解码所有立体声 Opus 文件。如果遇到”pseudostack overflow”错误,请增大此值。
-
-
-
wav (可选, mapping):启用 WAV 解码。没有其他选项。
-
内存放置提示
Section titled “内存放置提示”解码器库倾向于在 PSRAM 中分配大型缓冲区,如果 PSRAM 不可用,则回退到内部 RAM。在 ESP32-S3 上,这通常是最佳选择,因为它的 PSRAM 速度快,缓存也很大。
在原始 ESP32 上,PSRAM 访问明显较慢。如果您有富余的内部内存,将 buffer_memory(对于 Opus,还有伪堆栈的 buffer_memory)切换到 internal 可以减少播放开始时的卡顿并降低整体 CPU 使用率。
TIP
如果播放在一两秒后正常,但开头有可听见的杂音,请尝试将相关的解码器缓冲区移到 internal 内存。
audio: codecs: flac: buffer_memory: internal mp3: buffer_memory: psram opus: floating_point: false state_memory: psram pseudostack: threadsafe: false buffer_memory: internal size: 80000 wav: