该命令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(这个问题和它的答案对其他人来说可能仍然有价值)。