
Tengo una unidad de CD/DVD USB 2.0, que se utiliza (entre otros casos de uso) para reproducir CD de música. Pero: La unidad parece ignorar los comandos CDROMPLAYMSF.
El host es una Raspberry Pi 3B con la versión actual de Raspbian. Lo estoy usando libcdaudio
para la reproducción de CD de audio, que a su vez emite los ioctl
comandos necesarios, incluido CDROMPLAYMSF.
ACTUALIZAR:Si lo solicita, por la presente puedo brindarle las especificaciones de mi unidad, tal como las muestra la cd-drive
utilidad de 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
Respuesta1
Originalmente, las unidades de CD ROM (en la era IDE) tenían una conexión de audio analógica a la placa base. Los comandos SCSI PLAY
, STOP
y SCAN
sus variantes reproducirían CD de audio en esta salida analógica como un reproductor de CD independiente.
El CDROMPLAYMSF
ioctl emite uno de esos comandos SCSI, a saber PLAY AUDIO MSF
. MSF define una posición en el CD (en minutos, segundos, fotogramas).
Los CD ROM internos hace tiempo que perdieron esta característica, al igual que los CD ROM USB externos (no hay conexión de audio analógico a la placa base). Entonces su reproductor de CD ignora con razón este comando.
La libcdaudio
biblioteca IIRC también tiene funciones para leer los datos digitales del CD. Debe usarlos y luego pasar los datos a Pulseaudio, etc. para reproducir el CD.
También puedes usar herramientas de línea de comandos ya preparadas como mplayer cdda://
para eso.
Respuesta2
Desde Linuxfuente del núcleo:
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.
Además, esta mi respuesta puede resultarte útil:Obtenga todas las definiciones de ioctl del código fuente del kernel.
Encontré la respuesta a tu pregunta de la misma manera, solo cambié grep
un poco el comando:
grep -r 'CDROMPLAYMSF' * | vim -
EDITAR
deDisco_compacto_Audio_Digital#Estructura_de_datos:
El flujo de datos de audio en un CD de audio es continuo, pero tiene tres partes. La parte principal, que a su vez se divide en pistas de audio reproducibles, es el área del programa. Esta sección está precedida por una pista de entrada y seguida por una pista de salida. Las pistas de entrada y salida codifican sólo audio silencioso, pero las tres secciones contienen flujos de datos de subcódigo.
El subcódigo de entrada contiene copias repetidas de la tabla de contenidos (TOC) del disco, que proporciona un índice de las posiciones iniciales de las pistas en el área del programa y la salida.Las posiciones de las pistas están referenciadas mediante un código de tiempo absoluto, relativo al inicio del área del programa, en formato MSF: minutos, segundos y fracciones de segundo llamados fotogramas.Cada cuadro de código de tiempo es un setenta y cinco de segundo y corresponde a un bloque de 98 cuadros de datos de canal; en última instancia, un bloque de 588 pares de muestras de audio izquierda y derecha.El código de tiempo contenido en los datos del subcanal permite que el dispositivo de lectura ubique la región del disco que corresponde al código de tiempo en el TOC. El TOC de los discos es análogo a la tabla de particiones de los discos duros.
Además, desdeDisco_compacto_Audio_Digital#Frames_and_timecode_frames:
En un CD de audio del Libro Rojo, los datos se direccionan utilizando elMSFesquema, con códigos de tiempo expresados en minutos, segundos y otro tipo de fotogramas (mm:ss:ff), donde un fotograma corresponde a 1/75 de segundo de audio: 588 pares de muestras izquierda y derecha. Este marco de código de tiempo es distinto del marco de datos de canal de 33 bytes descrito anteriormente y se utiliza para visualizar el tiempo y posicionar el láser de lectura.Al editar y extraer audio de CD, este cuadro de código de tiempo es el intervalo de tiempo más pequeño direccionable para un CD de audio; por lo tanto, los límites de las pistas sólo ocurren en estos límites de marco.Cada una de estas estructuras contiene 98 tramas de datos de canal, con un total de 98 × 24 = 2352 bytes de música. El CD se reproduce a una velocidad de 75 fotogramas (o sectores) por segundo, es decir, 44.100 muestras o 176.400 bytes por segundo.
En la década de 1990, el CD-ROM y la tecnología relacionada de extracción de audio digital (DAE) introdujeron el término sector para referirse a cada cuadro de código de tiempo, identificando cada sector mediante un número entero secuencial que comenzaba en cero y con pistas alineadas en los límites del sector. Un sector de CD de audio corresponde a 2352 bytes de datos decodificados. El Libro Rojo no hace referencia a sectores ni distingue las secciones correspondientes del flujo de datos del disco excepto como "tramas" en el esquema de direccionamiento MSF.