硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1899|回复: 4
收起左侧

请教下,解码音频数据时,解码后的数据是直接输出到dam的地址好还是需要数据拷贝好

[复制链接]

610

主题

3063

回帖

4913

积分

至尊会员

积分
4913
发表于 2017-10-6 08:39:07 | 显示全部楼层 |阅读模式
请教下,解码音频数据时,解码后的数据是直接输出到dma的地址好还是进行数据拷贝好?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107197
QQ
发表于 2017-10-6 10:36:28 | 显示全部楼层
搞个DMA双缓冲。直接给DMA的缓冲区即可。
回复

使用道具 举报

610

主题

3063

回帖

4913

积分

至尊会员

积分
4913
 楼主| 发表于 2017-10-6 11:34:27 | 显示全部楼层

回 eric2013 的帖子

eric2013:搞个DMA双缓冲。直接给DMA的缓冲区即可。 (2017-10-06 10:36)
你好,我目前使用的是 dma 双缓冲的

方法一,直接输出到dma首地址:
            if(audiodev.AudioSwitchBuf)   
            {
              fillnum = WAVE_ReadBuff(audiodev.file,
                                            audiodev.i2sbuf2,
                                            WAV_SAI_TX_DMA_BUFSIZE,
                                            WaveFormat.BitPerSample);//填充buf2
            }
            else
            {
              fillnum = WAVE_ReadBuff(audiodev.file,
                                            audiodev.i2sbuf1,
                                            WAV_SAI_TX_DMA_BUFSIZE,
                                           WaveFormat.BitPerSample);//填充buf1
            }


方法二,使用数据拷贝:
            if(audiodev.AudioSwitchBuf)
            {
              WAVE_FillAudio_MemCpy((uint16_t *)audiodev.i2sbuf2,  (uint16_t *)_WavePlayCtr.i2STempBuff, WAV_SAI_TX_DMA_BUFSIZE/2);   //16bit拷贝
            }
            else
            {
              WAVE_FillAudio_MemCpy((uint16_t *)audiodev.i2sbuf1,  (uint16_t *)_WavePlayCtr.i2STempBuff, WAV_SAI_TX_DMA_BUFSIZE/2);
            }

            fillnum = WAVE_ReadBuff(audiodev.file,
                              _WavePlayCtr.i2STempBuff,
                              WAV_SAI_TX_DMA_BUFSIZE,
                             WaveFormat.BitPerSample);//填充buf1

上述两种方法播放音乐貌似都没有什么问题,但是不知道哪种方法播放出来的音质更好 ??
还是说上述的方法一样 ????
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107197
QQ
发表于 2017-10-7 10:21:16 | 显示全部楼层

回 hpdell 的帖子

hpdell:你好,我目前使用的是 dma 双缓冲的

方法一,直接输出到dma首地址:
            if(audiodev.AudioSwitchBuf)  
....... (2017-10-06 11:34) 
读取到buf中就行。
回复

使用道具 举报

610

主题

3063

回帖

4913

积分

至尊会员

积分
4913
 楼主| 发表于 2017-10-7 11:30:01 | 显示全部楼层

回 eric2013 的帖子

eric2013:读取到buf中就行。 (2017-10-07 10:21) 
你好,意思就是先读取到buf中,然后再进行拷贝的方法比较好,是吧 ?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-21 13:05 , Processed in 0.276774 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表