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


2

USB 2.0 CD / DVDドライブを持っています。これは(他のユースケースと一緒に)音楽CDの再生に使用されます。しかし:ドライブはCDROMPLAYMSFコマンドを無視しているようです。

ホストは、現在のバージョンのRaspbianを搭載したRaspberry Pi 3Bです。私はlibcdaudio、CD- ioctlROMPLAYMSFを含む必要なコマンドを発行するオーディオCDの再生に使用しています。

UPDATE:によって吐き出すよう要求したら、私はここに、あなたに私のドライブのスペックを与える可能性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

回答:


3

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

CDROMPLAYMSFioctlはすなわち、これらのSCSIコマンドのいずれかを発行しますPLAY AUDIO MSF。MSFは、CD上の位置(分、秒、フレーム)を定義します。

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

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

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


OK、それは不幸なことに、私がいつも恐れていたことです。ところで、libcdaudio問題CDROMPLAYMSF
ネポムク

0

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#Data_structureから

オーディオCDのオーディオデータストリームは連続的ですが、3つの部分に分かれています。さらに、再生可能なオーディオトラックに分割される主要部分はプログラム領域です。このセクションの前にはリードイントラックがあり、その後にリードアウトトラックがあります。リードインおよびリードアウトトラックはサイレントオーディオのみをエンコードしますが、3つのセクションすべてにサブコードデータストリームが含まれています。

リードインのサブコードには、ディスクの目次(TOC)の繰り返しコピーが含まれており、プログラム領域とリードアウトのトラックの開始位置のインデックスを提供します。トラックの位置は、プログラム領域の開始を基準とした絶対タイムコードによって、MSF形式で参照されます:フレームと呼ばれる分、秒、および小数秒。各タイムコードフレームは75分の1秒であり、98個のチャネルデータフレームのブロック、最終的には588組の左右のオーディオサンプルのブロックに対応します。サブチャネルデータに含まれるタイムコードにより、読み取りデバイスは、TOCのタイムコードに対応するディスクの領域を見つけることができます。ディスクの目次は、ハードドライブのパーティションテーブルに似ています。

また、Compact_Disc_Digital_Audio#Frames_and_timecode_framesから

Red BookオーディオCDでは、データはMSFスキームを使用してアドレス指定され、タイムコードは分、秒、および別のタイプのフレーム(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バイトに対応します。Red Bookはセクターを参照せず、MSFアドレス指定スキームの「フレーム」を除き、ディスクのデータストリームの対応するセクションを区別しません。


1
まあ...私はすでにカーネルソースの説明を知っています。私が最初に求めていたのは、ドライブがディスクからオーディオデータを読み取り、オーディオストリームとしてコンピュータに転送するだけですか(出力がまったく表示されない)、またはサウンドデータをデコードして吐き出しますか?サウンド出力(ほとんどのドライブにはもうありません)?
ネポムク

@Neppomuk「サウンドデータをデコードし、サウンド出力に吐き出します」-このようなタイプのCDドライブとサウンドカードの相互接続を意味しますか?2.0 Proのブラスターサウンド。あなたの質問は、最新のSATA光学ドライブは同じように機能しますか、それともオーディオストリームはオペレーティングシステムのみを通過しますか?
MiniMax

表示しているサウンドカードは既にかなり古いものですが、はい、サウンドカードに相互接続されたCDドライブが使用されていました。そうです、これは私が言っていることです:[外部デバイスの接続:CD-ROMドライブのインストール](youtu.be/g15J44xB2zU?t=398しかし、私の質問は、ドライブが上記のコマンドを取得し、サウンドデータをデコードしてそれを直接接続によるサウンドカードは、SATA / SCSI / USB /インターフェイスを介してホストにサウンドを引き渡すこととは異なります。
ネポムク

2
@Neppomukは、ドライブがオーディオデータ自体をデコードしてサウンドカードに直接送信することになっていた-ide / ata接続を介してではなく、別のケーブルを介して(またはスピーカー/ヘッドフォンに直接)CDドライブ自分の3.5ミリメートルソケット)
mosvy

@Neppomuk ウィキペディアでMSFに関する情報を見つけました。回答の編集セクションを参照してください。
MiniMax
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.