软件接口 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-Mixer GUI。因此,混音器控制必须由使用 hwdep 接口的二维控制器提供。

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

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

注意

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

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

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

    • 访问 -- 读写

    • 值 -- “Master” “Slave”

注意

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

  • 时钟源

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

    • 访问 -- 读写

    • 值 -- “AutoSync”, “Internal 32.0 kHz”, “Internal 44.1 kHz”, “Internal 48.0 kHz”, “Internal 64.0 kHz”, “Internal 88.2 kHz”, “Internal 96.0 kHz”

      在特定频率下选择主设备,因此也选择速度模式或从设备(自动同步)。另请参阅“首选同步参考”

警告

!!!!这并非纯硬件功能,但以前由一些 ALSA 驱动程序通过 ALSA 实现,因此我也使用它。!!

  • 首选同步参考

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

    • 访问 -- 读写

    • 值 -- “Word” “MADI”

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

注意

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

  • TX 64 通道

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

    • 访问 -- 读写

    • 值 -- 0 1

      对 MADI 传输使用 64 通道模式 (1) 或 56 通道模式 (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=已同步。

  • 自动同步

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

    • 访问 -- 读取

    • 值 -- “WordClock”, “MADI”, “None”

      同步参考是“WordClock”、“MADI”或无。

  • RX 64ch --- 尚未实现

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

  • AB_inp --- 未经测试

    用于自动输入的输入。

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

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

调用参数

  • index int 数组(最小值 = 1,最大值 = 8)

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

    注意:ALSA 标准

  • id 字符串数组(最小值 = 1,最大值 = 8)

    RME HDSPM 接口的 ID 字符串。

    注意:ALSA 标准

  • enable int 数组(最小值 = 1,最大值 = 8)

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

    注意:ALSA 标准

  • precise_ptr int 数组(最小值 = 1,最大值 = 8)

    启用精确指针,或禁用。

注意

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

  • line_outs_monitor int 数组(最小值 = 1,最大值 = 8)

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

注意

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

  • enable_monitor int 数组(最小值 = 1,最大值 = 8)

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

注意

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