public void EnumerateClientsAndPortsPrimitive() { using (var seq = new AlsaSequencer(AlsaIOType.Output, AlsaIOMode.NonBlocking)) { var cli = new AlsaClientInfo(); cli.Client = -1; while (seq.QueryNextClient(cli)) { TextWriter.Null.WriteLine("Client:" + cli.Client); foreach (var cpi in cli.GetType().GetProperties()) { TextWriter.Null.WriteLine($" [{cpi}]\t{cpi.GetValue (cli)}"); } var port = new AlsaPortInfo(); port.Client = cli.Client; port.Port = -1; while (seq.QueryNextPort(port)) { TextWriter.Null.WriteLine(" Port:" + port.Id); foreach (var ppi in port.GetType().GetProperties()) { TextWriter.Null.WriteLine($" [{ppi}]\t{ppi.GetValue (port)}"); } } } } }
// app generates messages --> [RETURNED PORT] --> [output device port] AlsaPortInfo CreateOutputConnectedPort(AlsaPortInfo pinfo, string portName = "alsa-sharp output") { var portId = output.CreateSimplePort(portName, output_connected_cap, midi_port_type); var sub = new AlsaPortSubscription(); sub.Sender.Client = (byte)output_client_id; sub.Sender.Port = (byte)portId; sub.Destination.Client = (byte)pinfo.Client; sub.Destination.Port = (byte)pinfo.Port; output.SubscribePort(sub); return(output.GetPort(sub.Sender.Client, sub.Sender.Port)); }
// [input device port] --> [RETURNED PORT] --> app handles messages AlsaPortInfo CreateInputConnectedPort(AlsaSequencer seq, AlsaPortInfo pinfo, string portName = "alsa-sharp input") { var portId = seq.CreateSimplePort(portName, input_connected_cap, midi_port_type); var sub = new AlsaPortSubscription(); sub.Destination.Client = (byte)seq.CurrentClientId; sub.Destination.Port = (byte)portId; sub.Sender.Client = (byte)pinfo.Client; sub.Sender.Port = (byte)pinfo.Port; seq.SubscribePort(sub); return(seq.GetPort(sub.Destination.Client, sub.Destination.Port)); }
IEnumerable <AlsaPortInfo> EnumerateMatchingPorts(AlsaSequencer seq, AlsaPortCapabilities cap) { var cinfo = new AlsaClientInfo { Client = -1 }; while (seq.QueryNextClient(cinfo)) { var pinfo = new AlsaPortInfo { Client = cinfo.Client, Port = -1 }; while (seq.QueryNextPort(pinfo)) { if ((pinfo.PortType & midi_port_type) != 0 && (pinfo.Capabilities & cap) == cap) { yield return(pinfo.Clone()); } } } }
public AlsaMidiPortDetails(AlsaPortInfo port) { this.port = port; }