LM3S9B96播放WAV I2S请教
本帖最后由 dudududu 于 2012-7-9 16:14 编辑打算用IT的LM3S9B96做一个WAV播放器,现在的状态是MCU的I2S外设已调试通过,DMA功能也正常开启,能够正确输出虚拟的音频数据,下一步就是读取SD卡的WAV文件,然后I2S输出了;
有一个问题,就是看过网上WAV的文件格式解析,出去文件头,后面就是PCM数据,我是不是就直接将这些PCM数据按照规定的位宽和声道时序送给I2S输出就可以了,还是说需要对数据进行一些处理什么的,这里的PCM暂时只考虑未压缩的PCM;
因为在DAC芯片上看到,数据时带符号的,分正负,0x800000最小值,0x7FFFFF最大值,0x000000输出为0(中点),所以产生上面的疑问
沒有人搞过WMV的格式么?额看来还是要自己摸索啊 WAV不用做处理,可以直接送到DAC产生音频输出。因为PCM就是按照有符号数记录的。 想了解WAV头格式, 可以参考下边链接.
http://www.daubnet.com/en/file-format-riff
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ 当然,我一直得梦想是,用DSP处理一下,以获得自己喜欢的效果。可惜水平太菜……只是梦 DSP处理音效? 楼上两位,灰常感谢哈,
cheungman 给的链接看了下,全英文{:sweat:}{:sweat:}不过头文件网上资料也挺多,都了解的差不多了,关键就是后面的实体音频数据,说是PCM格式的,我的理解也是,读出来,就直接按照时序要求通过I2S丢给DAC,但是看LM3S9B96的TI例程,还做了些什么加减32768左右移位什么的,就把我搞糊涂了 dudududu 发表于 2012-7-15 09:49
楼上两位,灰常感谢哈,
cheungman 给的链接看了下,全英文不过头文件网上资料也挺多, ...
移位可以做音量控制,但是会损失分辨率,不hifi 好吧,謝謝你的回答,我就按照原始数据试试,{:biggrin:} windows媒体播放器抓轨的WAV文件,会多一些“chunk”出来,data chunk的位置不是固定的,软件要做相应搜索处理,否则你找不到data chunk。 了解,再次感谢!! 我现在调I2S接口的CODEC,我想验证DAC输出是否成功,我该怎么弄到“虚拟的音频数据”呢? 你可以自己做一个正弦波的数组,按照WAV的数据格式些就可以,不需要包含前面的各种chunk,直接些数据就好,
以24bitDAC为例输入I2S数据和输出模拟电压(电流)值的对应关系如下:
0x000000输出中点电压;0x7FFFFF输出正峰值,从0x000000到0x7FFFFF,输出线性增加;
0x800000输出负峰值,0xFFFFFF输出中点电压(略小一点点)从0x800000到0xFFFFFF,输出线性增加;
dudududu 发表于 2013-3-16 08:15 static/image/common/back.gif
你可以自己做一个正弦波的数组,按照WAV的数据格式些就可以,不需要包含前面的各种chunk,直接些数据就好, ...
我最近也在做I2S播放WAV音频这个,我是把WAV文件格式的PCM码提取出来放入数组烧入程序,不知道是不是我的配置有没有问题,始终是滴这样的声音,根本不是我要的声音。wav文件的相关参数是单声道,采样频率是8KHz。不知道你把声音是如何调出来的? zj5566.77 发表于 2013-5-29 09:14 static/image/common/back.gif
我最近也在做I2S播放WAV音频这个,我是把WAV文件格式的PCM码提取出来放入数组烧入程序,不知道是不是我的 ...
如果是播放WAV文件的话,也是根据问价前面的数据判断找到PCM数据流的开始位置,然后就按顺序把数据读出来,丢给I2S外设,输出给DAC就可以了,和你这个流程一样的,如果一直是滴声,那是不是你提取的音频流数据太短,或者提取过程有问题,在这之前,首先要确保你的I2S外设调试好了,DAC配置正确 dudududu 发表于 2013-5-30 19:00 static/image/common/back.gif
如果是播放WAV文件的话,也是根据问价前面的数据判断找到PCM数据流的开始位置,然后就按顺序把数据读出来 ...
感谢您的回复,提取音频流数,不知您是怎么操作的?能否告知一二。。我是按照定时中断发送的。在1ms时间内发送16个字节,1ms内产生16个中断,发送字节。不知道这样对不对。 dudududu 发表于 2013-5-30 19:00 static/image/common/back.gif
如果是播放WAV文件的话,也是根据问价前面的数据判断找到PCM数据流的开始位置,然后就按顺序把数据读出来 ...
你的东东搞得如何了? mowin 发表于 2013-6-1 13:49 static/image/common/back.gif
你的东东搞得如何了?
哎,没搞了,9B96有点费电,不适合便携,并且也停产了,郁闷;
现在在学习STM32F4,看看能不能玩得转吧,这个比9b96省电一些,I2S质量也好一点,但是到现在为止,F4的SDIO和I2S外设都还没有搞定 zj5566.77 发表于 2013-6-1 12:45 static/image/common/back.gif
感谢您的回复,提取音频流数,不知您是怎么操作的?能否告知一二。。我是按照定时中断发送的。在1ms时间 ...
看你的描述,你是自己有中断和定时器在模拟数字音频接口???
我用的是新片的I2S外设,然后数据的话,就是从WAV文件里面读出来直接就用了,严格一点将,在读取到WAV数据后,开始的一部分数据是需要分析解析的,里面包含了采样率、位宽和PCM数据开始的位置等等,不过如果是44100采样率16bit的文件,也可以跨过这一步,直接就把文件送给I2S输出,前面的文件头很小,也就几十个字节,有可能开始会有瞬间的噪声,无伤大雅,或者直接跳过第一个扇区,从第二个扇区开始输出,因为一般的歌曲刚开始都会有一段时间的静音,因为是16bit所以左右声道的数据刚好是一个扇区一个扇区对齐的。 dudududu 发表于 2013-6-2 13:48 static/image/common/back.gif
看你的描述,你是自己有中断和定时器在模拟数字音频接口???
我用的是新片的I2S外设,然后数据的话,就 ...
您说的直接送I2S口是怎么回事,I2S口数据发送不是也有格式要求的。您是不是读取多少数据就送给I2S口多少数据?以8kHz采样频率的WAV文件,每次送给I2S口的数据量是多少呢? zj5566.77 发表于 2013-6-2 23:14 static/image/common/back.gif
您说的直接送I2S口是怎么回事,I2S口数据发送不是也有格式要求的。您是不是读取多少数据就送给I2S口多少 ...
额,这个问题难住我了{:sweat:}
我不知道你用的什么芯片,有没有I2S接口,要是有的话,调试通了用起来应该很方便的;
通常我们会这么做,先要确保I2S接口能够跑起来,设置正确,然后开辟两块缓存,缓存的大小根据需要而定,单片机资源多的话,可以适当大一些,比如4096字节,也就是一个完整的簇,资源少的话(主要指RAM小)就512字节,刚好一个扇区;
缓存好了,就开始从SD卡读数据,放到第一个缓存里面,放满了,就可以把这个缓存的数据送给I2S外设,同时从SD卡读下一组数据放到第二个缓存,放满了就等待第一个缓存的数据被I2S调用完毕,然后交换地址,继续从SD卡读数据放到第一个缓存,而I2S从第二个缓存读数据,这就是乒乓模式,这里有一个前提,就是要确保你从SD卡读取数据的速度要比I2S调用数据的速度快,且快很多,不然数据就会断流,然后要么I2S停止了,要么出来的声音断断续续有噪音什么的;而且,最要是单片机有DMA这个东东,那就方便很多;
要是没有DMA,应该就要自己用定时器来一步一步的写读数据和输出数据,这个就很蛋疼的,但是也是可以办到的,坛子里有高手干过,用2051就能播放SD卡里面的WAV文件,大神额 dudududu 发表于 2013-6-2 13:43:11 static/image/common/back.gif
哎,没搞了,9B96有点费电,不适合便携,并且也停产了,郁闷;
现在在学习STM32F4,看看能不能玩得转吧,这个比9b96省电一些,I2S质量也好一点,但是到现在为止,F4的SDIO和I2S外设
我在玩LPC1768。刚弄好程序框架,已经可以出声,DAC暂时用伟良的TDA1541,如果你有兴趣,我可以把资料整理上来。另:NXP的I2S外设比ST的NC设计好多了,而且寄存器简洁而好用,这点,比ATMEL还好。建议你试试 mowin 发表于 2013-6-3 11:55 static/image/common/back.gif
我在玩LPC1768。刚弄好程序框架,已经可以出声,DAC暂时用伟良的TDA1541,如果你有兴趣,我可以把资料整 ...
这个好啊,但是我只有一个LPC4357的开发板,就是KEIL出品的那个大板子,真心玩不转啊
先上源码。其他资料稍后。(原理图还没整理出来,目前是用杜邦线飞线测试的,开发板用这个,此处非广告,我与卖家无任何关系。LCD是320×240的,ILI9320,很有意思,用的是SPI接口。) dudududu 发表于 2013-6-3 17:33 static/image/common/back.gif
这个好啊,但是我只有一个LPC4357的开发板,就是KEIL出品的那个大板子,真心玩不转啊 ...
我刚才放狗搜了一下你那个板子,靠,好板啊!
没什么玩不转的,你把它当普通的M4玩,如果不用他的DSP,就当它是M3好了,我估计主要外设的使用方法跟LPC1768这类M3差不多的。同一家的MCU,外设是很相似的 本帖最后由 dudududu 于 2013-6-3 19:02 编辑
mowin 发表于 2013-6-3 18:35 static/image/common/back.gif
我刚才放狗搜了一下你那个板子,靠,好板啊!
没什么玩不转的,你把它当普通的M4玩,如果不用他的DSP, ...
板子是很牛叉,不过芯片很贵的说,而且是BGA封装,搞起来了后面自己开板还是个麻烦事,恩,有时间了还是要好好玩玩的,你的资料先收下了,感激不尽啊
另外,我知道LM3S9B96的I2S其实质量不咋地,jitter在3个ns规格,STM32F4的话,jitter标称为<±200ps,不知道NXP的I2S质量怎样,数据手册里面好像灭有找到 从机模式啊,大哥,外部提供BCK/WS,同步传输哪有JITTER? 不错。{:smile:}{:smile:}{:smile:} mowin 发表于 2013-6-3 19:40 static/image/common/back.gif
从机模式啊,大哥,外部提供BCK/WS,同步传输哪有JITTER?
哦哦,搞STM32时间长了,把这茬给忘记了,面壁去{:sweat:} mowin 发表于 2013-6-3 11:55 static/image/common/back.gif
我在玩LPC1768。刚弄好程序框架,已经可以出声,DAC暂时用伟良的TDA1541,如果你有兴趣,我可以把资料整 ...
去TB查了下1541,竟然要30块一片,吓到了。。 mowin 发表于 2013-6-3 19:40 static/image/common/back.gif
从机模式啊,大哥,外部提供BCK/WS,同步传输哪有JITTER?
请教一下,NXP的I2S接口中TX_SCK,TX_WS,TX_SDA,TX_MCLK哪些是必须要接的,我只需要放音就行了,目前接的是欧胜的WM8750 SNOOKER 发表于 2013-6-3 23:59 static/image/common/back.gif
请教一下,NXP的I2S接口中TX_SCK,TX_WS,TX_SDA,TX_MCLK哪些是必须要接的,我只需要放音就行了,目前接的 ...
我看了规格书,对于WM8750只放音,TX_BCK/WS/SDA/MCLK都是必须的。
有一点,BCK/WS/SDA无论神马DAC都是必须的。如果有数字滤波器,就需要MCLK。
多比特R-2R DAC像TDA1541/TDA1543/AD1865/PCM63/PCM1702/PCM1704这些,不加数字滤波器时,没有MCLK也能工作。玩法很多,包括很多人都推崇的non-oversampling + unfiltered,比较有趣,适合折腾用。现代dac通常是sigma-delta调制器,而且通常内置数字滤波器,MCLK是必须的。 本帖最后由 mowin 于 2013-6-4 09:36 编辑
这是老外折腾DAC的一篇文档,供各位参考,不一定直接能用上,但是方法和一些理念可以借鉴
这是网站http://tech.juaneda.com/en/projects/digitaldecoder.html
编辑:增加图片 mowin 发表于 2013-6-4 09:21 static/image/common/back.gif
我看了规格书,对于WM8750只放音,TX_BCK/WS/SDA/MCLK都是必须的。
有一点,BCK/WS/SDA无论神马DAC都是 ...
多谢热心大侠指点{:handshake:} 。 mowin 发表于 2013-6-4 09:24 static/image/common/back.gif
这是老外折腾DAC的一篇文档,供各位参考,不一定直接能用上,但是方法和一些理念可以借鉴
这是网站http:// ...
他妹的,这老外太能折腾了!! 我觉得他的无负反馈I/V变换电路很不错,准备效仿。 mowin 发表于 2013-6-5 10:08 static/image/common/back.gif
我觉得他的无负反馈I/V变换电路很不错,准备效仿。
在哪儿??链接里面我怎么没有看到呢?? dudududu 发表于 2013-6-5 12:59 static/image/common/back.gif
在哪儿??链接里面我怎么没有看到呢??
PDF文件里面最后。 本帖最后由 xieyudi 于 2013-6-12 09:41 编辑
找"data"字段, 后面跟了32位小端整数代表data chunk的长度, 从那之后就是PCM数据了.
我已经用STM32F103实现了无缝播放, 和foobar2000一样.
页:
[1]