毕业论文

打赏
当前位置: 毕业论文 > 计算机论文 >

Linux环境下CD播放器的设计与实现(4)

时间:2017-05-25 18:34来源:毕业论文
2.4 音频CD CD是目前正在被广泛使用的一种高效信息存储系统,它从最初起步到逐步成熟大约经历了十年左右的时间,期间涌现出来的行业标准和技术规范非


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环境下CD播放器的设计与实现(4):http://www.youerw.com/jisuanji/lunwen_7816.html
------分隔线----------------------------
推荐内容