CoolBird007 发表于 2017-12-1 20:13:40

HDCD的真相

本帖最后由 CoolBird007 于 2017-12-1 20:43 编辑

HDCD的真相

进入主题之前,我们先来看一款好玩的软件。
007电子密写水 2.0
你是否见过这样的事:
看起来还是好好的一幅画,用水一洗,立即显出原先没有的字来。
这就是密写水了。
这个软件就是电脑时代的密写药水,你可以把各种文件隐藏到BMP图片中,而且图片大小不变,浏览图片也看不出变化。
起到一定的保密作用。这也是本软件的最大特色。
当然,也可以把隐藏入图片的文件提取出来了。

进入主题:

本人DIY数播,只支持44.1K 16Bit的WAV。
下载歌曲的时候会挑一些支持的,如DTS就播不了。
见到很多HDCD也不会去下载来听,因为网上说的HDCD嘛,它是20Bit,88.2K,虽然说普通CD可以播,抓轨出来也是44.1K,16Bit的。
老觉得这有损音质。当然也见到有24位的。
而刚好我用的DAC,PCM1732,它支持HDCD。怎么让它播HDCD?一想到24位就不想动手。因为STM32要把它当成32位来传输。。几经放弃。
直到今天,买了两盘HDCD,主要是看选曲还喜欢,同时拿回来研究一下怎么播放。

WMP9一播显示HDCD,挻高兴的。
接下来,有几个疑问。
1:解码HDCD是不是要光驱和解码器同时支持,还是只需光驱支持,或者只需解码器支持。为什么这样想呢?
普通CD是按44.1K,16位来传数据的,那么播放HDCD是不是要用88.2K来播,传24位,这样的话肯定要光驱支持嘛。
如果,只需要解码器支持,那么光驱传给解码器的数据就不是88.2K了,因为它是单向的。
然后,看PCM1732的第9脚,叫HDCD指示灯,而不是叫控制口。就是说,它检测到HDCD信号时会亮。
不是主控芯片的事,开始我以为是主控读光盘读取网上说的什么隐藏数据,再传给DAC。
结果并不是。要不然PCM1732何需指示灯。主控点亮不就完了。


那么我就猜测,HDCD,只不过是把数据低位(基本不可闻的那个范围),通过某种算法去填补可闻范围内的数据。
实际上,传给解码器的还是44.1K,16位,而后由支持HDCD的解码器去还原出声。

然后我就动手去测试,把HDCD用FOOBAR转换成44.1K,16位的WAV,放在我的播放器里播放,监视PCM1732第9脚电压变化。
结果,让我非常高兴。普通的CD它是低电平,当播放的是HDCD的WAV时,它变成高电平。
听感上也跟不支持HDCD的软件上有区别,这个在电脑上用两款软件播同一张CD可以听出。那怕同样的WM9播同一首歌的CD和WAV,都不一样。解不解码的区别。

那么网上出现的24位HDCD音源是怎么回事呢?
如果各位抓过轨都知道,可以在这个过程中改变BIT数和采样率的。这样出来的WAV反而破坏了原来HDCD所需要解码还原的数据。就不多说了。

怎么通过低位来保存数据,注意,这个数据可能是波形数据,也可能是频谱均衡曲线,类似单反相机加载的各种曲线。这个我没兴趣去研究了。

跟我发的软件是一个原理的。

不写总结了,谢谢围观!

weichao4808335 发表于 2017-12-1 21:02:29

阿莫不是给你下结论了吗?哈哈

CoolBird007 发表于 2017-12-1 21:06:43

weichao4808335 发表于 2017-12-1 21:02
阿莫不是给你下结论了吗?哈哈

有本事你打24个哈字。

gzhuli 发表于 2017-12-1 22:26:03

猜啥呢,原理都是公开的,就不会找资料看一下?
HDCD抓音轨软件不是单纯将16位数据补成24位,而是和DAC一样,识别到HDCD数据流后用算法还原出20位数据,所以抓下来的24位WAV虽然不会被DAC识别成HDCD,但音质和DAC本身解码是没太大区别的。

LQS1200 发表于 2017-12-1 22:36:22

我比较好奇,用不同的光驱抓鬼,出来的二进制会不会有差别,迟点有空实验下

CoolBird007 发表于 2017-12-1 22:54:20

gzhuli 发表于 2017-12-1 22:26
猜啥呢,原理都是公开的,就不会找资料看一下?
HDCD抓音轨软件不是单纯将16位数据补成24位,而是和DAC一样 ...

那么请问用什么软件可以抓出20BIT,88.2K的WAV ?不要转换啊。也不要重采样。

gzhuli 发表于 2017-12-1 23:15:41

CoolBird007 发表于 2017-12-1 22:54
那么请问用什么软件可以抓出20BIT,88.2K的WAV ?不要转换啊。也不要重采样。 ...
不转换哪来的20位,HDCD就是靠加权重采样才能还原出20位的,不转换抓出来就是16位44.1k。

CoolBird007 发表于 2017-12-1 23:19:19

gzhuli 发表于 2017-12-1 23:15
不转换哪来的20位,HDCD就是靠加权重采样才能还原出20位的,不转换抓出来就是16位44.1k。 ...

学习了,你们不要忘了我是初烧,很多问题都不懂的。。

gzhuli 发表于 2017-12-2 14:27:59

gamethink 发表于 2017-12-2 12:02
十多年前,我爸就买了一台马兰士的HDCD播放器,当时支持HDCD的碟,放进去播放就有个灯会亮
后来又流行SACD ...

HDCD在普通CD机播放是失真的,只是对音质追求不高的话还能听而已,过渡产品,被淘汰很正常。
SACD直接升级到DVD介质DSD编码,是切切实实的容量提升。

my12doom 发表于 2017-12-2 17:11:45

ffmpeg中的HDCD解码器
github.com/FFmpeg/FFmpeg/blob/master/libavfilter/af_hdcd.c

解码器注释里的2个文章解释一些技术细节
audiomisc.co.uk/HFN/HDCD/Enigma.html
audiomisc.co.uk/HFN/HDCD/Examined.html

另一个结合了上面的解码器和foobar的解码器的代码libhdcd
github.com/bp0/libhdcd

逆向Windows Media Player的解码器(现在HDCD的专利什么的都在微软手里)
forum.doom9.org/showthread.php?t=129136


主要技术,是在大信号处用非线性映射削峰,播放器/DAC处查表还原,连续小信号提高录音增益提高信噪比,DAC处衰减回去保持音量正确
他并没广告中那种20bit疗效,他并没提高分辨率,仍然是16bit,但是提高了动态范围

CoolBird007 发表于 2017-12-2 18:26:20

my12doom 发表于 2017-12-2 17:11
ffmpeg中的HDCD解码器
github.com/FFmpeg/FFmpeg/blob/master/libavfilter/af_hdcd.c



真正的大神出现了。。。之前,我怎么查都不知道,所以才动手试试。当然,接解HDCD也才一天嘛。

CoolBird007 发表于 2017-12-2 19:14:00

看完上面的贴子,对你的总结有些疑问。
R2R结构的DAC动态是由位数决定的。
而Delta-sigma类的DAC,像如今24位或32位,动态都达不到所称位数的动态。
所以你说没有效果,是指由DAC内部决定了。
这样说吧,号称24位的DAC,无论播16位还是20位,它都是按24位来处理的。这个不用怀疑。
那么HDCD它又是实实在在的影响了听感。
但是给它的数据却是16位的。解码器转成20位,何不直接交给DAC处理成24位?是不是多此一举?

所以,排除HDCD解码器做音效处理的可能性的话,结果就只有一个,它确实是把16位还原成20位,再输出到DAC处理。所以,同样的16位,出来24位,听感却完全不同的原因。

允许我每次跟贴都说明一下,我是小白。一切都是猜的。错了望各位不吝指正。{:handshake:}

页: [1]
查看完整版本: HDCD的真相