软件接口 ALSA-DSP MADI 驱动程序

(从德语翻译而来,所以英语不太好 ;-),)

2004 - winfried ritsch

驱动程序已添加完整功能。由于某些控件和启动选项是 ALSA 标准,因此仅描述和讨论以下特殊控件。

硬件功能

音频传输

  • 通道数 -- 取决于传输模式

    选择的通道数从 1..Nmax。使用较少通道的原因仅是资源分配,因为未使用的 DMA 通道被禁用,并且分配的内存较少。因此,PCI 系统的吞吐量也可以缩放。(仅对低性能板卡重要)。

  • 单速 -- 1..64 通道

注意

(注意:选择 56 通道模式进行传输或作为接收器时,只有 56 个通道通过 MADI 传输/接收,但所有 64 个通道都可用于混音器,因此是驱动程序的通道计数)

  • 双速 -- 1..32 通道

注意

注意:选择 56 通道模式进行传输/接收模式时,只有 28 个通道通过 MADI 传输/接收,但所有 32 个通道都可用于混音器,因此是驱动程序的通道计数

  • 四速 -- 1..16 通道

注意

选择 56 通道模式进行传输/接收模式时,只有 14 个通道通过 MADI 传输/接收,但所有 16 个通道都可用于混音器,因此是驱动程序的通道计数

  • 格式 -- 有符号 32 位小端 (SNDRV_PCM_FMTBIT_S32_LE)

  • 采样率 --

    单速 -- 32000, 44100, 48000

    双速 -- 64000, 88200, 96000(未测试)

    四速 -- 128000, 176400, 192000(未测试)

  • 访问模式 -- MMAP(内存映射),非交错 (PCM_NON-INTERLEAVED)

  • 缓冲区大小 -- 64,128,256,512,1024,2048,8192 个采样

  • 片段 -- 2

  • 硬件指针 -- 2 种模式

    该卡支持读取 DMA 读取/写入的实际缓冲区指针。由于 PCI 的批量模式,它只有 64 字节的精度。因此,它对于 ALSA 中层函数(此处缓冲区 ID 给出更好的结果)不是真的可用,但如果应用程序使用 MMAP。因此,它可以在加载时通过参数 precise-pointer 进行配置。

提示

(提示:经过实验,我发现指针最大偏大 64,从不偏小。因此,如果您减去 64,您始终会有一个安全的写入指针,它在此模式下在 ALSA 内部使用。理论上,现在您可以获得低至 16 个采样的延迟,这只是中断可能性的四分之一。)

  • 精确指针 -- 关闭

    用于指针计算的中断

  • 精确指针 -- 开启

    使用硬件指针。

控制器

由于 DSP-MADI-Mixer 有 8152 个推子,因此使用标准混音器控件没有意义,因为这会破坏大多数(尤其是图形)ALSA 混音器 GUI。因此,混音器控制已通过使用 hwdep 接口的二维控制器提供。

此外,所有 128+256 个峰值和 RMS 仪表都可以通过 hwdep 接口访问。由于即使您只需要一个,始终复制和转换峰值和 RMS 级别也可能是一个性能问题,因此我决定导出硬件结构,以便如果需要,一些驱动程序高手可以实现通过 ioctl 对混音器或峰值仪表的内存映射,或者只进行复制而不进行转换。一个测试应用程序显示了控制器的使用情况。

  • 延迟控制 --- 未实现!!!

注意

注意:在 windows 驱动程序中,延迟可通过控制面板访问,但是缓冲区大小通过 ALSA 从 hwparams 调用控制,并且不应在运行状态下更改,我在此处没有实现它。

  • 系统时钟 -- 暂停!!!!

    • 名称 -- “系统时钟模式”

    • 访问 -- 读写

    • 值 -- “主时钟” “从时钟”

注意

!!!!这是一个硬件功能,但与时钟源控制器冲突,后者是一种 ALSA 标准。将卡设置为特殊模式(在某个频率下为主时钟或从时钟)是有意义的,因为即使不使用音频应用程序,工作室也应该有正常工作的同步设置。因此,请改用时钟源控制器!!!!

  • 时钟源

    • 名称 -- “采样时钟源”

    • 访问 -- 读写

    • 值 -- “自动同步”、“内部 32.0 kHz”、“内部 44.1 kHz”、“内部 48.0 kHz”、“内部 64.0 kHz”、“内部 88.2 kHz”、“内部 96.0 kHz”

      在特定频率下的主时钟和速度模式或从时钟(自动同步)之间进行选择。另请参阅“首选同步参考”

警告

!!!!这不是纯粹的硬件功能,而是以前一些 ALSA 驱动程序在 ALSA 中实现的,所以我也可以使用它。!!!

  • 首选同步参考

    • 名称 -- “首选同步参考”

    • 访问 -- 读写

    • 值 -- “字时钟” “MADI”

      在自动同步模式下,可以选择首选同步源。如果它不可用,则尽可能使用另一个。

注意

注意:由于 MADI 的比特率比字时钟高得多,因此该卡应在 MADI 模式下更好地同步。但是由于 RME-PLL 非常好,因此字时钟也几乎没有问题。我从未发现差异。

  • TX 64 通道

    • 名称 -- “TX 64 通道模式”

    • 访问 -- 读写

    • 值 -- 0 1

      使用 64 通道模式 (1) 或 56 通道模式进行 MADI 传输 (0)。

注意

注意:此控件仅用于输出。输入模式是从发送 MADI 的硬件自动检测到的。

  • 清除 TMS

    • 名称 -- “清除音轨标记”

    • 访问 -- 读写

    • 值 -- 0 1

      不要将 AES 上的较低 5 位音频位用作附加位。

  • 安全模式或自动输入

    • 名称 -- “安全模式”

    • 访问 -- 读写

    • 值 -- 0 1(默认开启)

      如果开启 (1),则如果光纤或同轴连接出现故障,则会接管到工作的连接,而不会出现采样失败。仅当您将第二个连接用作备份连接时才有用。

  • 输入

    • 名称 -- “输入选择”

    • 访问 -- 读写

    • 值 -- 光纤 同轴

      选择输入,光纤或同轴。如果安全模式处于活动状态,则这是首选输入。

混音器

  • 混音器

    • 名称 -- “混音器”

    • 访问 -- 读写

    • 值 - <通道号 0-127> <值 0-65535>

      此处,第一个值是通道索引,用于获取/设置相应的混音器通道,其中 0-63 是输入到输出的推子,64-127 是回放到输出的推子。值 0 是通道静音 0,而 32768 是增益为 1。

  • 通道 1-64

    用于 ALSA 混音器实用程序的快速混音器。混音器矩阵的对角线是从回放到输出实现的。

  • 线路输出

    • 名称 -- “线路输出”

    • 访问 -- 读写

    • 值 -- 0 1

      打开和关闭模拟输出,这与混音或路由无关。模拟输出反映通道 63,64。

信息(仅读取访问)

  • 采样率

    • 名称 -- “系统采样率”

    • 访问 -- 只读

      获取采样率。

  • 测得的外部速率

    • 名称 -- “外部速率”

    • 访问 -- 只读

      应该是“自动同步速率”,但是使用的名称是 ALSA 方案。报告了在自动同步上使用的外部采样频率。

  • MADI 同步状态

    • 名称 -- “MADI 同步锁定状态”

    • 访问 -- 读取

    • 值 -- 0,1,2

      MADI 输入为 0=未锁定,1=已锁定,或 2=已同步。

  • 字时钟同步状态

    • 名称 -- “字时钟锁定状态”

    • 访问 -- 读取

    • 值 -- 0,1,2

      字时钟输入为 0=未锁定,1=已锁定,或 2=已同步。

  • 自动同步

    • 名称 -- “自动同步参考”

    • 访问 -- 读取

    • 值 -- “字时钟”、“MADI”、“无”

      同步参考是 “字时钟”、“MADI” 或无。

  • RX 64 通道 --- 尚未实现

    MADI 接收器处于 64 通道模式或 56 通道模式。

  • AB_inp --- 未测试

    用于自动输入的输入。

  • 实际缓冲区位置 --- 未实现

    !!!这是一个 ALSA 内部函数,因此未使用任何控件!!!

调用参数

  • index int 数组 (min = 1, max = 8)

    RME HDSPM 接口的索引值。ALSA 中的卡索引

    注意:ALSA 标准

  • id 字符串数组 (min = 1, max = 8)

    RME HDSPM 接口的 ID 字符串。

    注意:ALSA 标准

  • enable int 数组 (min = 1, max = 8)

    启用/禁用特定的 HDSPM 声卡。

    注意:ALSA 标准

  • precise_ptr int 数组 (min = 1, max = 8)

    启用精确指针或禁用。

注意

注意:仅当应用程序支持此功能时才使用(这是一种特殊情况)。

  • line_outs_monitor int 数组 (min = 1, max = 8)

    默认情况下,将回放流发送到模拟输出。

注意

注意:每个回放通道都混合到相同编号的输出通道(已路由)。这违反了 ALSA 约定,其中所有通道都必须在加载驱动程序后静音,但以前在其他卡上使用过,所以我历史上再次使用它)

  • enable_monitor int 数组 (min = 1, max = 8)

    默认情况下,在通道 63/64 上启用模拟输出。

注意

注意:此处启用了模拟输出(但未路由)。