搜索
bottom↓
回复: 22

WAV 播放器的终极可和传统的CD拼吗?

[复制链接]

出0入0汤圆

发表于 2010-7-18 15:31:25 | 显示全部楼层 |阅读模式
玩音响有一定的时间了,在20年前狂热于DIY,后来发现自己辛苦的杰作还不如在二手市场的廉价日货。没多久又发现日货水准与欧美的产品差距极大。在最近几年,都是沉迷在欧美的器材上。多年的经历,感觉玩音响不仅是玩技术上的差异,更多时候感觉到它也是另类的艺术。

你在选择器材,同时器材也在挑你。

几年前就有制作WAV播放器的想法。当时出发点很简单,我以为WAV可做到的无损记录,理所当然就以为WAV是可媲美CD的,现在SD卡的性价比越来越高,32G的也仅7百多,要是用他来实现CD一样音质的WAV应该是不太难的事。
但现实并不能如愿,先是在i-pot glass 用EAC抓轨播放。发现中高频发干,缺乏到人声的感情味,与CD的音质量无法相提并论。后来又试了N多品牌MP3,4,结果也如此。
实在不甘心,我一直以为可能是商品化的产品用料的关系,音质可能会打折扣。因此在前些日子重操旧业,DIY了一台WAV播放器。满以为应该可有很大的改善。但冷静试听了数天,最终认定还是不如愿,偶然某天竟发现我的老电脑 IBM A31P 播放WAV是最出色,
音色最接近原CD。这发现让人很郁闷,于是下狠心要弄个究竟。几经周折好像有了点眉目:
1.        理论上来说,如果WAV的数据正确性是应该比CD高,因为CD是音轨数据是没有校验机制的,错了就错了,一直往前走,应该说WAV的音质更高于普通CD呀,于是乎,我又捣鼓起来,用同样的解码器,同样的耳放和耳机,但效果就是逊色于CD。问题肯定就是出数字输出上。
2.        前些天,在查阅CD的原理的时候,有资料表明,CD发明没有加入校验码,是因为当时为了节省空间。把它给去掉了,果真如此吗?如果为真CD经历了那么多年
这落伍的做法应该早就该升级了呀,难到正如网上所传,是为了知识产权的原因吗?
3.        为什么A31P的音质好像略有胜出呢?

出0入0汤圆

 楼主| 发表于 2010-7-18 15:31:43 | 显示全部楼层
为了个究竟,通过DIY WAV 播放器后,因为数据的读取和传输过程均是自己写的代码,在反复的调试过程中,终有所悟:
     为了保证DAC 的正确转换,除了系统始终要稳定外,数据同步也是同样的重要,看到网上不少作品都用了有温补的有源晶体作为时钟源,目的就是为了解决时钟抖动带来的失真。但仅时钟稳定就行了吗?问题好象没有这么简单。CPU每次都均只读512字节。在0~512字节中数据处里中,数据流是稳定的,但在块装载过程中,肯定会出现数据不同步,重者断音,轻者出现转换相移错位。但这在CD上不会出现,因为CD每个BIT都是同等时间读取的,没有等待的时序出现。如WAV工作在44.1K,也就意味着每秒钟会出现2756次的数据抖动,如果你的播放器有操作系统,操作系统的TICK,约为500次的切换,还有键盘检测,
显示驱动等等因素,数据干扰综合后越会出现0.5~8KHZ的时钟干撓源,这就似乎可解释为什么不同的配置和系统WAV播放效果不一的原因了.因为干扰导致波形相移的存在,会造成高频的波形失真,特别表现在人声的齿音发粗,易和乐器高频混淆,吐音的节奏感减弱,表现细节抖降.感情_色彩不明显.如果你用他来听邓丽君的的演唱,那爹声爹气的感觉没法表现出来,更别说那气流节奏性的表现了,这也可用来解释为何功能越多(MP4)用来播WAV音质量更差的原因了. 上面提到用A31P来播放有很好的表现,估计是他将50多M的数据一口气读到内存,从而保证数据相对的流畅性而得来的吧.

出0入0汤圆

 楼主| 发表于 2010-7-18 15:31:57 | 显示全部楼层
谈到这里,好象CD没有数据的校验,并不是他的先天不足,而是为了音质作出的取舍吧,如果有了数据的校验,那如何能保证数据的准确同步呢?所以天价的转盘和抗谐振系统是必须的.也只有这样才可能达到真正的HI-END! 科技一日千里的今天,设计者并没有在CD的数据格式上花太多的时间,而是如何用天价的技术去改善读取数据的准确性,这并不是产业链造成的也不是知识产权的原因.
     有朋友提及,将50M的数据一次性读到内存,这不是一了百了吗?听起来很有道理,但细想发现有问题,50M的数据读取最快也要10多秒呀,如过听半个小时的交响乐怎么办?用这样的机器不爽吧!
     得到这似乎的发现后,我想唯一的方法是用双核读写,一核传数据,另一核读数据,用双口RAM 进性数据乒乓操作,这谨是幻想,当然没有实践.
     以上观点仅是个人所见,可能纯属谬论,欢迎大家一起探讨.
头像被屏蔽

出0入0汤圆

发表于 2010-7-18 16:40:01 | 显示全部楼层
楼主看来做了大量的尝试。 无论是否正确,COOL !

楼主只是提到了数据的读入与处理的连贯性,这是WAV播放的最基础。 基础解决了,DA转换就显得更为重要 ....



很老款的A31P的DA转换估计用料是比较足的,正如当初的CREATIVE声卡。

出0入0汤圆

发表于 2010-7-18 16:57:29 | 显示全部楼层
一楼试过“双缓冲区+DMA”方法吗?

出0入618汤圆

发表于 2010-7-18 17:25:17 | 显示全部楼层
正确实现的WAV播放器不会数据抖动,LZ的认识是想当然的。
1.大部分单片机的I2S接口本身是双缓冲的,即使是96KHz/32-bit的数据流,也有1.3us的装填数据时间,只要在1.3us内往I2S送入数据就不会“断流”。
2.大部分播放器都会使用DMA往I2S送数据,不用CPU干预,DMA只需要等待内存总线控制权,这个时间一般不会超过100ns。
3.部分单片机支持DMA双缓冲机制,这是第二层的双缓冲保障,一个4KB缓冲区能提供5.3ms的96KHz/32-bit数据流,CPU只需要在5.3ms内完成4KB读盘操作即可保证数据不间断输出,这对大部分带I2S接口的单片机来说是很轻松的。
4.CD也不是“每个BIT都是同等时间读取的,没有等待的时序出现”的,CD也有CIRC校验、副码等“杂质”夹在数据中,不是读什么输出什么的,数据也要经过处理。

出0入0汤圆

 楼主| 发表于 2010-7-18 18:08:02 | 显示全部楼层
哈哈,果然咕唧霖是牛人。
其实上面的观点,我是想挑起一个话题,抛砖引玉。
以上的观点是我一些死党茶余饭后的话题。甚至他还抓了
一些市面上的MP3的波放WAV的波型和我对质。
不过的真的不少山寨板的机子,放WAV有问题,引起问题的因素
真的很多,我们也真的不好解释为何同样的解码器同样的耳放
为何有差距。大部分有I2S单片机都有DMA数据传送机制,但如果
有了操作系统和复杂的GUI,1~2微秒的断流是存在的,可能现在作的
播放器架构不好,用的是STM32来做的,实用性还真有点问题,首先USB
的读写超慢(当然这不会影响音色),由于没用硬字库,在处理显示和数据传输间
还真的很容易断流.比如响应键盘,响应时间中断处理.还真的有影响.
对STM32 硬件还不太了解,仍在摸索中...

出0入0汤圆

 楼主| 发表于 2010-7-18 18:15:22 | 显示全部楼层
上面的一些观点很多是引用我的老板,是个港版的发烧友,他的谬论很多.
但也不完全都是谬论,对一个外行人,一个搞金融的人是不容易.但他的说法还真的
让不少人信服.

出0入0汤圆

发表于 2010-7-18 18:40:48 | 显示全部楼层
目前的PC性能和操作系统,数据断流的可能性不大,毕竟有DMA,有缓冲,CPU性能也足够。当然,负荷极重时还是有可能,尤其USB接口的声卡,USB接口实时性天然不佳,倒霉时断流是可能的。这个我还真碰到过,我这有个龙芯盒子当上网代理服务器,本身没声卡,没事干接了个USB声卡顺便放放歌听,当同时进行高负荷尤其硬盘相关操作时,声卡声音明显会出现嘶嘶的声音,这个应该就是数据断流引起的,同样的声卡接在我的PC上是没有这个现象的,估计是龙芯盒子性能不够,硬件设计尤其USB部分也烂引起的(这不是工艺问题,因为盒子的板子做工很好,用了极多的固体钽电容,铝电解都没有,这属于先天不足,再好的周边元件和生产工艺也没用)。
如果是stm32这种芯片,处理不好断流可能性就更大了,不过这个跟你播放CD还是wav没啥关系,你用stm32放cd数据流,会面对同样问题。

出0入0汤圆

发表于 2010-7-18 19:18:11 | 显示全部楼层
回复【6楼】kmingroy  
哈哈,果然咕唧霖是牛人。
其实上面的观点,我是想挑起一个话题,抛砖引玉。
以上的观点是我一些死党茶余饭后的话题。甚至他还抓了
一些市面上的mp3的波放wav的波型和我对质。
不过的真的不少山寨板的机子,放wav有问题,引起问题的因素
真的很多,我们也真的不好解释为何同样的解码器同样的耳放
为何有差距。大部分有i2s单片机都有dma数据传送机制,但如果
有了操作系统和复杂的gui,1~2微秒的断流是存在的,可能现在作的
播放器架构不好,用的是stm32来做的,实用性还真有点问题,首先usb
的读写超慢(当然这不会影响音色),由于没用硬字库,在处理显示和数据传输间
还真的很容易断流.比如响应键盘,响应时间中断处理.还真的有影响.
对stm32 硬件还不太了解,仍在摸索中...


大体上都给你说对了~~~~stm32我还没用,不过据做NET RADIO的朋友说,的确不合适。

-----------------------------------------------------------------------

出0入0汤圆

发表于 2010-7-18 20:12:52 | 显示全部楼层
2. 前些天,在查阅CD的原理的时候,有资料表明,CD发明没有加入校验码,是因为当时为了节省空间。把它给去掉了,果真如此吗?如果为真CD经历了那么多年
这落伍的做法应该早就该升级了呀,难到正如网上所传,是为了知识产权的原因吗?
--------------------------------------------------------------------------------------
專業人員路過,CD-DA確實是不校驗的。但讀取CD時不會輕易出錯,因爲CD-DA上的數據都是經過8-14編碼的,讀到了誤碼的話,CD機會重讀那一段。但是不排除剛好誤到了正確的碼。
確實是知識產權的問題,但現在應該應經成爲了標準的問題了:大家都按Sony-Philips的標準做,你如果按自己的標準,就賣不出去。

出0入618汤圆

发表于 2010-7-19 00:30:06 | 显示全部楼层
CD-DA有2层纠错机制:
第一层是EFM,主要目的是为了循迹伺服,不具备纠错能力。
第二层是CIRC,有校验和纠错功能,但是纠错能力比较差。

大部分台式CD机不具备缓冲(指纯CD机,很多VCD和DVD有缓冲),读到误码而CIRC无法纠正的话也不会去重读,只会直接输出最好的纠错结果。车载和便携CD则带缓冲,出错会重读。

出0入618汤圆

发表于 2010-7-19 00:59:07 | 显示全部楼层
回复【6楼】kmingroy
大部分有I2S单片机都有DMA数据传送机制,但如果
有了操作系统和复杂的GUI,1~2微秒的断流是存在的,可能现在作的
播放器架构不好,用的是STM32来做的,实用性还真有点问题,首先USB
的读写超慢(当然这不会影响音色),由于没用硬字库,在处理显示和数据传输间
还真的很容易断流.比如响应键盘,响应时间中断处理.还真的有影响.
对STM32 硬件还不太了解,仍在摸索中...
-----------------------------------------------------------------------

设计良好的代码能够很好平衡GUI、键盘、读卡等任务的优先级。
论坛的网络收音机就是STM32做音频应用的成功范例,SDIO读卡、SPI Flash读字库和GUI资源、键盘和触摸屏、网络、USART控制台、软解MP3,安排得井井有条,即使在播放MP3过程中操作GUI也不会有I2S断流的情况出现,GUI刷屏速度也不会有大幅度下降。

当然,要做到这些不容易,软硬件都做了不少特殊处理,费了N多心血才换来的。实际上STM32本身做音频应用还是比较弱的,不建议使用。
列举几个收音机中遇到的绊脚石:
1.STM32F103系列只有一个PLL,在保留USB功能的前提下,I2S无法准确输出44.1k/48k采样率。STM32F107系列有改进,但仍不算完美。
2.两个I2S均有BUG。
3.FSMC也有BUG,DMA操作FSMC会有问题(据说新版REV Y的芯片解决了这两个BUG)。
4.DMA没有双缓冲功能,必须在16个I2S时钟的时间内响应中断并完成DMA重置(如果代码写得不好,来不及响应,就断流了)。

出0入0汤圆

发表于 2010-7-19 02:07:18 | 显示全部楼层
回复【12楼】gzhuli  咕唧霖
设计良好的代码能够很好平衡gui、键盘、读卡等任务的优先级。
论坛的网络收音机就是stm32做音频应用的成功范例,sdio读卡、spi flash读字库和gui资源、键盘和触摸屏、网络、usart控制台、软解mp3,安排得井井有条,......
-----------------------------------------------------------------------
请问目前能最好的输出i2s音频流的芯片是什么呢,可以是单片机或者专用芯片。
我想要的方案,需要达成的任务很简单,就是从网络获取数据,并准确的输出i2s音频流。
使用轻量的实时操作系统,比如RTT。

出0入618汤圆

发表于 2010-7-19 02:44:35 | 显示全部楼层
回复【13楼】x9fish
-----------------------------------------------------------------------

很难说最好,各有优点和缺点。
我想说AVR32UC3A,但是成本高而且有价无市,不敢推荐。
如果不带网络的单片机,选择就多了,不要求USB的话直接用11.2896MHz或者12.288MHz的晶振就行了,STM32也能胜任。

出0入0汤圆

 楼主| 发表于 2010-7-19 09:11:46 | 显示全部楼层
呵呵,謝謝高人點明, 這可是wav play fans 的福呀.gzhuli 咕唧霖 提到的問題,我都給碰上了.
謝謝!我再試下, 如果有進展,會和大家分享.

出0入0汤圆

发表于 2010-7-19 09:21:38 | 显示全部楼层
兄弟,有缓冲了啊!没缓冲MP3都会卡。不要说WAV了。

出0入0汤圆

发表于 2010-7-19 10:51:01 | 显示全部楼层
对于STM32能不能在硬件上做成双晶振呢?平时操作和音乐用11.2896MHz或者12.288MHz,当接入USB时候自动切换到适合USB的晶振?

出0入0汤圆

发表于 2010-7-19 21:12:52 | 显示全部楼层
我怎么感觉我用STM32F103RB+TDA1305做的烂WAV播放器比家里那台老CD SONY CDP-950声音还甜很多。
现在cd机摆一边去了,换碟太麻烦了,声音又好不到哪去。用这个WAV播放器搞张8GB的SD卡就能放个一百五十多首。

IIS时钟采用ATMEGA88生成,ATMEGA88的晶振用有源的,独立于STM32,STM32 的 SPI 从机 RX 中断优先级置为所有开启的中断最高级,中断里喂数据给TDA1305。这样STM32可以超频到比较高的频率),而不会引起频率抖动对IIS的影响.开了4个1KB的 BUFFER,跑64MHZ,从不断流。最高跑到过144MHZ(理论值,解码FLAC可能需要这么高的速度,不过这个芯片RAM太小,得换芯片),对音质的影响分辨不出来。

文件系统FATFS0.07e。Unicode转GBK对照表是放在SD卡中的。GBK字库也是放在SD卡中的。代码体积比较少,20KB左右,当然UI界面还比较简单.自娱自乐,能播放出来好声音就够了,界面太花哨自己反而不喜欢.

出235入235汤圆

发表于 2010-7-27 13:10:38 | 显示全部楼层
不错,对我来说就是一种鼓励呀!

出0入0汤圆

发表于 2010-8-3 15:54:19 | 显示全部楼层
make ,up

出0入0汤圆

发表于 2010-8-21 13:12:48 | 显示全部楼层
make
!!!!

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-29 11:45

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

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