私は(他のユースケースの中で)音楽CDを再生するために使用されるUSB 2.0 CD / DVDドライブを持っています。ただし、ドライブが CDROMPLAYMSF コマンドを無視しているように見えます。
ホストマシンはRaspberry Pi 3Bで、現在のバージョンはRaspbianです。私はこれをlibcdaudio
オーディオCDの再生に使用しましたが、CDROMPLAYMSFを含む必要なioctl
コマンドが実行されました。
修正する: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
答え1
もともとCD ROMドライブ(IDE時代)にはマザーボードへのアナログオーディオ接続がありました。その後、SCSIコマンドPLAY
とSTOP
そのSCAN
変形は、スタンドアロンCDプレーヤーのように、このアナログ出力からオーディオCDを再生します。
ioctl はCDROMPLAYMSF
これらの SCSI コマンドのいずれかを実行します。つまり、PLAY AUDIO MSF
MSFはCDの位置(分、秒、フレーム単位)を定義します。
内蔵CD ROMは、外部USB CD ROMと同様に、この機能を失ってから古くなっています(マザーボードにはアナログオーディオ接続はありません)。もちろん、CDプレーヤーはこのコマンドを無視します。
IIRClibcdaudio
ライブラリには、CDからデジタルデータを読み取る機能もあります。 CDを再生するには、それを使用してPulseaudioなどにデータを渡す必要があります。
同様の既製のコマンドラインツールを使用することもできますmplayer cdda://
。
答え2
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 -
編集する
~からCompact_Disc_Digital_Audio#データ構造:
オーディオCDのオーディオデータストリームは連続的ですが、3つの部分で構成されています。メインセクションは、再生可能なオーディオトラックに細分化されたプログラム領域です。このセクションの前にはインポートトラックが続き、その後にはエクスポートトラックが続きます。インポートおよびエクスポートトラックは無音オーディオのみをエンコードしますが、3つの部分すべてがサブコードストリームを含みます。
リードインサブコードには、プログラム領域とリードイン領域のトラックの開始位置のインデックスを提供するディスク目次(TOC)のコピーが含まれています。トラック位置は、MSF形式(フレームと呼ばれる分、秒、分数秒)のプログラム領域の先頭に基づいて絶対タイムコードとして参照されます。各タイムコードフレームの長さは75秒で、これは98チャンネルのデータフレームブロック、最終的には588ペアの左右のオーディオサンプルブロックに対応します。サブチャネルデータに含まれるタイムコードを使用すると、読み取りデバイスはTOCのタイムコードに対応するディスク領域を見つけることができます。ディスクのディレクトリは、ハードドライブのパーティションテーブルに似ています。
さらに、Compact_Disc_Digital_Audio#Frames_and_timecode_frames:
RedbookオーディオCDでは、データは次のように生成されます。国境のない医師会スキーム、タイムコードは、分、秒、および他の種類のフレーム(mm:ss:ff)で表されます。ここで、1フレームはオーディオの1/75秒に対応します(左と右のサンプル588ペア)。このタイムコードフレームは、上記の33バイトチャンネルデータフレームとは異なり、読み出しレーザの時間表示と位置決めに使用されます。CDオーディオを編集して抽出するとき、このタイムコードフレームはオーディオCDからアドレス指定できる最小の時間間隔であるため、トラック境界はこれらのフレーム境界でのみ発生します。各構造には98のデータフレームチャンネルが含まれており、総音楽容量は98×24 = 2,352バイトです。 CDは毎秒75フレーム(またはセクタ)で再生されます。これは毎秒44,100サンプルまたは176,400バイトです。
1990年代のCD-ROMおよび関連デジタルオーディオ抽出(DAE)技術では、各タイムコードフレームを指すために「セクタ」という用語が導入されました。各セクタはゼロから始まる連続した整数として識別され、トラックはセクタ境界に整列される。オーディオCDセクタは2,352バイトのデコードされたデータに対応します。レッドブックでは、セクターについて言及しておらず、MSFアドレス指定方式の「フレーム」に加えて、ディスクデータストリームの対応する部分を区別することもありません。