赞助论坛
  • 11567阅读
  • 0回复

关于CD-TEXT的读取---转载! [复制链接]

楼层直达
humu200  
发帖
82
精华
0
金币
467
威望
5
贡献
2
好评
2
注册
2008-01-05
楼主    humu200 发表于: 2008-07-24 23:31:25 
前言: CD-TEXT是附加在CD中的歌曲信息。在早前的CD版本中没有记录有关CD的CD-TEXT信息,且相关播放器也不支持该功能。而随着CD工业的曰益发展,消费者也提出了不同的要求,他们希望得知CD的歌曲名字,或者歌手名,或者是作曲家等等,诸如跟Mp3歌曲中的TOC信息一样,在此情况下,受RIAJ(曰本唱片协会)的委托进行研究,开发出CD-TEXT,制定了一系列的制作,存储,读取的规范。一 基本概念: CD-TEXT记录着CD光盘中所有歌曲的信息,包括曲名,艺术家名,Album,出版商,版权,歌曲类型,出版年月等信息。为了降低成本,采用于TOC同样的记录方式,其最大容量大致占用整张CD的1/100,即设定在6500字左右,而一般的CD-TEXT附加信息大约为800字左右,故一张光盘可容纳8个国家版本的信息。 光盘中存储数据的最小单位是帧,每帧中都有一个控制字节(也叫子码),由8位组成,一个扇区有98帧组成,也就是有98个控制字节,该组字节中每个位组成一个通道,总共分为P,Q,R,S,T,U,V,W八个,每个通道长度98位。其中后六个通道存储的就是我们所要得到的CD-TEXT信息。 所有CD-TEXT信息都被记录在TEXT群中,TEXT群最多由8个Block构成,Block中的一部分用文字code固定下来,若存储器不够时,建议block按照番号从小到大的顺序对语言进行分配。多个packet组成一个block,而一个packet由4个pack构成,下面列表说明它们之间的关系: 而一个packet的信息刚好就是一个扇区中后六个通道的数据信息。每个通道的前两位为同步位,信息字节总数=(98-2)*6(bit)=576(bit)= 72字节,每个packet有4个pack,故每个pack长度为72/4=18字节,其中有两个字节为CRC,对我们有用的只有前面16字节,所以在读取一个扇区的CD-TEXT信息时,我们读取得到的数据为4个pack(除去CRC字节),再加上4个pack中的CRC经过CXD3068Q内部处理得到一标志,作为总的CRC放在要读取的数组开头,该字节用来标志其当前packet中所有pack的CD-TEXT是否正确。因此总的数据量为1+4*16=65字节。下面为从R到W通道组成的packet示意图: 通道号 帧序号 R S T U V W 0 同步帧位(2字节) 2帧 1 2 D1 3 16字节 D2,D3,D3及12字节Data 25 2字节CRC 2字节 26 27 同上 Pack2(18字节) 49 96帧数据 50 51 同上 Pack3(18字节) 73 74 75 同上 Pack4(18字节) 97 下面图示各通道数据如何组成我们所需要读取的数据结构: 65字节数据 1字节 16字节 Pack 1帧 在CD-TEXT读取过程中,其最小的数据结构为pack,它是由4个字节的控制码,12个字节的数据区和2个字节的CRC码。控制码主要标志数据区存放的是什么数据以及相关类值;而数据区存放的是CD-TEXT信息,,它通过4字节的控制码可以知道它是曲名还是艺术名等等。那么如何确定呢?下面我们分析4个控制码所表示的内在含义: 1) ID1字节:用来标志后面数据区存放的是什么类型的数据。 当ID1 = 80h,Data区数据存放的是歌曲名; 当ID1 = 81h,Data区数据存放的是演奏者; 当ID1 = 82h,Data区数据存放的是作词者; 当ID1 = 83h,Data区数据存放的是作曲者; 当ID1 = 84h,Data区数据存放的是出版者; 当ID1 = 85h,Data区数据存放的是Album; 2) ID2字节:标志后面数据的Track序号值,大小从1到99,当一个pack中的数据信息包含多个track的信息时,该字节数据通常表示的是pack中的第一个track信息的track值。 3) ID3字节:存放当前数据所在的pack序号; 4) ID4字节:当TEXT较长时,需要存放在多个pack中时,这时需要记录当前pack 中的数据在整个TEXT中的偏移位置,并存放在该字节中的后4位;而当所在的位置超过15,都将其值设置为0x0f,否则设置为对应值。前4位表示的是该信息为哪个国家版本的。 两个TEXT信息之间以”\0”为结束标志。在同一个pack数据包中,各个TEXT信息是循序存放的,即当前存放的是第一个track曲名信息时,后一个存放的一定是第二个track的曲名信息,但若不在同一个pack中,可能不是,如果不是的话,在它的ID2,ID3,ID4控制字节中一定可以知道它是属于那一个track及相关信息。