ADC 麦克风
使用 ADC 采集模拟麦克风数据,无需使用外部的音频 codec 芯片,适用于对采样率要求不太高且成本敏感的应用。在代码结构上采用 esp_codec_dev 的工程模式。
特性
支持多路 ADC 音频采样。
支持最大 12 位的 ADC 采样分辨率。
备注
多路采样支持的最大分辨率为,ADC 最大采样率(S3 为 83.3K) / 采样通道数。
参考电路
外部配置 ADC Continuous
可在外部初始化好 adc continuous mode, 并将 adc_continuous_handle_t
传入。
与 ADC oneshot 模式一起使用
如果 ADC oneshot 与 ADC condition 使用不同的 ADC Unit,那么不会有冲突。
如果使用相同的 ADC Unit, 请调用
esp_codec_dev_close()
关闭adc_mic
时调用adc_oneshot_read
。
adc_continuous_start(handle);
adc_continuous_read();
adc_continuous_stop();
adc_oneshot_read();
示例代码
audio_codec_adc_cfg_t cfg = DEFAULT_AUDIO_CODEC_ADC_MONO_CFG(ADC_CHANNEL_0, 16000);
const audio_codec_data_if_t *adc_if = audio_codec_new_adc_data(&cfg);
esp_codec_dev_cfg_t codec_dev_cfg = {
.dev_type = ESP_CODEC_DEV_TYPE_IN,
.data_if = adc_if,
};
esp_codec_dev_handle_t dev = esp_codec_dev_new(&codec_dev_cfg);
esp_codec_dev_sample_info_t fs = {
.sample_rate = 16000,
.channel = 1,
.bits_per_sample = 16,
};
esp_codec_dev_open(dev, &fs);
uint16_t *audio_buffer = malloc(16000 * sizeof(uint16_t));
assert(audio_buffer);
while (1) {
int ret = esp_codec_dev_read(dev, audio_buffer, sizeof(uint16_t) * 16000);
ESP_LOGI(TAG, "esp_codec_dev_read ret: %d\n", ret);
}
API 参考
Header File
Functions
-
const audio_codec_data_if_t *audio_codec_new_adc_data(audio_codec_adc_cfg_t *adc_cfg)
Initialize codec adc.
- 参数
adc_cfg – pointer of configuration struct
- 返回
const audio_codec_data_if_t* adc data interface.
Structures
-
struct audio_codec_adc_cfg_t
codec adc configuration
Public Members
-
adc_continuous_handle_t *handle
Type of adc continuous mode driver handle, if NULL will create new one internal, else will use the handle
-
size_t max_store_buf_size
Max length of the conversion results that driver can store, in bytes.
-
size_t conv_frame_size
Conversion frame size, in bytes. This should be in multiples of
SOC_ADC_DIGI_DATA_BYTES_PER_CONV
-
adc_unit_t unit_id
ADC unit
-
uint8_t *adc_channel_list
Channel of ADC
-
uint8_t adc_channel_num
Number of channels
-
adc_atten_t atten
It should correspond to the actual range, with 0dB attenuation having the least ripple.
-
uint32_t sample_rate_hz
Sample rate of ADC
-
adc_continuous_handle_t *handle
Macros
-
DEFAULT_AUDIO_CODEC_ADC_MONO_CFG(_channel, _sample)
-
DEFAULT_AUDIO_CODEC_ADC_STEREO_CFG(_channel_l, _channel_r, _sample)