ALSA 的系统 MIDI 客户端的计时器和公告端口是什么以及如何使用它?

ALSA 的系统 MIDI 客户端的计时器和公告端口是什么以及如何使用它?

该命令aconnect -lio始终显示以下条目:

client 0: 'System' [type=noyau]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=noyau]
    0 'Midi Through Port-0'

“Midi Through” 客户端的含义很明显,因为它是 MIDI 世界中的标准,并且易于使用。“System” 客户端的“Timer” 端口具有相当明显的抽象含义,但似乎没有关于它的文档。“Announce” 端口看起来很神秘,并且是标准 MIDI 设备所不了解的(或者只是对我来说是这样)。在网上搜索了很长时间关于“Timer”和“Announce”端口的信息,但一无所获。

问题:是否有一些提示可以进一步了解“系统”客户端的“计时器”和“公告”端口?我的意思是,回答这类问题:可以从/向它接收/发送什么消息,以及如何启动/停止/配置(尤其是对于“计时器”)。

这主要是平台或系统文档问题,但由于它也与 ALSA 有关,我不确定是否最好将其发布在这里或 StackOverflow 上。如果我的猜测是错误的,请接受我的道歉。

答案1

没关系,我找到了它的文档,它在 ALSA API 文档中(我第一次看的时候错过了它):

ALSA 项目 - C 库参考 (alsa-project.org)

序列器核心在系统客户端 SND_SEQ_CLIENT_SYSTEM 上有两个预定义的系统端口:SND_SEQ_PORT_SYSTEM_TIMER 和 SND_SEQ_PORT_SYSTEM_ANNOUNCE。SND_SEQ_PORT_SYSTEM_TIMER 是系统计时器端口,SND_SEQ_PORT_SYSTEM_ANNOUNCE 是系统公告端口。为了从客户端控制队列,客户端应向系统计时器端口发送队列控制事件,如启动、停止和继续队列、更改节奏等。然后序列器系统根据收到的事件处理队列。此端口支持订阅。收到的计时器事件将广播给所有订阅的客户端。

关于SND_SEQ_PORT_SYSTEM_ANNOUNCE

后者端口不接收消息,但支持订阅,当每个客户端或端口attach、detach或者修改时,都会从这个端口向订阅者发送公告。

例如SND_SEQ_PORT_SYSTEM_TIMER,从 可以接收SND_SEQ_EVENT_START事件,从SND_SEQ_PORT_SYSTEM_ANNOUNCE可以接收SND_SEQ_EVENT_PORT_SUBSCRIBED事件。

看来我应该把这篇文章发布在 StackOverflow 上,而不是 AskUbuntu 上。如果有谁看到这篇文章,请把它移到 StackOverflow(这个问题和它的答案对其他人来说可能仍然有价值)。

相关内容