2.4 音频CD
    CD是目前正在被广泛使用的一种高效信息存储系统,它从最初起步到逐步成熟大约经历了十年左右的时间,期间涌现出来的行业标准和技术规范非常多,而影响最大的当数由Philips和Sony公司共同推出的CD音频(CD-Audio)和CD数字音频(CD-DA)规范,这就是人们经常提到的红皮书,它被包含在IEC 908标准中。
音频CD有足够的能力来提供高保真的声音,它的采样频率为44.1kHz,并且每个采样点都使用16 bit的量化级,这样CD播放器在输出音频数据时的速率将高达1.4 Mbps[7]。除了最重要的音频数据之外,为了进行必要的纠错、同步或者调制,还需要在CD上存储其它一些额外数据,因此存储在光盘上的数据通常是原来的3倍左右,也就是说信道比特率(从CD中读出数据的速率)可能会达到4.3128 Mbps。
精密的光学设计和高效的数据编码,是CD具有很高存储密度的原因所在,而要想在Linux应用程序中对音频CD进行控制,关键是要理解音频数据在光盘上的编码方法和存储形式。音频CD采用EFM调制来对要存储的数据进行编码,虽然在调制过程中会产生需要额外存储的信道比特,但总的效果却可以使音频CD的容量提高25%左右。帧(frame)是在音频CD上可以读取的最小单位,它详细规定了音频数据、校验位、同步位、子码等是如何在光盘上存储的,如图1所示:
  图1 CD的帧格式
音频CD上的每帧数据中都包含一个8 bit的子码,其中包含的信息有音轨的起止位置、音轨数目、光盘时钟、索引位置等[8],如果能够在程序中充分地利用它们,无疑将会更好地控制音频CD的播放。

2.5 设备控制之ioctl系统调用
    Linux内核将所有的硬件设备都表示成设备文件,并且提供与操作磁盘文件类似的方法来操作硬件设备[9],应用程序如果想对CD驱动器进行控制,最直接的办法是用open()、read()、close()等系统调用来操作/dev/cdrom这一设备文件。例如,下面的命令可以读取CD上的原始数据流,并将其在终端上显示出来:
cat /dev/cdrom;
在Linux上进行CD编程的原理其实非常简单,关键是要借助系统调用ioctl()[10-14]来对设备文件/dev/cdrom进行各种控制。对控制CD的ioctl命令的一般参数如下表1所示:
表1 控制CD的ioctl命令
名称    参数    作用
CDROMEJECT    无    退出驱动器中的光盘
CDROMEJECT_SW    0或1    控制是否自动退出光盘
CDROMSTART    无    启动CD驱动器的马达
CDROMPLAYTRKIND    Struct cdrom_ti    播放指定的音轨
CDROMPLAYMSF    Struct cdrom_msf    播放指定的MSF
CDROMSTOP    无    停止播放
CDROMPAUSE    无    暂停播放
CDROMRESUME    无    继续播放
CDROMVOLCTRL    Struct cdrom_volctrl    设置音量
CDROMVOLREAD    Struct cdrom_volctrl    获取当前音量
CDROMREADTOCHDR    Struct cdrom_tochdr    读取TOC头部
CDROMREADTOCENTRY    Struct cdrom_tocentry    读取TOC条目
CDROMSUBCHNL    Struct cdrom_subchnl    读取子通道数据
CDROMREADMODAL1    Struct cdrom_read    读取模式1数据
CDROMREADMODAL2    Struct cdrom_read    读取模式2数据
CDROMREADAUDIO    Struct cdrom_read_audio    读取数字音频数据
上一篇:智能交互式指法练习系统的设计和开发
下一篇:智能手机电影订票系统网站设计

电子政务环境下公务员的...

架设Linux(2.6内核)的服务器集群【745字】

改善嵌入式Linux实时性能的方法研究【2067字】

搭建Linux桌面环境的影音平台【1261字】

Linux内核的键盘模拟实现【1538字】

使用http协议和winsockapi实现...

于PCI9656设备驱动程序的...

医院财务风险因素分析及管理措施【2367字】

10万元能开儿童乐园吗,我...

国内外图像分割技术研究现状

AT89C52单片机的超声波测距...

C#学校科研管理系统的设计

承德市事业单位档案管理...

志愿者活动的调查问卷表

公寓空调设计任务书

中国学术生态细节考察《...

神经外科重症监护病房患...