ioctl CDROMPLAYMSF 명령은 정확히 무엇을 수행합니까?

ioctl CDROMPLAYMSF 명령은 정확히 무엇을 수행합니까?

나는 (다른 사용 사례 중에서) 음악 CD를 재생하는 데 사용되는 USB 2.0 CD/DVD 드라이브를 가지고 있습니다. 하지만: 드라이브가 CDROMPLAYMSF 명령을 무시하는 것 같습니다.

호스트는 현재 버전의 Raspbian이 설치된 Raspberry Pi 3B입니다. 나는 libcdaudio오디오 CD 재생을 위해 사용하고 있으며 CDROMPLAYMSF를 포함하여 필요한 ioctl명령을 실행합니다.

업데이트: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, STOPSCAN그 변형은 독립형 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 -

편집하다

~에서Compact_Disc_Digital_Audio#데이터_구조:

오디오 CD의 오디오 데이터 스트림은 연속적이지만 세 부분으로 구성됩니다. 재생 가능한 오디오 트랙으로 더 구분되는 주요 부분은 프로그램 영역입니다. 이 섹션 앞에는 리드인 트랙이 있고 그 뒤에 리드아웃 트랙이 있습니다. 리드인 및 리드아웃 트랙은 무음 오디오만 인코딩하지만 세 섹션 모두 하위 코드 데이터 스트림을 포함합니다.

리드인의 하위 코드에는 프로그램 영역과 리드아웃에서 트랙의 시작 위치에 대한 인덱스를 제공하는 디스크 목차(TOC)의 반복 복사본이 포함되어 있습니다.트랙 위치는 MSF 형식(프레임이라고 하는 분, 초, 분수 초)의 프로그램 영역 시작을 기준으로 한 절대 타임코드로 참조됩니다.각 타임코드 프레임은 1/75초이며 98개의 채널 데이터 프레임 블록, 즉 588쌍의 왼쪽 및 오른쪽 오디오 샘플 블록에 해당합니다.하위 채널 데이터에 포함된 타임코드를 통해 판독 장치는 TOC의 타임코드에 해당하는 디스크 영역을 찾을 수 있습니다. 디스크의 TOC는 하드 드라이브의 파티션 테이블과 유사합니다.

또한,Compact_Disc_Digital_Audio#Frames_and_timecode_frames:

Red Book 오디오 CD에서 데이터는 다음을 사용하여 주소가 지정됩니다.MSF분, 초 및 다른 유형의 프레임(mm:ss:ff)으로 표시되는 타임코드를 사용하는 방식입니다. 여기서 한 프레임은 오디오의 1/75초에 해당합니다. 왼쪽 및 오른쪽 샘플 588쌍입니다. 이 타임코드 프레임은 위에서 설명한 33바이트 채널 데이터 프레임과 다르며 판독용 레이저의 시간 표시 및 위치 지정에 사용됩니다.CD 오디오를 편집하고 추출할 때 이 타임코드 프레임은 오디오 CD에 대해 주소를 지정할 수 있는 가장 작은 시간 간격입니다. 따라서 트랙 경계는 이러한 프레임 경계에서만 발생합니다.이러한 각 구조에는 98개의 채널 데이터 프레임이 포함되어 있으며 총 98 × 24 = 2,352바이트의 음악이 됩니다. CD는 초당 75프레임(또는 섹터)의 속도로 재생되므로 초당 44,100샘플 또는 176,400바이트가 됩니다.

1990년대 CD-ROM 및 관련 DAE(Digital Audio Extraction) 기술에서는 각 타임코드 프레임을 지칭하기 위해 섹터라는 용어를 도입했습니다. 각 섹터는 0부터 시작하는 순차적 정수로 식별되고 트랙은 섹터 경계에 정렬됩니다. 오디오 CD 섹터는 2,352바이트의 디코딩된 데이터에 해당합니다. Red Book은 섹터를 참조하지 않으며 MSF 주소 지정 체계의 "프레임"을 제외하고 디스크 데이터 스트림의 해당 섹션을 구별하지도 않습니다.

관련 정보