--- alsa.vapi.original	2016-03-13 23:05:38.251642984 +1100
+++ alsa.vapi	2016-03-15 22:24:22.547891242 +1100
@@ -807,4 +807,172 @@ namespace Alsa {
         public unowned string get_name();
         public uint get_index();
     }
+
+    [CCode (cname = "snd_seq_client_type_t", cprefix = "SND_SEQ_", has_type_id = false)]
+    public enum SeqClientType
+    {
+        USER_CLIENT,
+        KERNEL_CLIENT
+    }
+
+    [CCode (cname = "snd_seq_query_subs_type_t", cprefix = "SND_SEQ_QUERY_SUBS_", has_type_id = false)]
+    public enum SeqQuerySubsType
+    {
+        READ,
+        WRITE
+    }
+
+    [CCode (cname = "int", cprefix = "SND_SEQ_OPEN_", has_type_id = false)]
+    public enum SeqOpenMode
+    {
+        OUTPUT,
+        INPUT,
+        DUPLEX
+    }
+
+    [CCode (cname = "uint", cprefix = "SND_SEQ_PORT_CAP_", has_type_id = false)]
+    [Flags]
+    public enum SeqPortCap
+    {
+        READ,
+        WRITE,
+        SYNC_READ,
+        SYNC_WRITE,
+        DUPLEX,
+        SUBS_READ,
+        SUBS_WRITE,
+        NO_EXPORT
+    }
+
+    [CCode (cname = "uint", cprefix = "SND_SEQ_PORT_TYPE_", has_type_id = false)]
+    [Flags]
+    public enum SeqPortType
+    {
+        SPECIFIC,
+        MIDI_GENERIC,
+        MIDI_GM,
+        MIDI_GS,
+        MIDI_XG,
+        MIDI_MT32,
+        MIDI_GM2,
+        SYNTH,
+        DIRECT_SAMPLE,
+        SAMPLE,
+        HARDWARE,
+        SOFTWARE,
+        SYNTHESIZER,
+        PORT,
+        APPLICATION
+    }
+
+    [Compact]
+    [CCode (cname = "snd_seq_addr_t", free_function = "")]
+    public struct SeqAddr
+    {
+        public uint8 client;
+        public uint8 port;
+    }
+
+    [Compact]
+    [CCode (cname = "snd_seq_client_info_t", cprefix = "snd_seq_client_info_", free_function = "")]
+    public class SeqClientInfo
+    {
+        public static int alloca( out SeqClientInfo info );
+        public static int malloc( out SeqClientInfo info );
+        public void free();
+        public void copy( SeqClientInfo source );
+        public int get_client();
+        public SeqClientType get_type();
+        public unowned string get_name();
+        public int get_broadcast_filter();
+        public int get_error_bounce();
+        public string get_event_filter(); /* TODO const unsigned char *? */
+        public int get_num_ports();
+        public int get_event_lost();
+        public void set_client( int client );
+        public void set_name( string name );
+        public void set_broadcast_filter( int val );
+        public void set_error_bounce( int val );
+        public void set_event_filter( string filter ); /* TODO unsigned char *? */
+        public void event_filter_clear();
+        public void event_filter_add( int event_type );
+        public void event_filter_del( int event_type );
+        public void event_filter_check( int event_type );
+    }
+
+    [Compact]
+    [CCode (cname = "snd_seq_port_info_t", cprefix = "snd_seq_port_info_", free_function = "")]
+    public class SeqPortInfo
+    {
+        public static int alloca( out SeqPortInfo info );
+        public static int malloc( out SeqPortInfo info );
+        public void free();
+        public void copy( SeqPortInfo source );
+        public int get_client();
+        public int get_port();
+        public SeqAddr? get_addr(); /* TODO SeqAddr pointer? */
+        public unowned string get_name();
+        public SeqPortCap get_capability();
+        public SeqPortType get_type();
+        public int get_midi_channels();
+        public int get_midi_voices();
+        public int get_synth_voices();
+        public int get_read_use();
+        public int get_write_use();
+        public int get_port_specified();
+        public int get_timestamping();
+        public int get_timestamp_real();
+        public int get_timestamp_queue();
+        public void set_client( int client );
+        public void set_port( int port );
+        public void set_addr( SeqAddr addr ); /* TODO SeqAddr pointer? */
+        public void set_name( string name );
+        public void set_capability( uint capability );
+        public void set_type( uint type );
+        public void set_midi_channels( int channels );
+        public void set_midi_voices( int voices );
+        public void set_synth_voices( int voices );
+        public void set_port_specified( int val );
+        public void set_timestamping( int enable );
+        public void set_timestamp_real( int realtime );
+        public void set_timestamp_queue( int queue );
+    }
+
+    [Compact]
+    [CCode (cname = "snd_seq_t", cprefix = "snd_seq_", free_function = "")]
+    public class SeqDevice
+    {
+        public static int open(out SeqDevice seq, string name, SeqOpenMode streams, int mode);
+        public int close();
+        public int query_next_client(SeqClientInfo info);
+        public int query_next_port(SeqPortInfo info);
+        public int query_port_subscribers(SeqQuerySubscribe subs);
+        public int query_named_queue(string name);
+    }
+
+    [Compact]
+    [CCode (cname = "snd_seq_query_subscribe_t", cprefix = "snd_seq_query_subscribe_")]
+    public class SeqQuerySubscribe
+    {
+        public static int alloca( out SeqQuerySubscribe subscribe );
+        public static int malloc( out SeqQuerySubscribe subscribe );
+        public void free();
+        public void copy( SeqQuerySubscribe source );
+        public int get_client();
+        public int get_port();
+        public SeqAddr? get_root();
+        public SeqQuerySubsType get_type();
+        public int get_index();
+        public int get_num_subs();
+        public SeqAddr? get_addr();
+        public int get_queue();
+        public int get_exclusive();
+        public int get_time_update();
+        public int get_time_real();
+        public void set_client( int client );
+        public void set_port( int port );
+        public void set_root( SeqAddr addr );
+        public void set_type( SeqQuerySubsType type );
+        public void set_index( int index );
+    }
 }
