我有一个USB2.0CD/DVD驱动器,它是用来播放音乐CD的(在其他用例中)。但是:驱动器似乎忽略了CDROMPLAYMSF命令。
主机是带有当前版本的Raspbian的Raspberry Pi 3B。我使用libcdaudio进行音频CD播放,这反过来会发出必要的ioctl命令,包括CDROMPLAYMSF。
更新:根据要求,我可以在此向您提供我的驱动器的规格,这是由cd-drive实用程序cdio提出的:
CD-ROM drive supports MMC 3
Drive: /dev/cdrom
Vendor : MATSHITA
Model : CD-RW CW-8124
Revision : DA0D
Hardware : CD-ROM or DVD
Can eject : Yes
Can close tray : Yes
Can disable manual eject : Yes
Can select juke-box disc : No
Can set drive speed : No
Can read multiple sessions (e.g. PhotoCD) : Yes
Can hard reset device : Yes
Reading....
Can read Mode 2 Form 1 : Yes
Can read Mode 2 Form 2 : Yes
Can read (S)VCD (i.e. Mode 2 Form 1/2) : Yes
Can read C2 Errors : Yes
Can read IRSC : Yes
Can read Media Channel Number (or UPC) : Yes
Can play audio : Yes
Can read CD-DA : Yes
Can read CD-R : Yes
Can read CD-RW : Yes
Can read DVD-ROM : Yes
Writing....
Can write CD-RW : Yes
Can write DVD-R : No
Can write DVD-RAM : No
Can write DVD-RW : No
Can write DVD+RW : No发布于 2019-06-11 19:50:36
最初,CD ROM驱动器(在IDE时代)有一个模拟音频连接到主板。然后,SCSI命令PLAY、STOP、SCAN及其变体将音频CD播放到这个模拟输出,就像一个独立的CD播放机。
CDROMPLAYMSF ioctl发出其中一个SCSI命令,即PLAY AUDIO MSF。MSF在CD上定义一个位置(以分钟、秒、帧为单位)。
内部光盘驱动器早已失去这一功能,以及外部USB光盘ROM(没有模拟音频连接到主板)。因此,您的CD播放机正确地忽略了此命令。
libcdaudio库还具有从CD读取数字数据的功能。您需要使用这些,然后将数据传递给Pulse音频等以播放CD。
您还可以使用现成的命令行工具,比如mplayer cdda://。
发布于 2019-06-08 23:23:32
来自Linux 核源:
CDROMPLAYMSF Play Audio MSF (struct cdrom_msf)
usage:
struct cdrom_msf msf;
ioctl(fd, CDROMPLAYMSF, &msf);
inputs:
cdrom_msf structure, describing a segment of music to play
outputs: none
error return:
ENOSYS cd drive not audio-capable.
notes:
MSF stands for minutes-seconds-frames
LBA stands for logical block address
Segment is described as start and end times, where each time
is described as minutes:seconds:frames. A frame is 1/75 of
a second.另外,我的答案对你很有用:从内核源获取所有ioctl定义.
我以同样的方式找到了对您的问题的答案,只是稍微修改了grep命令:
grep -r 'CDROMPLAYMSF' * | vim -音频CD中的音频数据流是连续的,但有三个部分。主要部分,进一步分为可播放的音频轨道,是节目区。本节前面是一个导入轨道,然后是一个导入轨道.导入和导入轨道只编码无声音频,但所有三个部分都包含子代码数据流。导入的子代码包含重复副本的光盘目录(TOC),这提供了一个索引的开始位置的轨道在节目区和引线。轨道位置被绝对时间编码引用,相对于程序区域的开始,以MSF格式:分钟、秒和称为帧的小数秒。每个时间码帧是每秒的七十五个,对应于一个由98个信道数据帧组成的块,最终是一个由588对左右音频样本组成的块。子信道数据中包含的时间码允许读取设备定位与TOC中的时间码对应的磁盘区域。磁盘上的TOC类似于硬盘上的分区表。
同时,来自紧致_盘片_数字化_Audio#Frames_和_时间码_框架:
在红皮书音频CD上,数据使用MSF方案进行处理,时间码以分钟、秒和另一种帧(mm:ss:ff)表示,其中一个帧对应于每秒1/75的音频: 588对左右采样。此时间码帧与上述33字节信道数据帧不同,用于读取激光器的时间显示和定位。在编辑和提取CD音频时,此时间编码帧是音频CD的最小可寻址时间间隔;因此,跟踪边界仅出现在这些帧边界上。每个结构包含98个信道数据帧,总计98×24 = 2,352字节的音乐.CD以每秒75帧(或扇区)的速度播放,因此有44,100个采样或每秒176,400字节。在20世纪90年代,CD和相关的数字音频提取(DAE)技术引入了扇区这个术语,用于指每一个时隙帧,每个扇区由从零开始的顺序整数数标识,并在扇区边界上与轨道对齐。音频CD扇区对应2 352字节的解码数据。“红皮书”没有提及扇区,也没有区分光盘数据流的相应部分,除非是MSF寻址方案中的“帧”。
https://unix.stackexchange.com/questions/523773
复制相似问题