Что именно делает команда ioctl CDROMPLAYMSF?

Что именно делает команда ioctl CDROMPLAYMSF?

У меня есть привод 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.

Связанный контент