Examples of subscription

Capture from keyboard

Assume MIDI input port = 64:0, application port = 128:0, and queue for timestamp = 1 with real-time stamp. The application port must have capabilty SND_SEQ_PORT_CAP_WRITE.

void capture_keyboard(snd_seq_t *seq)
{
	snd_seq_port_subscribe_t subs;
	memset(&subs, 0, sizeof(subs));
	subs.sender.client = 64;
	subs.sender.port = 0;
	subs.dest.client = 128;
	subs.dest.port = 0;
	subs.queue = 1;
	subs.convert_time = 1;
	subs.realtime = 1;
	snd_seq_subscribe_port(seq, &subs);
}

Output to MIDI device

Assume MIDI output port = 65:1 and application port = 128:0. The application port must have capabilty SND_SEQ_PORT_CAP_READ.

void subscribe_output(snd_seq_t *seq)
{
	snd_seq_port_subscribe_t subs;
	memset(&subs, 0, sizeof(subs));
	subs.sender.client = 128;
	subs.sender.port = 0;
	subs.dest.client = 65;
	subs.dest.port = 1;
	snd_seq_subscribe_port(seq, &subs);
}
This example can be simplified by using snd_seq_connect_to.
void subscribe_output(snd_seq_t *seq)
{
	snd_seq_connect_to(seq, 0, 65, 1);
}

Arbitrary connection

Assume connection from application 128:0 to 129:0, and that subscription is done by the third application (130:0). The sender must have capabilities both SND_SEQ_PORT_CAP_READ and SND_SEQ_PORT_READ_SUBS, and the receiver SND_SEQ_PORT_CAP_WRITE and SND_SEQ_PORT_CAP_WRITE_SUBS, respectively.

// ..in the third application (130:0) ..
void coupling(snd_seq_t *seq)
{
	snd_seq_port_subscribe_t subs;
	memset(&subs, 0, sizeof(subs));
	subs.sender.client = 128;
	subs.sender.port = 0;
	subs.dest.client = 129;
	subs.dest.port = 0;
	snd_seq_subscribe_port(seq, &subs);
}