esp-adf
esp-adf copied to clipboard
Jittering in audio recording (AUD-4001)
Please look at above audio recording from esp lyra-t it has lots of jittering and noise in it. Any idea why is this? Also how to increase voice quality and volume?
audio_hal_codec_config_t audio_codec_cfg = {
.adc_input = AUDIO_HAL_ADC_INPUT_LINE1,
.dac_output = AUDIO_HAL_DAC_OUTPUT_ALL,
.codec_mode = AUDIO_HAL_CODEC_MODE_BOTH,
.i2s_iface = {
.mode = AUDIO_HAL_MODE_SLAVE,
.fmt = AUDIO_HAL_I2S_NORMAL,
.samples = AUDIO_HAL_08K_SAMPLES,
.bits = AUDIO_HAL_BIT_LENGTH_16BITS,
},
};
audio_board_handle_t board_handle = audio_board_init();
audio_hal_handle_t codec_hal = audio_hal_init(&audio_codec_cfg, &AUDIO_CODEC_ES8388_DEFAULT_HANDLE);
audio_hal_ctrl_codec(codec_hal, AUDIO_HAL_CODEC_MODE_BOTH, AUDIO_HAL_CTRL_START);
audio_hal_set_volume(codec_hal, 100);
audio_pipeline_cfg_t pipeline_cfg = DEFAULT_AUDIO_PIPELINE_CONFIG();
pFileSrcContext->pipeline = audio_pipeline_init(&pipeline_cfg);
AUDIO_NULL_CHECK(TAG, pFileSrcContext->pipeline, return ESP_FAIL);
i2s_stream_cfg_t i2s_cfg = {
.type = AUDIO_STREAM_READER,
.i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX),
.sample_rate = (int16_t)8000,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
.communication_format = I2S_COMM_FORMAT_I2S,
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL2 | ESP_INTR_FLAG_IRAM,
.dma_buf_count = 3,
.dma_buf_len = 320,
.use_apll = true,
.tx_desc_auto_clear = true,
.fixed_mclk = 0
},
.i2s_port = I2S_NUM_0,
.use_alc = false,
.volume = 100,
.out_rb_size = I2S_STREAM_RINGBUFFER_SIZE,
.task_stack = I2S_STREAM_TASK_STACK,
.task_core = I2S_STREAM_TASK_CORE,
.task_prio = I2S_STREAM_TASK_PRIO,
.stack_in_ext = false,
.multi_out_num = 0,
.uninstall_drv = true,
};
pFileSrcContext->i2s_stream_reader = i2s_stream_init(&i2s_cfg);
audio_pipeline_cfg_t pipeline_cfg = DEFAULT_AUDIO_PIPELINE_CONFIG();
pFileSrcContext->pipeline = audio_pipeline_init(&pipeline_cfg);
AUDIO_NULL_CHECK(TAG, pFileSrcContext->pipeline, return ESP_FAIL);
i2s_stream_cfg_t i2s_cfg = {
.type = AUDIO_STREAM_READER,
.i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX),
.sample_rate = (int16_t)8000,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
.communication_format = I2S_COMM_FORMAT_I2S,
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL2 | ESP_INTR_FLAG_IRAM,
.dma_buf_count = 3,
.dma_buf_len = 320,
.use_apll = true,
.tx_desc_auto_clear = true,
.fixed_mclk = 0
},
.i2s_port = I2S_NUM_0,
.use_alc = false,
.volume = 100,
.out_rb_size = I2S_STREAM_RINGBUFFER_SIZE,
.task_stack = I2S_STREAM_TASK_STACK,
.task_core = I2S_STREAM_TASK_CORE,
.task_prio = I2S_STREAM_TASK_PRIO,
.stack_in_ext = false,
.multi_out_num = 0,
.uninstall_drv = true,
};
pFileSrcContext->i2s_stream_reader = i2s_stream_init(&i2s_cfg);
audio_pipeline_register(pFileSrcContext->pipeline, pFileSrcContext->i2s_stream_reader, "i2s");
g711_encoder_cfg_t g711_cfg = DEFAULT_G711_ENCODER_CONFIG();
g711_cfg.enc_mode = 1;
g711_cfg.task_core = 1;
pFileSrcContext->encoder = g711_encoder_init(&g711_cfg);
raw_stream_cfg_t raw_cfg = RAW_STREAM_CFG_DEFAULT();
raw_cfg.type = AUDIO_STREAM_READER;
raw_cfg.out_rb_size = I2S_STREAM_RINGBUFFER_SIZE,
pFileSrcContext->raw_stream_reader = raw_stream_init(&raw_cfg);
audio_element_set_output_timeout(pFileSrcContext->raw_stream_reader, portMAX_DELAY);
audio_pipeline_register(pFileSrcContext->pipeline, pFileSrcContext->encoder, "sip_enc");
audio_pipeline_register(pFileSrcContext->pipeline, pFileSrcContext->raw_stream_reader, "raw");
const char *link_tag[3] = {"i2s", "sip_enc", "raw"};
audio_pipeline_link(pFileSrcContext->pipeline, &link_tag[0], 3);
@ayazalavi I found two voice quality issue on your voice file. One is basic noise, it's always and stable in there, this is because of the ES8388 is not good at 8K sample rate. Others, your voice is loop playback, in my opinoin, recording data is ok, you need to check playback pipeline.