Open shapefire opened 9 months ago
可以播, 但有点其他的bug 在while(1)里面添加一条新的if
if (msg.source_type == AUDIO_ELEMENT_TYPE_ELEMENT && msg.source == (void*) i2s_stream_writer
&& msg.cmd == AEL_MSG_CMD_REPORT_STATUS
&& (((int)msg.data == AEL_STATUS_STATE_RUNNING))) {
//FIXME: 会丢音频最后1~2个字
// TTS默认输出格式为单声道, 16bit@16000Hz。
pwm_stream_set_clk(i2s_stream_writer, 16000, 16, 1);
}
//L R channel_cnt
//L R 1 => OK
//L R 2 => OK
//L - 1 => OK
//L - 2 => BAD(3/5 instead of 2/4)
//- R 1 => BAD(0/0 instead of 1/2)
//- R 2 => BAD(1/2 instead of 2/4)
if (r_size == AEL_IO_DONE)
{
audio_pwm_handle_t handle = g_audio_pwm_handle;
pwm_data_handle_t data = handle->data;
//wait for pwm complete
while(true)
{
if (ESP_OK != pwm_data_list_wait_semaphore(data, 2000 / portTICK_RATE_MS))
{
break;
}
uint32_t count = pwm_data_list_get_count(data);
if (count == 0)
{
break;
}
}
}
使用esp32-s3开发板,外接PAM8406功放板,将play_tts_example 的i2s stream 流更改为pwm_stream流,其运行后无法正常播放音频。 更改前的代码: i2s_stream_cfg_t i2s_cfg = I2S_STREAM_CFG_DEFAULT(); i2s_cfg.volume = 100; i2s_cfg.type = AUDIO_STREAM_WRITER; i2s_cfg.i2s_config.sample_rate = 16000; i2s_cfg.i2s_config.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT; i2s_stream_writer = i2s_stream_init(&i2s_cfg); 更改后的代码: pwm_stream_cfg_t pwm_cfg = PWM_STREAM_CFG_DEFAULT(); pwm_cfg.type = AUDIO_STREAM_WRITER; pwm_cfg.pwm_config.gpio_num_left = GPIO_NUM_17; pwm_cfg.pwm_config.gpio_num_right = GPIO_NUM_18; i2s_stream_writer = pwm_stream_init(&pwm_cfg);
若play_tts_example例程支持pwm播放,那应该怎样修改?