乐鑫技术交流
直播中

李艺银

7年用户 1052经验值
私信 关注
[问答]

蓝牙播放的同时保存wav文件到sd卡失败了怎么处理?

git上拉取的master分支最新代码。
examplesplayerpipeline_bt_sink例程可以正常工作,手机连接蓝牙可以放歌。但是偶尔丢包,不过声音是正常的。Code: Select all
BT_APPL: Pkt dropped
参考examplesadvanced_examplesrecord_while_play例子,在蓝牙例程中新建了一条录音的pipeline,跑起来看日志初始化正常,但是连接蓝牙放歌的时候会不停丢包,也没有声音了,保存的wav文件也是坏的。
录音pipeline代码如下Code: Select all
static audio_pipeline_handle_t example_create_rec_pipeline(const char *url, int sample_rates, int channels){    audio_pipeline_handle_t pipeline;    audio_pipeline_cfg_t pipeline_cfg = DEFAULT_AUDIO_PIPELINE_CONFIG();    pipeline = audio_pipeline_init(&pipeline_cfg);    mem_assert(pipeline);    ESP_LOGI(TAG, "[ * ] Save record data as %dHz, %dChannels wav file named [%s]", sample_rates, channels, url);    fatfs_stream_cfg_t fatfs_write_cfg = FATFS_STREAM_CFG_DEFAULT();    fatfs_write_cfg.type = AUDIO_STREAM_WRITER;    fatfs_stream_writer = fatfs_stream_init(&fatfs_write_cfg);    i2s_stream_cfg_t i2s_file_cfg = I2S_STREAM_CFG_DEFAULT();    i2s_file_cfg.type = AUDIO_STREAM_READER;/*        i2s_file_cfg.i2s_config.dma_buf_count = DMA_BUF_COUNT;        i2s_file_cfg.i2s_config.dma_buf_len = DMA_BUF_LEN;*/    i2s_stream_reader = i2s_stream_init(&i2s_file_cfg);    wav_encoder_cfg_t wav_file_cfg = DEFAULT_WAV_ENCODER_CONFIG();    wav_encoder = wav_encoder_init(&wav_file_cfg);        rsp_filter_cfg_t rsp_file_cfg = DEFAULT_RESAMPLE_FILTER_CONFIG();        rsp_file_cfg.src_rate = 44100;        rsp_file_cfg.src_ch = 1;        rsp_file_cfg.dest_rate = sample_rates;        rsp_file_cfg.dest_ch = channels;        rsp_file_cfg.mode = RESAMPLE_DECODE_MODE;        resample_for_rec = rsp_filter_init(&rsp_file_cfg);    audio_pipeline_register(pipeline, i2s_stream_reader, "i2s");    audio_pipeline_register(pipeline, wav_encoder, "wav");        audio_pipeline_register(pipeline, resample_for_rec, "filter");    audio_pipeline_register(pipeline, fatfs_stream_writer, "file");        audio_pipeline_link(pipeline, (const char *[]) {"i2s", "filter", "wav", "file"}, 4);    audio_element_set_uri(fatfs_stream_writer, url);    return pipeline;}

                                                                                                                                                                 

回帖(1)

尚文清

2024-7-1 15:29:24
从您的描述来看,您在使用ESP32的蓝牙播放和录音功能时遇到了一些问题,包括偶尔的丢包、没有声音以及无法正常保存WAV文件。以下是一些建议和解决方案:

1. **检查硬件连接**:确保您的ESP32模块与SD卡之间的连接是稳定的。松动的连接可能导致数据传输问题。

2. **检查SD卡**:确保SD卡没有损坏,并且有足够的空间来保存录音文件。您可以尝试使用另一张SD卡,看看问题是否仍然存在。

3. **调整采样率和通道数**:您提到了采样率和通道数的参数,确保这些参数与您的音频源和录音需求相匹配。如果可能的话,尝试使用不同的采样率和通道数设置。

4. **优化代码**:检查您的录音pipeline代码,确保没有逻辑错误或资源竞争问题。例如,确保在录音过程中没有尝试同时播放音频。

5. **使用任务优先级**:在ESP32中,您可以通过调整任务优先级来确保关键任务(如音频播放和录音)获得足够的CPU时间。尝试提高这些任务的优先级。

6. **检查内存使用**:ESP32的内存有限,如果内存使用过高,可能会导致性能问题。使用`esp_get_free_heap_size()`函数检查内存使用情况,并优化代码以减少内存占用。

7. **更新ESP-IDF和组件**:确保您使用的是最新版本的ESP-IDF和相关组件,因为新版本可能修复了旧版本中的一些问题。

8. **调试和日志记录**:增加更多的日志记录,以便更好地了解问题发生的原因。您可以使用`esp_log_level_set()`函数来设置日志级别。

9. **社区支持**:如果您在GitHub上找到了相关的issue或者讨论,可以参与讨论或者寻求社区的帮助。

10. **测试不同的示例代码**:尝试使用ESP-IDF提供的其他示例代码,看看问题是否仍然存在。这有助于确定问题是否与特定的代码或配置有关。

最后,如果您在解决问题的过程中遇到困难,可以考虑向ESP-IDF的开发者或者社区寻求帮助,他们可能能提供更具体的解决方案。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分