alsa-gobject: add library to operate ALSA Sequencer character device without queue feature
GitHub pull_request - opened
github at alsa-project.org
Wed Apr 1 11:28:06 CEST 2020
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
More information about the Alsa-devel
mailing list