Sequencer Event API
Overview
Sequencer Event API More…
// typedefs typedef struct _snd_seq_remove_events snd_seq_remove_events_t; // global functions int snd_seq_free_event(snd_seq_event_t* ev); ssize_t snd_seq_event_length(snd_seq_event_t* ev); int snd_seq_event_output( snd_seq_t* handle, snd_seq_event_t* ev ); int snd_seq_event_output_buffer( snd_seq_t* handle, snd_seq_event_t* ev ); int snd_seq_event_output_direct( snd_seq_t* handle, snd_seq_event_t* ev ); int snd_seq_event_input( snd_seq_t* handle, snd_seq_event_t** ev ); int snd_seq_event_input_pending( snd_seq_t* seq, int fetch_sequencer ); int snd_seq_drain_output(snd_seq_t* handle); int snd_seq_event_output_pending(snd_seq_t* seq); int snd_seq_extract_output( snd_seq_t* handle, snd_seq_event_t** ev ); int snd_seq_drop_output(snd_seq_t* handle); int snd_seq_drop_output_buffer(snd_seq_t* handle); int snd_seq_drop_input(snd_seq_t* handle); int snd_seq_drop_input_buffer(snd_seq_t* handle); size_t snd_seq_remove_events_sizeof(void); int snd_seq_remove_events_malloc(snd_seq_remove_events_t** ptr); void snd_seq_remove_events_free(snd_seq_remove_events_t* ptr); void snd_seq_remove_events_copy( snd_seq_remove_events_t* dst, const snd_seq_remove_events_t* src ); unsigned int snd_seq_remove_events_get_condition(const snd_seq_remove_events_t* info); int snd_seq_remove_events_get_queue(const snd_seq_remove_events_t* info); const snd_seq_timestamp_t* snd_seq_remove_events_get_time(const snd_seq_remove_events_t* info); const snd_seq_addr_t* snd_seq_remove_events_get_dest(const snd_seq_remove_events_t* info); int snd_seq_remove_events_get_channel(const snd_seq_remove_events_t* info); int snd_seq_remove_events_get_event_type(const snd_seq_remove_events_t* info); int snd_seq_remove_events_get_tag(const snd_seq_remove_events_t* info); void snd_seq_remove_events_set_condition( snd_seq_remove_events_t* info, unsigned int flags ); void snd_seq_remove_events_set_queue( snd_seq_remove_events_t* info, int queue ); void snd_seq_remove_events_set_time( snd_seq_remove_events_t* info, const snd_seq_timestamp_t* time ); void snd_seq_remove_events_set_dest( snd_seq_remove_events_t* info, const snd_seq_addr_t* addr ); void snd_seq_remove_events_set_channel( snd_seq_remove_events_t* info, int channel ); void snd_seq_remove_events_set_event_type( snd_seq_remove_events_t* info, int type ); void snd_seq_remove_events_set_tag( snd_seq_remove_events_t* info, int tag ); int snd_seq_remove_events( snd_seq_t* handle, snd_seq_remove_events_t* info ); // macros #define SND_SEQ_REMOVE_DEST #define SND_SEQ_REMOVE_DEST_CHANNEL #define SND_SEQ_REMOVE_EVENT_TYPE #define SND_SEQ_REMOVE_IGNORE_OFF #define SND_SEQ_REMOVE_INPUT #define SND_SEQ_REMOVE_OUTPUT #define SND_SEQ_REMOVE_TAG_MATCH #define SND_SEQ_REMOVE_TIME_AFTER #define SND_SEQ_REMOVE_TIME_BEFORE #define SND_SEQ_REMOVE_TIME_TICK #define snd_seq_remove_events_alloca(ptr)
Detailed Documentation
Sequencer Event API
Typedefs
typedef struct _snd_seq_remove_events snd_seq_remove_events_t
event removal conditionals
Global Functions
int snd_seq_free_event(snd_seq_event_t* ev)
(DEPRECATED) free an event
In the former version, this function was used to release the event pointer which was allocated by snd_seq_event_input(). In the current version, the event record is not allocated, so you don’t have to call this function any more.
ssize_t snd_seq_event_length(snd_seq_event_t* ev)
calculates the (encoded) byte-stream size of the event
Parameters:
ev |
the event |
Returns:
the size of decoded bytes
int snd_seq_event_output( snd_seq_t* handle, snd_seq_event_t* ev )
output an event
An event is once expanded on the output buffer. The output buffer will be drained automatically if it becomes full.
If events remain unprocessed on output buffer before drained, the size of total byte data on output buffer is returned. If the output buffer is empty, this returns zero.
Parameters:
seq |
sequencer handle |
ev |
event to be output |
Returns:
the number of remaining events or a negative error code
See also:
snd_seq_event_output_direct(), snd_seq_event_output_buffer(), snd_seq_event_output_pending(), snd_seq_drain_output(), snd_seq_drop_output(), snd_seq_extract_output(), snd_seq_remove_events()
int snd_seq_event_output_buffer( snd_seq_t* handle, snd_seq_event_t* ev )
output an event onto the lib buffer without draining buffer
This function doesn’t drain buffer unlike snd_seq_event_output().
Parameters:
seq |
sequencer handle |
ev |
event to be output |
Returns:
the byte size of remaining events. -EAGAIN
if the buffer becomes full.
See also:
int snd_seq_event_output_direct( snd_seq_t* handle, snd_seq_event_t* ev )
output an event directly to the sequencer NOT through output buffer
This function sends an event to the sequencer directly not through the output buffer. When the event is a variable length event, a temporary buffer is allocated inside alsa-lib and the data is copied there before actually sent.
Parameters:
seq |
sequencer handle |
ev |
event to be output |
Returns:
the byte size sent to sequencer or a negative error code
See also:
int snd_seq_event_input( snd_seq_t* handle, snd_seq_event_t** ev )
retrieve an event from sequencer
Obtains an input event from sequencer. The event is created via snd_seq_create_event(), and its pointer is stored on ev argument.
This function firstly receives the event byte-stream data from sequencer as much as possible at once. Then it retrieves the first event record and store the pointer on ev. By calling this function sequentially, events are extracted from the input buffer.
If there is no input from sequencer, function falls into sleep in blocking mode until an event is received, or returns -EAGAIN
error in non-blocking mode. Occasionally, this function may return -ENOSPC
error. This means that the input FIFO of sequencer overran, and some events are lost. Once this error is returned, the input FIFO is cleared automatically.
Function returns the byte size of remaining events on the input buffer if an event is successfully received. Application can determine from the returned value whether to call input once more or not.
Parameters:
seq |
sequencer handle |
ev |
event pointer to be stored |
Returns:
See also:
snd_seq_event_input_pending(), snd_seq_drop_input()
int snd_seq_event_input_pending( snd_seq_t* seq, int fetch_sequencer )
check events in input buffer
If events remain on the input buffer of user-space, function returns the total byte size of events on it. If fetch_sequencer argument is non-zero, this function checks the presence of events on sequencer FIFO When events exist, they are transferred to the input buffer, and the number of received events are returned. If fetch_sequencer argument is zero and no events remain on the input buffer, function simply returns zero.
Returns:
the byte size of remaining input events on input buffer.
See also:
int snd_seq_drain_output(snd_seq_t* handle)
drain output buffer to sequencer
This function drains all pending events on the output buffer. The function returns immediately after the events are sent to the queues regardless whether the events are processed or not. To get synchronization with the all event processes, use snd_seq_sync_output_queue() after calling this function.
Parameters:
seq |
sequencer handle |
Returns:
0 when all events are drained and sent to sequencer. When events still remain on the buffer, the byte size of remaining events are returned. On error a negative error code is returned.
See also:
snd_seq_event_output(), snd_seq_sync_output_queue()
int snd_seq_event_output_pending(snd_seq_t* seq)
return the size of pending events on output buffer
Parameters:
seq |
sequencer handle |
Returns:
the byte size of total of pending events
See also:
int snd_seq_extract_output( snd_seq_t* handle, snd_seq_event_t** ev )
extract the first event in output buffer
Extracts the first event in output buffer. If ev_res is NULL, just remove the event.
Parameters:
seq |
sequencer handle |
ev_res |
event pointer to be extracted |
Returns:
0 on success otherwise a negative error code
See also:
int snd_seq_drop_output(snd_seq_t* handle)
remove all events on output buffer
Removes all events on both user-space output buffer and output memory pool on kernel.
Parameters:
seq |
sequencer handle |
See also:
snd_seq_drain_output(), snd_seq_drop_output_buffer(), snd_seq_remove_events()
int snd_seq_drop_output_buffer(snd_seq_t* handle)
remove all events on user-space output buffer
Removes all events on user-space output buffer. Unlike snd_seq_drain_output(), this function doesn’t remove events on output memory pool of sequencer.
Parameters:
seq |
sequencer handle |
See also:
int snd_seq_drop_input(snd_seq_t* handle)
clear input buffer and and remove events in sequencer queue
Parameters:
seq |
sequencer handle |
See also:
snd_seq_drop_input_buffer(), snd_seq_remove_events()
int snd_seq_drop_input_buffer(snd_seq_t* handle)
remove all events on user-space input FIFO
Parameters:
seq |
sequencer handle |
See also:
size_t snd_seq_remove_events_sizeof(void)
get size of snd_seq_remove_events_t
Returns:
size in bytes
int snd_seq_remove_events_malloc(snd_seq_remove_events_t** ptr)
allocate an empty snd_seq_remove_events_t using standard malloc
Parameters:
ptr |
returned pointer |
Returns:
0 on success otherwise negative error code
void snd_seq_remove_events_free(snd_seq_remove_events_t* ptr)
frees a previously allocated snd_seq_remove_events_t
Parameters:
obj |
pointer to object to free |
void snd_seq_remove_events_copy( snd_seq_remove_events_t* dst, const snd_seq_remove_events_t* src )
copy one snd_seq_remove_events_t to another
Parameters:
dst |
pointer to destination |
src |
pointer to source |
unsigned int snd_seq_remove_events_get_condition(const snd_seq_remove_events_t* info)
Get the removal condition bits.
Parameters:
info |
remove_events container |
Returns:
removal condition bits
See also:
int snd_seq_remove_events_get_queue(const snd_seq_remove_events_t* info)
Get the queue as removal condition.
Parameters:
info |
remove_events container |
Returns:
queue id
See also:
const snd_seq_timestamp_t* snd_seq_remove_events_get_time(const snd_seq_remove_events_t* info)
Get the event timestamp as removal condition.
Parameters:
info |
remove_events container |
Returns:
time stamp
See also:
const snd_seq_addr_t* snd_seq_remove_events_get_dest(const snd_seq_remove_events_t* info)
Get the event destination address as removal condition.
Parameters:
info |
remove_events container |
Returns:
destination address
See also:
int snd_seq_remove_events_get_channel(const snd_seq_remove_events_t* info)
Get the event channel as removal condition.
Parameters:
info |
remove_events container |
Returns:
channel number
See also:
int snd_seq_remove_events_get_event_type(const snd_seq_remove_events_t* info)
Get the event type as removal condition.
Parameters:
info |
remove_events container |
Returns:
event type
See also:
int snd_seq_remove_events_get_tag(const snd_seq_remove_events_t* info)
Get the event tag id as removal condition.
Parameters:
info |
remove_events container |
Returns:
tag id
See also:
void snd_seq_remove_events_set_condition( snd_seq_remove_events_t* info, unsigned int flags )
Set the removal condition bits.
Parameters:
info |
remove_events container |
flags |
removal condition bits |
See also:
void snd_seq_remove_events_set_queue( snd_seq_remove_events_t* info, int queue )
Set the queue as removal condition.
Parameters:
info |
remove_events container |
queue |
queue id |
See also:
void snd_seq_remove_events_set_time( snd_seq_remove_events_t* info, const snd_seq_timestamp_t* time )
Set the timestamp as removal condition.
Parameters:
info |
remove_events container |
time |
timestamp pointer |
See also:
void snd_seq_remove_events_set_dest( snd_seq_remove_events_t* info, const snd_seq_addr_t* addr )
Set the destination address as removal condition.
Parameters:
info |
remove_events container |
addr |
destination address |
See also:
void snd_seq_remove_events_set_channel( snd_seq_remove_events_t* info, int channel )
Set the channel as removal condition.
Parameters:
info |
remove_events container |
channel |
channel number |
See also:
void snd_seq_remove_events_set_event_type( snd_seq_remove_events_t* info, int type )
Set the event type as removal condition.
Parameters:
info |
remove_events container |
type |
event type |
See also:
void snd_seq_remove_events_set_tag( snd_seq_remove_events_t* info, int tag )
Set the event tag as removal condition.
Parameters:
info |
remove_events container |
tag |
tag id |
See also:
int snd_seq_remove_events( snd_seq_t* handle, snd_seq_remove_events_t* info )
remove events on input/output buffers and pools
Removes matching events with the given condition from input/output buffers and pools. The removal condition is specified in rmp argument.
Parameters:
seq |
sequencer handle |
rmp |
remove event container |
See also:
snd_seq_event_output(), snd_seq_drop_output(), snd_seq_reset_pool_output()
Macros
#define SND_SEQ_REMOVE_DEST
Restrict by destination q:client:port
#define SND_SEQ_REMOVE_DEST_CHANNEL
Restrict by channel
#define SND_SEQ_REMOVE_EVENT_TYPE
Restrict to event type
#define SND_SEQ_REMOVE_IGNORE_OFF
Do not flush off events
#define SND_SEQ_REMOVE_INPUT
Remove conditional flags Flush input queues
#define SND_SEQ_REMOVE_OUTPUT
Flush output queues
#define SND_SEQ_REMOVE_TAG_MATCH
Restrict to events with given tag
#define SND_SEQ_REMOVE_TIME_AFTER
Restrict to time or after
#define SND_SEQ_REMOVE_TIME_BEFORE
Restrict to before time
#define SND_SEQ_REMOVE_TIME_TICK
Time is in ticks
#define snd_seq_remove_events_alloca(ptr)
allocate a snd_seq_remove_events_t container on stack