|
楼主 |
发表于 2009-8-1 14:07:04
|
显示全部楼层
原帖由 小白 于 2009-8-1 13:06 发表
另,楼主可否推测或描述一下,当我们用数码录音机(比如Sony D50)以数字方式录制一台CD机的播放,把来自CD机的实况数据流(data stream)写成一个wav文件时,具体的过程是怎么样的. 我觉得这个过程和你一楼描述的电脑抓轨的 ...
是不同的。我比较了解数据访问的工作方式,但是并不熟悉Sony D50的工作方式,这只能按照常理瞎推测一下,Sony一向是以怪物闻名的,它是不是这样按常理做,还请比较熟悉的大侠出来指导一下吧。
如果是用一台大家熟悉的PC,而不是专用体系结构的D50来同步录取音轨,用带SPDIF输入的声卡接转盘的输出,这样看会更方便比较转盘输出和高速光驱读盘的差异。如果输入信号是SPDIF同步信号而不是光驱DMA数据块的话,我们就不能用DMA等着收获内存里现成拷贝好的数据块了,而是要自己不停地去SPDIF口上守着,来一点数据就记录一点下来。这种工作方式在PC操作系统上叫做“中断模式”,是由通讯口发起的,在这里就是SPDIF接收器。SPDIF收到一个PCM word,就会立即举手跟CPU说:“中断!中断!快把我收到的数据拿走,否则等下一个PCM word过来我的寄存器就折腾不过来了!”。CPU会停下手上的活,调用以前自告奋勇号称(注册)处理这个中断号的进程,就是SPDIF(声卡)驱动程序去处理这个中断。大家会说这不是烦死人,每秒要发44.1k次中断,是的,这是为什么今天会有DMA这种东西,没有DMA之前,连磁盘也是这样读取的。那么这些中断读到的一个个16bit的PCM word会不会被一个一个地实时写入磁盘呢?不会的,否则磁盘没几天就坏了,它受不了这样折腾的。录音软件会把这些一个个的word在内存里面积攒起来,接下来的事情就跟1楼说的差不多了,攒够了一大块再请求硬盘DMA。
上面是PC怎么做SPDIF实时录音,那么D50会怎么做呢?不知道,知道了Sony饶不了我。但是可以肯定的是,它也用类似中断的方式实时读取SPDIF信号,也用内存缓存的方式延缓Flash的写入。
为什么我没看过Sony的设计文档就这么肯定呢?因为Flash memory的特性。Flash memory的写入寿命是很非常有限的,比硬盘差得多,每个单元只能承受有限次的擦写。同时Flash也是用文件系统的方式组织管理的,读写是以“块”而不是“bit“或者“byte”为单位进行的,就是说,写一个byte就是写一个block,这个byte所在的整个block都要被擦写。如果你把SPDIF一个一个byte地往Flash上面写,没几天Flash就玩完了,它受不了的。Flash文件系统是一个非常赚钱的买卖,主要原因就是因为Flash的擦写特性太差,所以Flash文件系统的组织和缓存就显得尤其重要,目的就是尽可能减少对Flash的写盘次数。另外,为了充分利用Flash上面每个存储单元的擦写寿命,Flash驱动会采用复杂的算法把文件尽量乱七八糟地分散在整个Flash上的各个地方,每次读写时还可能会换地方,比如从这里读出来的,写回去的时候就换地方了。这样才能避免有的存储单元都快不行了,其它单元还是崭新的。但是这样做的结果是,文件的数据块在Flash上的位置是很混乱,很随机,很不确定的。
另外还有一点,就是Flash上的wav文件,最终成为硬盘上的wav文件,还有经历一次拷贝。这次拷贝跟1楼的抓轨非常相似,wav会一块一块地被读到内存,然后一批一批地被写到硬盘,区别只是这次的主控软件由抓轨软件换成了Windows的File Manager。
所以如果是实时播放,转盘SPDIF与光驱到声卡是不同的,它们的时钟来源不同,而这个时钟会一路蜿蜒锁定到DA时钟,Jitter这个寄生虫也可能一路跟过去。如果是录制,那么SPDIF时钟在一个PCM word被写进内存的时候就已经丢弃了,在等待后续写入Flash或硬盘的时候,内存里的那些PCM音轨数据是SPDIF同步读来的,还是光驱block access来的,已经没有区别了。没有了时钟,Jitter也就没有地方附生了,所以在写入内存的那一刻,转盘Jitter已经死了。 |
|