ESP Device UAC
esp_device_uac 是基于 TinyUSB 的 USB Audio Class 驱动库,它支持将 ESP 芯片模拟成为一个音频设备,支持自定义音频采样率,麦克风通道数,扬声器通道数等。
特性:
- 默认支持 ISO FeedBack 通信接口,根据 UAC FIFO 内存剩余大小自动向主机端同步, 参考。 
- 支持自定义音频采样率,麦克风通道数,扬声器通道数。 
- 支持扬声器数据到来时候先缓冲一段数据,再进行传输,有助于减少音频数据传输的中断频率。 
USB Device UAC 用户指南
- 开发板 - 可以使用任何带有 USB 接口的 ESP32-S2/ESP32-S3/ESP32-P4 开发板 
 
- USB MIC 回调函数 - uac_input_cb_t回调函数用于将音频数据传输到 USB 主机端,用户应该按照时间轴传输音频,或者在该回调函数中堵塞的等待音频数据到来。
- 通过设置 CONFIG_UAC_MIC_INTERVAL_MS宏定义来设置回调函数读取音频数据的长度。
- 设置 - CONFIG_UAC_MIC_INTERVAL_MS=10在 48000HZ 采样率,16 位精度,单通道情况下,每次读取的数据量为 10ms * 48000HZ / 1000 * 2byte = 960byte
 
 
- 通过设置 
- 通过设置 - UAC_SPK_INTERVAL_MS宏定义来设置回调函数第一次写入音频的长度,为了防止音频数据传输的中断频率过高,默认为 10ms,后续音频写入会按照大约 1ms 的数据量进行传输。
- UAC_SPK_NEW_PLAY_INTERVAL宏定义用于判断到来的音频是否是新音频,如果是新音频,会先缓冲一段数据,再进行传输,有助于减少音频数据传输的中断频率。
- UAC_SUPPORT_MACOS宏用于支持 Macos 系统,注意开启该宏定义后,windows 系统可能无法识别设备。
 
USB Device UAC API 参考
- 用户可通过调用 - uac_device_config_t函数配置音频输入输出,静音,音量四个回调函数。
uac_device_config_t config = {
    .output_cb = uac_device_output_cb,          // Speaker output callback
    .input_cb = uac_device_input_cb,            // Microphone input callback
    .set_mute_cb = uac_device_set_mute_cb,      // Set mute callback
    .set_volume_cb = uac_device_set_volume_cb,  // Set volume callback
    .cb_ctx = NULL,
};
uac_device_init(&config);
Example
API Reference
Header File
Functions
- 
esp_err_t uac_device_init(uac_device_config_t *config)
- Initialize the USB Audio Class (UAC) device. - 参数
- config – Pointer to the UAC device configuration structure. 
- 返回
- ESP_OK on success 
- ESP_FAIL on failure 
 
 
Structures
- 
struct uac_device_config_t
- USB UAC Device Config. - Public Members - 
bool skip_tinyusb_init
- if true, the Tinyusb and usb phy will not be initialized 
 - 
uac_output_cb_t output_cb
- callback function for UAC data output, if NULL, output will be disabled 
 - 
uac_input_cb_t input_cb
- callback function for UAC data input, if NULL, input will be disabled 
 - 
uac_set_mute_cb_t set_mute_cb
- callback function for set mute, if NULL, the set mute request will be ignored 
 - 
uac_set_volume_cb_t set_volume_cb
- callback function for set volume, if NULL, the set volume request will be ignored 
 - 
void *cb_ctx
- callback context, for user specific usage 
 
- 
bool skip_tinyusb_init
Type Definitions
- 
typedef esp_err_t (*uac_output_cb_t)(uint8_t *buf, size_t len, void *cb_ctx)
- 
typedef esp_err_t (*uac_input_cb_t)(uint8_t *buf, size_t len, size_t *bytes_read, void *cb_ctx)
- 
typedef void (*uac_set_mute_cb_t)(uint32_t mute, void *cb_ctx)
- 
typedef void (*uac_set_volume_cb_t)(uint32_t volume, void *cb_ctx)