
У меня есть привод USB 2.0 CD/DVD, который (помимо прочего) используется для воспроизведения музыкальных компакт-дисков. Но: привод, похоже, игнорирует команды CDROMPLAYMSF.
Хост — Raspberry Pi 3B с текущей версией Raspbian. Я использую libcdaudio
для воспроизведения аудио CD, который в свою очередь выдает необходимые ioctl
команды, включая CDROMPLAYMSF.
ОБНОВЛЯТЬ:По вашему запросу, могу ли я предоставить вам характеристики моего привода, предоставленные 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
решение1
Первоначально приводы CD ROM (в эпоху IDE) имели аналоговое аудиоподключение к материнской плате. Команды SCSI PLAY
, STOP
, SCAN
и их варианты затем воспроизводили аудио CD на этом аналоговом выходе, как автономный проигрыватель CD.
ioctl CDROMPLAYMSF
выдает одну из таких команд SCSI, а именно PLAY AUDIO MSF
. MSF определяет позицию на CD (в минутах, секундах, кадрах).
Внутренние CD-ROM-приводы давно утратили эту функцию, как и внешние USB CD-ROM-приводы (нет аналогового аудиоподключения к материнской плате). Поэтому ваш CD-плеер по праву игнорирует эту команду.
IIRC, libcdaudio
библиотека также имеет функции для чтения цифровых данных с CD. Вам нужно использовать их, а затем передать данные в Pulseaudio и т. д. для воспроизведения CD.
mplayer cdda://
Для этого вы также можете использовать готовые инструменты командной строки, например :
решение2
Из Линуксаисходный код ядра:
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 -
РЕДАКТИРОВАТЬ
отКомпактный_диск_цифровой_аудио#структура_данных:
Поток аудиоданных на аудио CD непрерывен, но состоит из трех частей. Основная часть, которая далее делится на воспроизводимые аудиодорожки, — это программная область. Этому разделу предшествует вводная дорожка, а за ней следует выводная дорожка. Вводная и выводная дорожки кодируют только тихий звук, но все три раздела содержат потоки данных субкода.
Субкод вводной части содержит повторяющиеся копии таблицы содержания (TOC) диска, которая содержит индекс начальных позиций дорожек в программной области и выводной части.Позиции дорожек определяются абсолютным временным кодом относительно начала программной области в формате MSF: минуты, секунды и доли секунды, называемые кадрами.Каждый кадр временного кода составляет одну семьдесят пятую секунды и соответствует блоку из 98 кадров данных канала — в конечном итоге блоку из 588 пар левых и правых аудиосэмплов.Таймкод, содержащийся в данных подканала, позволяет считывающему устройству находить область диска, которая соответствует таймкоду в TOC. TOC на дисках аналогичен таблице разделов на жестких дисках.
Также, изКомпактный_диск_цифровой_аудио#кадры_и_кадры_временного_кода:
На аудио-CD Red Book данные адресуются с помощьюВБГсхема с таймкодами, выраженными в минутах, секундах и другом типе кадров (mm:ss:ff), где один кадр соответствует 1/75 секунды аудио: 588 пар левых и правых сэмплов. Этот кадр таймкода отличается от 33-байтового кадра данных канала, описанного выше, и используется для отображения времени и позиционирования считывающего лазера.При редактировании и извлечении аудио CD этот кадр временного кода представляет собой наименьший адресуемый временной интервал для аудио CD; таким образом, границы дорожек возникают только на границах этих кадров.Каждая из этих структур содержит 98 кадров данных канала, что в сумме составляет 98 × 24 = 2352 байта музыки. CD воспроизводится со скоростью 75 кадров (или секторов) в секунду, то есть 44 100 сэмплов или 176 400 байт в секунду.
В 1990-х годах CD-ROM и связанная с ним технология Digital Audio Extraction (DAE) ввели термин «сектор» для обозначения каждого кадра временного кода, при этом каждый сектор идентифицировался последовательным целым числом, начинающимся с нуля, и с дорожками, выровненными по границам секторов. Сектор аудио CD соответствует 2352 байтам декодированных данных. Красная книга не ссылается на секторы и не различает соответствующие разделы потока данных диска, за исключением «кадров» в схеме адресации MSF.