
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 libcdaudio
für die Audio-CD-Wiedergabe, welcher wiederum die nötigen ioctl
Befehle ausgibt, unter anderem auch CDROMPLAYMSF.
AKTUALISIEREN:Auf Anfrage gebe ich Ihnen hiermit die Spezifikationen meines Laufwerks, wie sie vom cd-drive
Dienstprogramm 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 CDROMPLAYMSF
ioctl 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 libcdaudio
Bibliothek 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 grep
Befehl 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.