USB Device UAC
esp_device_uac is a USB Audio Class driver library based on TinyUSB. It supports simulating an ESP chip as an audio device, with customizable audio sampling rates, microphone channels, and speaker channels.
Features:
Supports ISO FeedBack communication interface by default. It automatically syncs with the host based on the remaining size of the UAC FIFO memory. Reference.
Allows custom audio sampling rates, microphone channels, and speaker channels.
Buffers a segment of data before transmission when speaker data arrives, which helps reduce the frequency of audio data transmission interruptions.
USB Device UAC User Guide
Development Board
Any ESP32-S2/ESP32-S3 development board with a USB interface can be used.
USB MIC Callback Function
The
uac_input_cb_t
callback function is used to transfer audio data to the USB host. Users should transfer audio data according to the timeline or block the callback function while waiting for audio data.- Set the length of the audio data read by the callback function by defining the
CONFIG_UAC_MIC_INTERVAL_MS
macro. Setting
CONFIG_UAC_MIC_INTERVAL_MS=10
with a sampling rate of 48000Hz, 16-bit precision, and single channel results in a read data length of 10ms * 48000Hz / 1000 * 2bytes = 960bytes.
- Set the length of the audio data read by the callback function by defining the
Set the length of the first audio write by the callback function using the
UAC_SPK_INTERVAL_MS
macro. To prevent high audio data transmission interruption frequency, the default is 10ms. Subsequent audio writes will be transmitted in approximately 1ms data lengths.The
UAC_SPK_NEW_PLAY_INTERVAL
macro determines whether the incoming audio is new. If it is new, it will buffer a segment of data before transmission, which helps reduce the frequency of audio data transmission interruptions.The
UAC_SUPPORT_MACOS
macro supports MacOS. Note that enabling this macro may make the device unrecognizable by Windows systems.
USB Device UAC API Reference
Users can configure four callback functions for audio input/output, mute, and volume by calling the
uac_device_config_t
function.
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.
- Parameters
config – Pointer to the UAC device configuration structure.
- Returns
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)