web-dev-qa-db-ja.com

ioctl CDROMPLAYMSFコマンドは正確に何をしますか?

私はUSB2.0 CD/DVDドライブを持っています。これは、(他のユースケースの中でも)音楽CDの再生に使用されます。しかし:ドライブはCDROMPLAYMSFコマンドを無視しているようです。

ホストは、現在のバージョンのRaspbianを搭載したRaspberry Pi3Bです。オーディオCDの再生にlibcdaudioを使用しています。これにより、CDROMPLAYMSFを含む必要なioctlコマンドが発行されます。

PDATE:リクエストに応じて、cdiocd-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
2
Neppomuk

もともとCD ROMドライブ(IDE時代)はマザーボードへのアナログオーディオ接続がありました。SCSIコマンドPLAYSTOPSCANおよびそれらのバリアントは、スタンドアロンCDプレーヤーと同じように、オーディオCDをこのアナログ出力に再生します。

CDROMPLAYMSF ioctlは、これらのSCSIコマンドの1つ、つまりPLAY AUDIO MSFを発行します。 MSFは、CD上の位置を定義します(分、秒、フレーム)。

内部CDROMは、外部USB CD ROMと同様に、この機能を長い間失っています(マザーボードへのアナログオーディオ接続はありません)。したがって、CDプレーヤーはこのコマンドを正しく無視します。

IIRC libcdaudioライブラリには、CDからデジタルデータを読み取る機能もあります。それらを使用して、Pulseaudioなどにデータを渡してCDを再生する必要があります。

そのために、mplayer cdda://のような既製のコマンドラインツールを使用することもできます。

3
dirkt

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アドレス指定スキームの「フレーム」を除いて、ディスクのデータストリームの対応するセクションを区別しません。

0
MiniMax