完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在做的DSP产品,采样率是44100,16BIT,通过i2s采样音频,再输出到i2s。中间进行DSP。为了降低音频延迟,我是128个sample读写一次i2s.
在将音频样本保存的sd card上(WAV格式),遇到写入速度不够的问题。(sd卡用的mmc,40mhz的速度) 如果直接在i2s_read和i2s_write之间调用fwrite, 就会非常卡, 声音也是卡顿的。 没办法,我就开了两个线程, 在i2s 读写之外,另一个线程用xRingbufferReceive去读取i2s线程写入的ringbuffer,然后,等到8192个字节以后,再一次性调用 fwrite ,可是每个几秒,sd卡还是会卡一下,这一次的fwrite延迟高达170多毫秒,我换了很多张sd卡都有类似现象。 请问这个该如何解决? |
|
相关推荐
1个回答
|
|
根据您的描述,您在使用DSP产品进行音频处理时遇到了写入速度不足的问题。以下是一些建议来解决这个问题:
1. **优化数据流处理**:确保您的数据处理逻辑尽可能高效,减少不必要的计算和内存操作。 2. **增加缓冲区大小**:您可以尝试增加ringbuffer的大小,以便在数据写入SD卡之前存储更多的数据。这样可以减少fwrite调用的次数,从而降低延迟。 3. **使用DMA(Direct Memory Access)**:如果可能的话,使用DMA来处理数据传输。这样可以减少CPU的负担,提高数据传输速度。 4. **调整采样率和位深**:如果可能的话,尝试降低采样率或位深,以减少每次处理的数据量。 5. **使用更快的存储介质**:如果SD卡的性能是瓶颈,您可以考虑使用更快的存储介质,如eMMC或SSD。 6. **优化文件写入操作**:尝试使用更高效的文件写入方法,例如使用fflush()定期刷新缓冲区,而不是等待8192字节再写入。 7. **调整线程优先级**:确保处理音频数据的线程具有较高的优先级,以便它们能够更快地执行。 8. **使用实时操作系统(RTOS)**:如果可能的话,使用实时操作系统来管理任务调度,以确保音频处理任务能够按时完成。 9. **调试和性能分析**:使用性能分析工具来识别代码中的瓶颈,然后针对性地进行优化。 10. **考虑硬件加速**:如果硬件支持,可以考虑使用硬件加速来处理音频数据,以提高处理速度。 通过尝试这些建议,您应该能够找到提高音频处理速度和降低延迟的方法。请注意,可能需要结合多种方法来达到最佳效果。 |
|
|
|
只有小组成员才能发言,加入小组>>
1132 浏览 1 评论
574浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
461浏览 5评论
462浏览 4评论
435浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 00:24 , Processed in 0.827616 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号