私はUSB2.0 CD/DVDドライブを持っています。これは、(他のユースケースの中でも)音楽CDの再生に使用されます。しかし:ドライブはCDROMPLAYMSFコマンドを無視しているようです。
ホストは、現在のバージョンのRaspbianを搭載したRaspberry Pi3Bです。オーディオCDの再生にlibcdaudio
を使用しています。これにより、CDROMPLAYMSFを含む必要なioctl
コマンドが発行されます。
PDATE:リクエストに応じて、cdio
のcd-drive
ユーティリティから吐き出された、ドライブの仕様をここにお知らせします。
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
もともとCD ROMドライブ(IDE時代)はマザーボードへのアナログオーディオ接続がありました。SCSIコマンドPLAY
、STOP
、SCAN
およびそれらのバリアントは、スタンドアロンCDプレーヤーと同じように、オーディオCDをこのアナログ出力に再生します。
CDROMPLAYMSF
ioctlは、これらのSCSIコマンドの1つ、つまりPLAY AUDIO MSF
を発行します。 MSFは、CD上の位置を定義します(分、秒、フレーム)。
内部CDROMは、外部USB CD ROMと同様に、この機能を長い間失っています(マザーボードへのアナログオーディオ接続はありません)。したがって、CDプレーヤーはこのコマンドを正しく無視します。
IIRC libcdaudio
ライブラリには、CDからデジタルデータを読み取る機能もあります。それらを使用して、Pulseaudioなどにデータを渡してCDを再生する必要があります。
そのために、mplayer cdda://
のような既製のコマンドラインツールを使用することもできます。
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 -
[〜#〜]編集[〜#〜]
from Compact_Disc_Digital_Audio#Data_structure:
オーディオCDのオーディオデータストリームは連続していますが、3つの部分があります。さらに再生可能なオーディオトラックに分割される主要部分は、プログラム領域です。このセクションの前にはリードイントラックがあり、その後にリードアウトトラックがあります。リードイントラックとリードアウトトラックはサイレントオーディオのみをエンコードしますが、3つのセクションすべてにサブコードデータストリームが含まれています。
リードインのサブコードには、ディスクの目次(TOC)の繰り返しコピーが含まれています。これは、プログラム領域とリードアウトのトラックの開始位置のインデックスを提供します。 トラック位置は、プログラム領域の開始を基準にした絶対タイムコードによってMSF形式:分、秒、およびフレームと呼ばれる秒の小数部で参照されます。 各タイムコードフレームは75分の1秒であり、98チャネルデータフレームのブロックに対応します。最終的には、左右のオーディオサンプルの588ペアのブロックに対応します。サブチャネルデータに含まれるタイムコードにより、読み取りデバイスは、TOCのタイムコードに対応するディスクの領域を見つけることができます。ディスクのTOCは、ハードドライブのパーティションテーブルに類似しています。
また、 Compact_Disc_Digital_Audio#Frames_and_timecode_frames: から
Red BookオーディオCDでは、データは[〜#〜] msf [〜#〜]スキームを使用してアドレス指定され、タイムコードは分、秒で表されます。もう1つのタイプのフレーム(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アドレス指定スキームの「フレーム」を除いて、ディスクのデータストリームの対応するセクションを区別しません。