Eu tenho uma unidade de CD/DVD USB 2.0, que é (entre outros casos de uso) usada para reproduzir CDs de música. Mas: A unidade parece ignorar os comandos CDROMPLAYMSF.
O host é um Raspberry Pi 3B com a versão atual do Raspbian. Estou usando libcdaudio
para reprodução de CD de áudio, que por sua vez emite os ioctl
comandos necessários, incluindo CDROMPLAYMSF.
ATUALIZAÇÃO: Mediante solicitação, posso fornecer as especificações da minha unidade, conforme cuspido pelo cd-drive
utilitário 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
Originalmente, as unidades de CD-ROM (na era IDE) tinham uma conexão de áudio analógica com a placa-mãe. Os comandos SCSI
PLAY
,STOP
,SCAN
e suas variantes reproduziriam CDs de áudio nessa saída analógica exatamente como um CD player autônomo.O
CDROMPLAYMSF
ioctl emite um desses comandos SCSI, ou seja,PLAY AUDIO MSF
. MSF define uma posição no CD (em Minutos, Segundos, Quadros).Os CD-ROMs internos perderam esse recurso há muito tempo, assim como os CD-ROMs USB externos (não há conexão de áudio analógico com a placa-mãe). Portanto, seu CD player ignora esse comando com razão.
IIRC a
libcdaudio
biblioteca também possui funções para ler os dados digitais do CD. Você precisa usá-los e, em seguida, passar os dados para o Pulseaudio etc. para reproduzir o CD.Você também pode usar ferramentas de linha de comando prontas
mplayer cdda://
para isso.Da fonte do kernel Linux :
Além disso, esta minha resposta pode ser útil para você: Obtenha todas as definições ioctl da fonte do kernel.
Eu encontrei a resposta para sua pergunta da mesma maneira, apenas mudei
grep
um pouco o comando:EDITAR
de Compact_Disc_Digital_Audio#Data_structure:
Além disso, de Compact_Disc_Digital_Audio#Frames_and_timecode_frames: