alsa-project/alsa-gobject pull request #10 was opened from takaswie: This request is to add a new library, libalsaseq, to operate ALSA Sequencer character device. In design of ALSA Sequencer, one character device is added to Linux system. Usually a special file, '/dev/snd/seq', is used for the character device. Userspace applications can operate ALSA Sequencer via the character device. The library supports functionalities of ALSA Sequencer but without queue-related ones. The library includes some GObject-derived object. ALSASeq.UserClient maintains file descriptor of ALSA Sequencer character device, thus it's the center of user operation. The other objects represent data structures in UAPI of ALSA Sequencer. * ALSASeqSystemInfo - struct snd_seq_system_info * ALSASeqClientInfo - struct snd_seq_client_info * ALSASeqClientPool - struct snd_seq_client_pool * ALSASeqPortInfo - struct snd_seq_port_info * ALSASeqSubscribeData - struct snd_seq_port_subscribe The library includes some GObject boxed object just to represent data structures. ALSASeq.Addr is a thin wrapper to struct snd_seq_addr, and ALSASeq.Tstamp is a thin wrapper to struct snd_seq_timestamp. For operations without instances of ALSASeq.UserClient, the library has some global APIs. ALSA Sequencer has some macros. They're represented as GObject enumerations and flags. * ALSASeq.ClientType - one of NO_CLIENT, USER_CLIENT, KERNEL_CLIENT * ALSASeq.FilterAttrFlag - SNDRV_SEQ_FILTER_XXX * ALSASeq.PortCapFlag - SNDRV_PORT_CAP_XXX * ALSASeq.PortAttrFlag - NDRV_SEQ_PORT_TYPE_XXX * ALSASeq.EventType - SNDRV_SEQ_EVENT_XXX * ALSASeq.EventTimestampMode - SNDRV_SEQ_TIME_STAMP_XXX * ALSASeq.EventTimeMode - SNDRV_SEQ_TIME_MODE_XXX * ALSASeq.EventLengthMode - SNDRV_SEQ_EVENT_LENGTH_XXX * ALSASeq.EventPriorityMode - SNDRV_SEQ_PRIORITY_XXX * ALSASeq.PortSubscribeFlag - SNDRV_SEQ_PORT_SUBS_XXX * ALSASeq.QuerySubscribeType - SNDRV_SEQ_QUERY_SUBS_XXX Some specific values for addressing are also represented by GObject enumerations and flags. * ALSASeq.SpecificAddress - SNDRV_SEQ_ADDRESS_XXX * ALSASeq.SpecificClientId - SNDRV_SEQ_CLIENT_XXX * ALSASeq.SpecificPortId - SNDRV_SEQ_PORT_SYSTEM_XXX * ALSASeq.SpecificQueueId - SNDRV_SEQ_QUEUE_XXX ALSA Sequencer has many types of event. The library has an GObject abstract object, ALSASeq.Event. Two objects are derived from it: * ALSASeq.EventFixed * ALSASeq.EventVariable The former has some ways to access to the data of event. The data is represented by GObject boxed object if it's complicated structure: * ALSASeq.EventDataConnect - struct snd_seq_connect * ALSASeq.EventDataNote - struct snd_seq_ev_note * ALSASeq.EventDataCtl - struct snd_seq_ev_ctrl * ALSASeq.EventDataResult - struct snd_seq_result * ALSASeq.EventDataQueue - struct snd_seq_ev_queue_control The latter is for events to have variable length of data blob. ALSASeq.UserClient has 'schedule_event' API to schedule arbitrary event. It also has 'handle-event' GObject signal for applications to handle asynchronous event as an instance of ALSASeq.EventFixed or ALSASeq.EventVariable. The library doesn't have support for below structures since they're useless practically: * struct snd_seq_event_bounce * struct snd_seq_running_info In my later work, queue functions will be added. Request URL : https://github.com/alsa-project/alsa-gobject/pull/10 Patch URL : https://github.com/alsa-project/alsa-gobject/pull/10.patch Repository URL: https://github.com/alsa-project/alsa-gobject