搜索
bottom↓
回复: 26

请教SMT32+CS4344音频DAC输出方案问题?

[复制链接]

出0入10汤圆

发表于 2018-9-15 22:33:18 | 显示全部楼层 |阅读模式
本帖最后由 chuanyang 于 2018-9-15 22:36 编辑

1.项目背景:由于项目要用到语音播报,播报内容只需要几秒钟内容就可以了!目前思路是:将WAV转换后的音频文件存储在SPIflash中,在需要播报内容时候,将数据读出,通过SMT32的I2S接口按照标准PHILPS协议发给CS4344然后到D类放大器输出到喇叭。(WAV直接通过软件工具转换成hex文件)
2.问题描述:将载入的音频数据通过DMA发出,喇叭没有反应,只听见很微弱的哒哒哒的声音,播放的声音非常微弱,感觉CS4344没有满量程输出,还没搞懂如何使DAC满量程输出,WAV格式的音频能否调节音量呢?如何调整呢?。。。高手勿喷!
3.如果不用这种方案有没有低成本更取巧的解决方案呢?谢谢论坛朋友推荐!
4.CS4344功放电路如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入984汤圆

发表于 2018-9-16 02:08:38 | 显示全部楼层
本帖最后由 Himem 于 2018-9-16 02:30 编辑

>>播放的声音微弱
是正常预设的声音还是无关杂音?

不使用dma或中断,直接向I2S写随机数是否能发出正常音量的白噪?
while (1) {
    SPI_I2S_SendData(SPI3, rand());
}
类似这样

>>WAV格式的音频能否调节音量
从flash读取数据后,每个采样点乘/除个系数即可调节音量,再送i2s即可

(待测试后编辑)以最常用的s16_le格式的pcm为例,音量-6db:
uint8_t DMABUF[1024];
for(i=0;i<sizeof(DMABUF);i+=sizeof(int16_t)) {
  *(int16_t*)&DMABUF【i】 /= 2;
}

出0入10汤圆

 楼主| 发表于 2018-9-16 15:36:10 | 显示全部楼层
目前用的是DMA+CS4344这种DAC,写的数据可24bit,是在论坛里面找的wave to c但是只有 8位的采样宽度,有没有办法做成24bit 或 16bit的位宽呢

出0入10汤圆

 楼主| 发表于 2018-9-16 15:39:20 | 显示全部楼层
Himem 发表于 2018-9-16 02:08
>>播放的声音微弱
是正常预设的声音还是无关杂音?

你好!
1.现在发的数据是用 WAVE TO C这个软件输出的8位采样宽度,声音比较小,我乘了1000后就比较大了,但是声音效果极差,根本听不清晰;
2.比如我要实现16-24bit位宽的采样效果,做到20k的采样周期,怎么做这个输入WAVE数据呢?有没有相关软件推荐呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入984汤圆

发表于 2018-9-16 16:14:43 | 显示全部楼层
本帖最后由 Himem 于 2018-9-16 16:18 编辑
chuanyang 发表于 2018-9-16 15:39
你好!
1.现在发的数据是用 WAVE TO C这个软件输出的8位采样宽度,声音比较小,我乘了1000后就比较大了, ...


我一般wav转c是用goldwave降精度/声道/采样率后,winhex复制为c代码
(操作细节待编辑)

但是LZ的这个应用中8bit我认为已经够用了,I2S输出选16bit模式,flash数据为8bit有符号,音量控制放在FLASH到dma间,
  1. uint8_t VOLUME = 7;
  2. #define FLASH_BUF_SIZE 1024
  3. uint8_t SOURCEDATA[FLASH_BUF_SIZE];
  4. int16_t DMABUF[FLASH_BUF_SIZE*2];
  5. for (i=0; i<FLASH_BUF_SIZE; i++) {
  6.         DMABUF[i] = (int)((int8_t)SOURCEDATA[i]) << VOLUME;
  7. }
复制代码

SOURCEDATA,flash取到的数据,
DMABUF,待送到I2SDMA的数据
VOLUME音量取0到7,每一级差6dB音量,值超过7可能会失真

VOLUME取7时,增大图上功放的反馈电阻R7,R8,使喇叭音量能接受即可

出0入4汤圆

发表于 2018-9-16 16:38:24 | 显示全部楼层
有现成的语音芯片 论坛里很多人有发的,只要串口控制的就可以了
某宝搜索   MP3 语音 芯片   一大堆产品
CS4344必须需要使用I2S接口的芯片,而现成的芯片只需要串口就可以了。
JL1094  JQ8900  KT403A N9200  等等等等

出0入10汤圆

 楼主| 发表于 2018-9-16 16:50:47 | 显示全部楼层
ilan2003 发表于 2018-9-16 16:38
有现成的语音芯片 论坛里很多人有发的,只要串口控制的就可以了
某宝搜索   MP3 语音 芯片   一大堆产品
CS ...

这的确是比较方便,但是有个问题,用户只想把音频文件固话到flash里面,无需要 sd/tf卡之类的,有没有办法用sub烧写音频文件到flash,再用单芯片来播放,或推荐的类似方案

出0入10汤圆

 楼主| 发表于 2018-9-16 17:00:31 | 显示全部楼层
ilan2003 发表于 2018-9-16 16:38
有现成的语音芯片 论坛里很多人有发的,只要串口控制的就可以了
某宝搜索   MP3 语音 芯片   一大堆产品
CS ...

这的确是比较方便,但是有个问题,用户只想把音频文件固话到flash里面,无需要 sd/tf卡之类的,有没有办法用sub烧写音频文件到flash,再用单芯片来播放,或推荐的类似方案

出0入10汤圆

 楼主| 发表于 2018-9-16 17:01:04 | 显示全部楼层
ilan2003 发表于 2018-9-16 16:38
有现成的语音芯片 论坛里很多人有发的,只要串口控制的就可以了
某宝搜索   MP3 语音 芯片   一大堆产品
CS ...

这的确是比较方便,但是有个问题,用户只想把音频文件固话到flash里面,无需要 sd/tf卡之类的,有没有办法用sub烧写音频文件到flash,再用单芯片来播放,或推荐的类似方案

出0入93汤圆

发表于 2018-9-16 18:34:30 | 显示全部楼层
chuanyang 发表于 2018-9-16 17:01
这的确是比较方便,但是有个问题,用户只想把音频文件固话到flash里面,无需要 sd/tf卡之类的,有没有办 ...

现成的MP3芯片只需要留出USB烧写口就可以把音频文件固化到Flash了。
最简单的方法是使用SPI Flash + 内置DAC。你的主芯片本身有IIS,一般有这么高级功能的片子会有DAC的。但是需要功放才能推动喇叭。烧写外部SPI Flash如果用ST-Link的安装目录有例程照着改改就可以,不用另外考虑了。
8位的音质还勉强吧,再就是采样率了。想便宜就自己压缩成ADPCM,解码占用资源少。

出0入4汤圆

发表于 2018-9-16 20:02:19 | 显示全部楼层
chuanyang 发表于 2018-9-16 17:01
这的确是比较方便,但是有个问题,用户只想把音频文件固话到flash里面,无需要 sd/tf卡之类的,有没有办 ...

只要价格SPIFLASH就可以了,成本也很低的   某宝有现成的模块卖,加上8002的功放芯片直接驱动小喇叭

出0入4汤圆

发表于 2018-9-16 20:04:49 | 显示全部楼层
随便找了个图片,你看一下,大部分的芯片及支持TF卡又支持外置SPI FLASH芯片

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入4汤圆

发表于 2018-9-16 20:05:46 | 显示全部楼层
论坛里面有人在宣传他家的芯片
https://www.amobbs.com/forum.php ... B%E8%AF%AD%E9%9F%B3

出0入10汤圆

 楼主| 发表于 2018-9-16 22:09:03 | 显示全部楼层
takashiki 发表于 2018-9-16 18:34
现成的MP3芯片只需要留出USB烧写口就可以把音频文件固化到Flash了。
最简单的方法是使用SPI Flash + 内置 ...

好方法,值得试试!APCM编码你用过吗?
请问:WAV转实际16位、24位的采样宽度到C有没有工具推荐呢?

出0入93汤圆

发表于 2018-9-17 05:53:02 | 显示全部楼层
chuanyang 发表于 2018-9-16 22:09
好方法,值得试试!APCM编码你用过吗?
请问:WAV转实际16位、24位的采样宽度到C有没有工具推荐呢? ...

WAV哪有24位的,都是8位或16位的,想要搞到24位就在后面加一个字节的0就OK了。
为什么要把WAV转换成C啊,编译器太闲了找点事做吗?二进制文件直接烧到外部SPI Flash的。
ADPCM我用过啊,16位(也可以说是4位吧)22025Hz采样,4声道混音成2声道,用的STM32F103RC,正好两路DAC,还可以。我的语音数据比你的大得多了,总共半个多小时呢,你的才几秒钟不压缩都可以。

出0入93汤圆

发表于 2018-9-17 06:48:27 | 显示全部楼层
不好意思没注意您第三条:如果不用这种方案有没有低成本更取巧的解决方案呢?谢谢论坛朋友推荐!

1、如果您不换主控芯片的话,那么直接内部Flash + DAC + ADPCM编码,除了功放外啥外部器件都不用。按10秒22K采样率算,单声道占用0.5字节 * 22025采样 * 10秒 = 107.5KB,立体声占用空间215KB。我估计你的MCU是有这点空间的,因为带IIS和DAC的一般Flash不小。
2、换主控的话,我推荐那些专门的几秒钟的OTP语音IC,个头小还不用你写语音数据省了你好大麻烦,而且好可以直推0.5W喇叭当然你的2W还得加功放。一般也就2元左右。随便找个,差不多这样的

出0入0汤圆

发表于 2019-2-28 11:21:01 | 显示全部楼层
Mard一下,等用到的时候来翻资料

出0入0汤圆

发表于 2019-3-16 23:00:42 | 显示全部楼层
我觉得你这个应用,STM32自己的DMA+12位DAC足够你用了,语音又不是音乐,另外,根据你说的,WAVE放在片内FLASH里,单声道就可以了。建议你加一个SPI-Flash+DMA+TIMER+片内DAC+单声道

出0入0汤圆

发表于 2019-5-28 15:30:10 | 显示全部楼层
淘宝买JQ8900的语音模块就好了,语音少的话,IO控制,多的话串口控制,这个可以连电脑更换语音的,这个貌似模块10元左右
要是语音不用换,淘宝上有打样固定的语音的,声音录好发过去就可以了,打样2元一个芯片

出0入0汤圆

发表于 2020-6-18 13:13:36 | 显示全部楼层
我挖坟一下,想请问楼上的大佬,问题解决了吗?因为我也遇到同样的问题了

出0入0汤圆

发表于 2020-6-18 13:15:40 | 显示全部楼层
chuanyang 发表于 2018-9-16 22:09
好方法,值得试试!APCM编码你用过吗?
请问:WAV转实际16位、24位的采样宽度到C有没有工具推荐呢? ...

您好,我遇到了和您一样的问题,方便私聊一下吗?有偿求指导

出0入0汤圆

发表于 2020-6-18 13:59:27 | 显示全部楼层
想请教下楼主,现在解决了吗?我也遇到了相同的问题

出0入984汤圆

发表于 2020-6-18 14:07:20 | 显示全部楼层
12154646 发表于 2020-6-18 13:59
想请教下楼主,现在解决了吗?我也遇到了相同的问题

爬楼先一步步排查呗

出0入10汤圆

 楼主| 发表于 2020-6-20 19:12:02 | 显示全部楼层
已解决,要弄成WAV波形输入文件,

出0入0汤圆

发表于 2020-6-21 19:37:47 来自手机 | 显示全部楼层
stn32内置12位DAC足矣

出0入0汤圆

发表于 2020-6-22 08:04:11 | 显示全部楼层
这个两个方式我们都试过,个人比较推荐片上DAC的方式。 因为STM的i2s的时钟不能一直输出,会在播放和停止时输出爆音(CS4344的时钟丢了), 所以片上DA的方式会比较好。

出0入0汤圆

发表于 2020-7-5 03:30:30 | 显示全部楼层
本帖最后由 mikejin 于 2020-7-5 03:47 编辑
chuanyang 发表于 2020-6-20 19:12
已解决,要弄成WAV波形输入文件,


可以微信讨论下解决方案么,有个手上有个案子需要用到此方案,方便的话加好友聊下,微信(18068098949)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-18 08:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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