Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages | Examples

seqmid.h

00001 
00028 #ifndef __ALSA_SEQMID_H
00029 #define __ALSA_SEQMID_H
00030 
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034 
00048 #define snd_seq_ev_clear(ev) \
00049         memset(ev, 0, sizeof(snd_seq_event_t))
00050 
00061 #define snd_seq_ev_set_dest(ev,c,p) \
00062         ((ev)->dest.client = (c), (ev)->dest.port = (p))
00063 
00072 #define snd_seq_ev_set_subs(ev) \
00073         ((ev)->dest.client = SND_SEQ_ADDRESS_SUBSCRIBERS,\
00074          (ev)->dest.port = SND_SEQ_ADDRESS_UNKNOWN)
00075 
00084 #define snd_seq_ev_set_broadcast(ev) \
00085         ((ev)->dest.client = SND_SEQ_ADDRESS_BROADCAST,\
00086          (ev)->dest.port = SND_SEQ_ADDRESS_BROADCAST)
00087 
00095 #define snd_seq_ev_set_source(ev,p) \
00096         ((ev)->source.port = (p))
00097 
00107 #define snd_seq_ev_set_direct(ev) \
00108         ((ev)->queue = SND_SEQ_QUEUE_DIRECT)
00109 
00122 #define snd_seq_ev_schedule_tick(ev, q, relative, ttick) \
00123         ((ev)->flags &= ~(SND_SEQ_TIME_STAMP_MASK | SND_SEQ_TIME_MODE_MASK),\
00124          (ev)->flags |= SND_SEQ_TIME_STAMP_TICK,\
00125          (ev)->flags |= (relative) ? SND_SEQ_TIME_MODE_REL : SND_SEQ_TIME_MODE_ABS,\
00126          (ev)->time.tick = (ttick),\
00127          (ev)->queue = (q))
00128 
00141 #define snd_seq_ev_schedule_real(ev, q, relative, rtime) \
00142         ((ev)->flags &= ~(SND_SEQ_TIME_STAMP_MASK | SND_SEQ_TIME_MODE_MASK),\
00143          (ev)->flags |= SND_SEQ_TIME_STAMP_REAL,\
00144          (ev)->flags |= (relative) ? SND_SEQ_TIME_MODE_REL : SND_SEQ_TIME_MODE_ABS,\
00145          (ev)->time.time = *(rtime),\
00146          (ev)->queue = (q))
00147 
00153 #define snd_seq_ev_set_priority(ev, high_prior) \
00154         ((ev)->flags &= ~SND_SEQ_PRIORITY_MASK,\
00155          (ev)->flags |= (high_prior) ? SND_SEQ_PRIORITY_HIGH : SND_SEQ_PRIORITY_NORMAL)
00156 
00165 #define snd_seq_ev_set_fixed(ev) \
00166         ((ev)->flags &= ~SND_SEQ_EVENT_LENGTH_MASK,\
00167          (ev)->flags |= SND_SEQ_EVENT_LENGTH_FIXED)
00168 
00179 #define snd_seq_ev_set_variable(ev, datalen, dataptr) \
00180         ((ev)->flags &= ~SND_SEQ_EVENT_LENGTH_MASK,\
00181          (ev)->flags |= SND_SEQ_EVENT_LENGTH_VARIABLE,\
00182          (ev)->data.ext.len = (datalen),\
00183          (ev)->data.ext.ptr = (dataptr))
00184 
00195 #define snd_seq_ev_set_varusr(ev, datalen, dataptr) \
00196         ((ev)->flags &= ~SND_SEQ_EVENT_LENGTH_MASK,\
00197          (ev)->flags |= SND_SEQ_EVENT_LENGTH_VARUSR,\
00198          (ev)->data.ext.len = (datalen),\
00199          (ev)->data.ext.ptr = (dataptr))
00200 
00208 #define snd_seq_ev_set_queue_control(ev, typ, q, val) \
00209         ((ev)->type = (typ),\
00210          snd_seq_ev_set_dest(ev, SND_SEQ_CLIENT_SYSTEM, SND_SEQ_PORT_SYSTEM_TIMER),\
00211          (ev)->data.queue.queue = (q),\
00212          (ev)->data.queue.param.value = (val))
00213 
00221 #define snd_seq_ev_set_queue_start(ev, q) \
00222         snd_seq_ev_set_queue_control(ev, SND_SEQ_EVENT_START, q, 0)
00223 
00231 #define snd_seq_ev_set_queue_stop(ev, q) \
00232         snd_seq_ev_set_queue_control(ev, SND_SEQ_EVENT_STOP, q, 0)
00233 
00241 #define snd_seq_ev_set_queue_continue(ev, q) \
00242         snd_seq_ev_set_queue_control(ev, SND_SEQ_EVENT_CONTINUE, q, 0)
00243 
00250 #define snd_seq_ev_set_queue_tempo(ev, q, val) \
00251         snd_seq_ev_set_queue_control(ev, SND_SEQ_EVENT_TEMPO, q, val)
00252 
00259 #define snd_seq_ev_set_queue_pos_real(ev, q, rtime) \
00260         ((ev)->type = SND_SEQ_EVENT_SETPOS_TIME,\
00261          snd_seq_ev_set_dest(ev, SND_SEQ_CLIENT_SYSTEM, SND_SEQ_PORT_SYSTEM_TIMER),\
00262          (ev)->data.queue.queue = (q),\
00263          (ev)->data.queue.param.time.time = *(rtime))
00264 
00271 #define snd_seq_ev_set_queue_pos_tick(ev, q, ttime) \
00272         ((ev)->type = SND_SEQ_EVENT_SETPOS_TICK,\
00273          snd_seq_ev_set_dest(ev, SND_SEQ_CLIENT_SYSTEM, SND_SEQ_PORT_SYSTEM_TIMER),\
00274          (ev)->data.queue.queue = (q),\
00275          (ev)->data.queue.param.time.tick = (ttime))
00276 
00277 /* set and send a queue control event */
00278 int snd_seq_control_queue(snd_seq_t *seq, int q, int type, int value, snd_seq_event_t *ev);
00279 
00286 #define snd_seq_start_queue(seq, q, ev) \
00287         snd_seq_control_queue(seq, q, SND_SEQ_EVENT_START, 0, ev)
00288 
00295 #define snd_seq_stop_queue(seq, q, ev) \
00296         snd_seq_control_queue(seq, q, SND_SEQ_EVENT_STOP, 0, ev)
00297 
00304 #define snd_seq_continue_queue(seq, q, ev) \
00305         snd_seq_control_queue(seq, q, SND_SEQ_EVENT_CONTINUE, 0, ev)
00306 
00314 #define snd_seq_change_queue_tempo(seq, q, tempo, ev) \
00315         snd_seq_control_queue(seq, q, SND_SEQ_EVENT_TEMPO, tempo, ev)
00316 
00317 /* create a port - simple version - return the port number */
00318 int snd_seq_create_simple_port(snd_seq_t *seq, const char *name,
00319                                unsigned int caps, unsigned int type);
00320 /* delete the port */
00321 int snd_seq_delete_simple_port(snd_seq_t *seq, int port);
00322 
00323 /* simple subscription between this port and another port
00324    (w/o exclusive & time conversion)
00325    */
00326 int snd_seq_connect_from(snd_seq_t *seq, int my_port, int src_client, int src_port);
00327 int snd_seq_connect_to(snd_seq_t *seq, int my_port, int dest_client, int dest_port);
00328 int snd_seq_disconnect_from(snd_seq_t *seq, int my_port, int src_client, int src_port);
00329 int snd_seq_disconnect_to(snd_seq_t *seq, int my_port, int dest_client, int dest_port);
00330 
00331 /*
00332  * set client information
00333  */
00334 int snd_seq_set_client_name(snd_seq_t *seq, const char *name);
00335 int snd_seq_set_client_event_filter(snd_seq_t *seq, int event_type);
00336 int snd_seq_set_client_pool_output(snd_seq_t *seq, size_t size);
00337 int snd_seq_set_client_pool_output_room(snd_seq_t *seq, size_t size);
00338 int snd_seq_set_client_pool_input(snd_seq_t *seq, size_t size);
00339 /* sync output queue */
00340 int snd_seq_sync_output_queue(snd_seq_t *seq);
00341 
00342 /*
00343  * parse the given string and get the sequencer address
00344  */
00345 int snd_seq_parse_address(snd_seq_t *seq, snd_seq_addr_t *addr, const char *str);
00346 
00347 /*
00348  * reset client input/output pool
00349  */
00350 int snd_seq_reset_pool_output(snd_seq_t *seq);
00351 int snd_seq_reset_pool_input(snd_seq_t *seq);
00352 
00361 #define snd_seq_ev_set_note(ev, ch, key, vel, dur) \
00362         ((ev)->type = SND_SEQ_EVENT_NOTE,\
00363          snd_seq_ev_set_fixed(ev),\
00364          (ev)->data.note.channel = (ch),\
00365          (ev)->data.note.note = (key),\
00366          (ev)->data.note.velocity = (vel),\
00367          (ev)->data.note.duration = (dur))
00368 
00376 #define snd_seq_ev_set_noteon(ev, ch, key, vel) \
00377         ((ev)->type = SND_SEQ_EVENT_NOTEON,\
00378          snd_seq_ev_set_fixed(ev),\
00379          (ev)->data.note.channel = (ch),\
00380          (ev)->data.note.note = (key),\
00381          (ev)->data.note.velocity = (vel))
00382 
00390 #define snd_seq_ev_set_noteoff(ev, ch, key, vel) \
00391         ((ev)->type = SND_SEQ_EVENT_NOTEOFF,\
00392          snd_seq_ev_set_fixed(ev),\
00393          (ev)->data.note.channel = (ch),\
00394          (ev)->data.note.note = (key),\
00395          (ev)->data.note.velocity = (vel))
00396 
00404 #define snd_seq_ev_set_keypress(ev,ch,key,vel) \
00405         ((ev)->type = SND_SEQ_EVENT_KEYPRESS,\
00406          snd_seq_ev_set_fixed(ev),\
00407          (ev)->data.note.channel = (ch),\
00408          (ev)->data.note.note = (key),\
00409          (ev)->data.note.velocity = (vel))
00410 
00418 #define snd_seq_ev_set_controller(ev,ch,cc,val) \
00419         ((ev)->type = SND_SEQ_EVENT_CONTROLLER,\
00420          snd_seq_ev_set_fixed(ev),\
00421          (ev)->data.control.channel = (ch),\
00422          (ev)->data.control.param = (cc),\
00423          (ev)->data.control.value = (val))
00424 
00431 #define snd_seq_ev_set_pgmchange(ev,ch,val) \
00432         ((ev)->type = SND_SEQ_EVENT_PGMCHANGE,\
00433          snd_seq_ev_set_fixed(ev),\
00434          (ev)->data.control.channel = (ch),\
00435          (ev)->data.control.value = (val))
00436 
00443 #define snd_seq_ev_set_pitchbend(ev,ch,val) \
00444         ((ev)->type = SND_SEQ_EVENT_PITCHBEND,\
00445          snd_seq_ev_set_fixed(ev),\
00446          (ev)->data.control.channel = (ch),\
00447          (ev)->data.control.value = (val))
00448 
00455 #define snd_seq_ev_set_chanpress(ev,ch,val) \
00456         ((ev)->type = SND_SEQ_EVENT_CHANPRESS,\
00457          snd_seq_ev_set_fixed(ev),\
00458          (ev)->data.control.channel = (ch),\
00459          (ev)->data.control.value = (val))
00460 
00469 #define snd_seq_ev_set_sysex(ev,datalen,dataptr) \
00470         ((ev)->type = SND_SEQ_EVENT_SYSEX,\
00471          snd_seq_ev_set_variable(ev, datalen, dataptr))
00472 
00475 #ifdef __cplusplus
00476 }
00477 #endif
00478 
00479 #endif /* __ALSA_SEQMID_H */
00480 

Generated on Mon May 3 16:15:22 2004 for ALSA project - the C library reference by doxygen 1.3.6