AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 523773
Accepted
Neppomuk
Neppomuk
Asked: 2019-06-09 13:21:49 +0800 CST2019-06-09 13:21:49 +0800 CST 2019-06-09 13:21:49 +0800 CST

ioctl CDROMPLAYMSF 命令究竟做了什么?

  • 772

我有一个 USB 2.0 CD/DVD 驱动器,它(在其他用例中)用于播放音乐 CD。但是:驱动器似乎忽略了 CDROMPLAYMSF 命令。

主机是带有当前版本 Raspbian 的 Raspberry Pi 3B。我正在使用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
audio-cd ioctl
  • 2 2 个回答
  • 364 Views

2 个回答

  • Voted
  1. Best Answer
    dirkt
    2019-06-12T11:50:36+08:002019-06-12T11:50:36+08:00

    最初的 CD ROM 驱动器(在 IDE 时代)通过模拟音频连接到主板。然后,SCSI 命令PLAY、及其变体将音频 CD 播放到此模拟输出,就像独立的 CD 播放器一样。STOPSCAN

    CDROMPLAYMSFioctl 发出这些 SCSI 命令之一,即PLAY AUDIO MSF. MSF 定义 CD 上的位置(以分钟、秒、帧为单位)。

    内部 CD ROM 早已失去此功能,外部 USB CD ROM 也是如此(没有模拟音频连接到主板)。所以你的 CD 播放器理所当然地忽略了这个命令。

    IIRClibcdaudio库还具有从 CD 读取数字数据的功能。您需要使用这些,然后将数据传递给 Pulseaudio 等以播放 CD。

    你也可以使用现成的命令行工具mplayer cdda://。

    • 3
  2. MiniMax
    2019-06-09T15:23:32+08:002019-06-09T15:23:32+08:00

    来自 Linux内核源代码:

    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#Data_structure:

    音频 CD 中的音频数据流是连续的,但包含三个部分。主要部分,进一步分为可播放的音轨,是程序区域。此部分之前是引入轨道,然后是引出轨道。导入和导出轨道仅编码无声音频,但所有三个部分都包含子码数据流。

    导入的子代码包含光盘目录 (TOC) 的重复副本,它提供了节目区域和导出中轨道开始位置的索引。轨道位置由绝对时间码引用,相对于程序区域的开始,采用 MSF 格式:分钟、秒和称为帧的小数秒。每个时间码帧是七十五分之一秒,对应一个包含 98 个通道数据帧的块——最终,一个包含 588 对左右音频样本的块。包含在子通道数据中的时间码允许读取设备定位对应于 TOC 中时间码的光盘区域。磁盘上的 TOC 类似于硬盘上的分区表。

    此外,来自Compact_Disc_Digital_Audio#Frames_and_timecode_frames:

    在红皮书音频 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) 技术引入了术语扇区来指代每个时间码帧,每个扇区由从零开始的连续整数标识,并且轨道在扇区边界上对齐。一个音频 CD 扇区对应于 2,352 字节的解码数据。红皮书没有提到扇区,也没有区分光盘数据流的相应部分,除了 MSF 寻址方案中的“帧”。

    • 0

相关问题

  • 如何防止为 cdc_acm 打开 DTR?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve