Was genau macht der Befehl ioctl CDROMPLAYMSF?

Was genau macht der Befehl ioctl CDROMPLAYMSF?

Ich habe ein USB 2.0 CD/DVD-Laufwerk, das (unter anderem) zum Abspielen von Musik-CDs verwendet wird. Aber: Das Laufwerk scheint CDROMPLAYMSF-Befehle zu ignorieren.

Als Host dient ein Raspberry Pi 3B mit der aktuellen Raspbian-Version. Ich nutze ihn libcdaudiofür die Audio-CD-Wiedergabe, welcher wiederum die nötigen ioctlBefehle ausgibt, unter anderem auch CDROMPLAYMSF.

AKTUALISIEREN:Auf Anfrage gebe ich Ihnen hiermit die Spezifikationen meines Laufwerks, wie sie vom cd-driveDienstprogramm ausgegeben werden 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

Antwort1

Ursprünglich hatten CD-ROM-Laufwerke (im IDE-Zeitalter) eine analoge Audioverbindung zum Motherboard. Die SCSI-Befehle PLAY, und ihre Varianten spielten dann Audio-CDs über diesen analogen Ausgang ab, genau wie ein eigenständiger CD-Player STOP.SCAN

Das CDROMPLAYMSFioctl gibt einen dieser SCSI-Befehle aus, nämlich PLAY AUDIO MSF. MSF definiert eine Position auf der CD (in Minuten, Sekunden, Frames).

Interne CD-ROMs haben diese Funktion schon lange verloren, ebenso wie externe USB-CD-ROMs (es gibt keine analoge Audioverbindung zum Motherboard). Ihr CD-Player ignoriert diesen Befehl also zu Recht.

Soweit ich mich erinnere, verfügt die libcdaudioBibliothek auch über Funktionen zum Lesen der digitalen Daten von der CD. Diese müssen Sie verwenden und die Daten dann an Pulseaudio usw. weitergeben, um die CD abzuspielen.

mplayer cdda://Sie können hierfür auch vorgefertigte Befehlszeilentools verwenden .

Antwort2

Unter LinuxKernelquelle:

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.

Auch diese Antwort von mir kann für Sie nützlich sein:Holen Sie sich alle Ioctl-Definitionen aus der Kernelquelle.

Ich habe die Antwort auf Ihre Frage auf die gleiche Weise gefunden, habe lediglich den grepBefehl ein wenig geändert:

grep -r 'CDROMPLAYMSF' * | vim -

BEARBEITEN

ausCompact_Disc_Digital_Audio#Datenstruktur:

Der Audiodatenstrom einer Audio-CD ist kontinuierlich, besteht aber aus drei Teilen. Der Hauptteil, der weiter in abspielbare Audiospuren unterteilt ist, ist der Programmbereich. Diesem Abschnitt geht eine Lead-In-Spur voraus, und ihm folgt eine Lead-Out-Spur. Die Lead-In- und Lead-Out-Spuren codieren nur stummes Audio, aber alle drei Abschnitte enthalten Subcode-Datenströme.

Der Subcode des Lead-In enthält wiederholte Kopien des Inhaltsverzeichnisses (TOC) der Disc, das einen Index der Startpositionen der Titel im Programmbereich und Lead-Out bereitstellt.Die Spurpositionen werden durch den absoluten Zeitcode relativ zum Beginn des Programmbereichs im MSF-Format referenziert: Minuten, Sekunden und Sekundenbruchteile, sogenannte Frames.Jeder Zeitcode-Frame ist eine Fünfundsiebzigstelsekunde lang und entspricht einem Block von 98 Kanaldaten-Frames – letztendlich einem Block von 588 Paaren linker und rechter Audio-Samples.Der in den Subkanaldaten enthaltene Zeitcode ermöglicht es dem Lesegerät, den Bereich der Disc zu lokalisieren, der dem Zeitcode im TOC entspricht. Das TOC auf Discs entspricht der Partitionstabelle auf Festplatten.

Auch vonCompact_Disc_Digital_Audio#Frames_und_Timecode_Frames:

Auf einer Red Book Audio-CD werden die Daten mit demÄrzte ohne GrenzenSchema, mit Zeitcodes, ausgedrückt in Minuten, Sekunden und einem anderen Frame-Typ (mm:ss:ff), wobei ein Frame 1/75 Sekunde Audio entspricht: 588 Paare linker und rechter Samples. Dieser Zeitcode-Frame unterscheidet sich vom oben beschriebenen 33-Byte-Kanaldaten-Frame und wird für die Zeitanzeige und Positionierung des Leselasers verwendet.Beim Bearbeiten und Extrahieren von CD-Audio ist dieser Timecode-Frame das kleinste adressierbare Zeitintervall für eine Audio-CD. Daher treten Spurgrenzen nur an diesen Frame-Grenzen auf.Jede dieser Strukturen enthält 98 Kanaldatenrahmen, insgesamt also 98 × 24 = 2.352 Bytes Musik. Die CD wird mit einer Geschwindigkeit von 75 Rahmen (oder Sektoren) pro Sekunde abgespielt, also 44.100 Samples oder 176.400 Bytes pro Sekunde.

In den 1990er Jahren wurde mit CD-ROM und der damit verbundenen Digital Audio Extraction (DAE)-Technologie der Begriff Sektor eingeführt, um sich auf jeden Timecode-Frame zu beziehen. Jeder Sektor wurde durch eine fortlaufende Ganzzahl identifiziert, die bei Null beginnt, und die Spuren wurden an den Sektorgrenzen ausgerichtet. Ein Audio-CD-Sektor entspricht 2.352 Byte dekodierter Daten. Das Red Book bezieht sich nicht auf Sektoren und unterscheidet auch nicht die entsprechenden Abschnitte des Datenstroms der Disc, außer als „Frames“ im MSF-Adressierungsschema.

verwandte Informationen