Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/alsa/seq.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 /** | |
2 * \file include/seq.h | |
3 * \brief Application interface library for the ALSA driver | |
4 * \author Jaroslav Kysela <perex@perex.cz> | |
5 * \author Abramo Bagnara <abramo@alsa-project.org> | |
6 * \author Takashi Iwai <tiwai@suse.de> | |
7 * \date 1998-2001 | |
8 */ | |
9 /* | |
10 * Application interface library for the ALSA driver | |
11 * | |
12 * | |
13 * This library is free software; you can redistribute it and/or modify | |
14 * it under the terms of the GNU Lesser General Public License as | |
15 * published by the Free Software Foundation; either version 2.1 of | |
16 * the License, or (at your option) any later version. | |
17 * | |
18 * This program is distributed in the hope that it will be useful, | |
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 * GNU Lesser General Public License for more details. | |
22 * | |
23 * You should have received a copy of the GNU Lesser General Public | |
24 * License along with this library; if not, write to the Free Software | |
25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
26 * | |
27 */ | |
28 | |
29 #ifndef __ALSA_SEQ_H | |
30 #define __ALSA_SEQ_H | |
31 | |
32 #ifdef __cplusplus | |
33 extern "C" { | |
34 #endif | |
35 | |
36 /** | |
37 * \defgroup Sequencer MIDI Sequencer | |
38 * MIDI Sequencer Interface. | |
39 * See \ref seq page for more details. | |
40 * \{ | |
41 */ | |
42 | |
43 /** dlsym version for interface entry callback */ | |
44 #define SND_SEQ_DLSYM_VERSION _dlsym_seq_001 | |
45 | |
46 /** Sequencer handle */ | |
47 typedef struct _snd_seq snd_seq_t; | |
48 | |
49 /** | |
50 * sequencer opening stream types | |
51 */ | |
52 #define SND_SEQ_OPEN_OUTPUT 1 /**< open for output (write) */ | |
53 #define SND_SEQ_OPEN_INPUT 2 /**< open for input (read) */ | |
54 #define SND_SEQ_OPEN_DUPLEX (SND_SEQ_OPEN_OUTPUT|SND_SEQ_OPEN_INPUT) /**< open for both input and output (read/write) */ | |
55 | |
56 /** | |
57 * sequencer opening mode | |
58 */ | |
59 #define SND_SEQ_NONBLOCK 0x0001 /**< non-blocking mode (flag to open mode) */ | |
60 | |
61 /** sequencer handle type */ | |
62 typedef enum _snd_seq_type { | |
63 SND_SEQ_TYPE_HW, /**< hardware */ | |
64 SND_SEQ_TYPE_SHM, /**< shared memory (NYI) */ | |
65 SND_SEQ_TYPE_INET /**< network (NYI) */ | |
66 } snd_seq_type_t; | |
67 | |
68 /** special client (port) ids */ | |
69 #define SND_SEQ_ADDRESS_UNKNOWN 253 /**< unknown source */ | |
70 #define SND_SEQ_ADDRESS_SUBSCRIBERS 254 /**< send event to all subscribed ports */ | |
71 #define SND_SEQ_ADDRESS_BROADCAST 255 /**< send event to all queues/clients/ports/channels */ | |
72 | |
73 /** known client numbers */ | |
74 #define SND_SEQ_CLIENT_SYSTEM 0 /**< system client */ | |
75 | |
76 /* | |
77 */ | |
78 int snd_seq_open(snd_seq_t **handle, const char *name, int streams, int mode); | |
79 int snd_seq_open_lconf(snd_seq_t **handle, const char *name, int streams, int mode, snd_config_t *lconf); | |
80 const char *snd_seq_name(snd_seq_t *seq); | |
81 snd_seq_type_t snd_seq_type(snd_seq_t *seq); | |
82 int snd_seq_close(snd_seq_t *handle); | |
83 int snd_seq_poll_descriptors_count(snd_seq_t *handle, short events); | |
84 int snd_seq_poll_descriptors(snd_seq_t *handle, struct pollfd *pfds, unsigned int space, short events); | |
85 int snd_seq_poll_descriptors_revents(snd_seq_t *seq, struct pollfd *pfds, unsigned int nfds, unsigned short *revents); | |
86 int snd_seq_nonblock(snd_seq_t *handle, int nonblock); | |
87 int snd_seq_client_id(snd_seq_t *handle); | |
88 | |
89 size_t snd_seq_get_output_buffer_size(snd_seq_t *handle); | |
90 size_t snd_seq_get_input_buffer_size(snd_seq_t *handle); | |
91 int snd_seq_set_output_buffer_size(snd_seq_t *handle, size_t size); | |
92 int snd_seq_set_input_buffer_size(snd_seq_t *handle, size_t size); | |
93 | |
94 /** system information container */ | |
95 typedef struct _snd_seq_system_info snd_seq_system_info_t; | |
96 | |
97 size_t snd_seq_system_info_sizeof(void); | |
98 /** allocate a #snd_seq_system_info_t container on stack */ | |
99 #define snd_seq_system_info_alloca(ptr) \ | |
100 __snd_alloca(ptr, snd_seq_system_info) | |
101 int snd_seq_system_info_malloc(snd_seq_system_info_t **ptr); | |
102 void snd_seq_system_info_free(snd_seq_system_info_t *ptr); | |
103 void snd_seq_system_info_copy(snd_seq_system_info_t *dst, const snd_seq_system_info_t *src); | |
104 | |
105 int snd_seq_system_info_get_queues(const snd_seq_system_info_t *info); | |
106 int snd_seq_system_info_get_clients(const snd_seq_system_info_t *info); | |
107 int snd_seq_system_info_get_ports(const snd_seq_system_info_t *info); | |
108 int snd_seq_system_info_get_channels(const snd_seq_system_info_t *info); | |
109 int snd_seq_system_info_get_cur_clients(const snd_seq_system_info_t *info); | |
110 int snd_seq_system_info_get_cur_queues(const snd_seq_system_info_t *info); | |
111 | |
112 int snd_seq_system_info(snd_seq_t *handle, snd_seq_system_info_t *info); | |
113 | |
114 /** \} */ | |
115 | |
116 | |
117 /** | |
118 * \defgroup SeqClient Sequencer Client Interface | |
119 * Sequencer Client Interface | |
120 * \ingroup Sequencer | |
121 * \{ | |
122 */ | |
123 | |
124 /** client information container */ | |
125 typedef struct _snd_seq_client_info snd_seq_client_info_t; | |
126 | |
127 /** client types */ | |
128 typedef enum snd_seq_client_type { | |
129 SND_SEQ_USER_CLIENT = 1, /**< user client */ | |
130 SND_SEQ_KERNEL_CLIENT = 2 /**< kernel client */ | |
131 } snd_seq_client_type_t; | |
132 | |
133 size_t snd_seq_client_info_sizeof(void); | |
134 /** allocate a #snd_seq_client_info_t container on stack */ | |
135 #define snd_seq_client_info_alloca(ptr) \ | |
136 __snd_alloca(ptr, snd_seq_client_info) | |
137 int snd_seq_client_info_malloc(snd_seq_client_info_t **ptr); | |
138 void snd_seq_client_info_free(snd_seq_client_info_t *ptr); | |
139 void snd_seq_client_info_copy(snd_seq_client_info_t *dst, const snd_seq_client_info_t *src); | |
140 | |
141 int snd_seq_client_info_get_client(const snd_seq_client_info_t *info); | |
142 snd_seq_client_type_t snd_seq_client_info_get_type(const snd_seq_client_info_t *info); | |
143 const char *snd_seq_client_info_get_name(snd_seq_client_info_t *info); | |
144 int snd_seq_client_info_get_broadcast_filter(const snd_seq_client_info_t *info); | |
145 int snd_seq_client_info_get_error_bounce(const snd_seq_client_info_t *info); | |
146 int snd_seq_client_info_get_card(const snd_seq_client_info_t *info); | |
147 int snd_seq_client_info_get_pid(const snd_seq_client_info_t *info); | |
148 const unsigned char *snd_seq_client_info_get_event_filter(const snd_seq_client_info_t *info); | |
149 int snd_seq_client_info_get_num_ports(const snd_seq_client_info_t *info); | |
150 int snd_seq_client_info_get_event_lost(const snd_seq_client_info_t *info); | |
151 | |
152 void snd_seq_client_info_set_client(snd_seq_client_info_t *info, int client); | |
153 void snd_seq_client_info_set_name(snd_seq_client_info_t *info, const char *name); | |
154 void snd_seq_client_info_set_broadcast_filter(snd_seq_client_info_t *info, int val); | |
155 void snd_seq_client_info_set_error_bounce(snd_seq_client_info_t *info, int val); | |
156 void snd_seq_client_info_set_event_filter(snd_seq_client_info_t *info, unsigned char *filter); | |
157 | |
158 void snd_seq_client_info_event_filter_clear(snd_seq_client_info_t *info); | |
159 void snd_seq_client_info_event_filter_add(snd_seq_client_info_t *info, int event_type); | |
160 void snd_seq_client_info_event_filter_del(snd_seq_client_info_t *info, int event_type); | |
161 int snd_seq_client_info_event_filter_check(snd_seq_client_info_t *info, int event_type); | |
162 | |
163 int snd_seq_get_client_info(snd_seq_t *handle, snd_seq_client_info_t *info); | |
164 int snd_seq_get_any_client_info(snd_seq_t *handle, int client, snd_seq_client_info_t *info); | |
165 int snd_seq_set_client_info(snd_seq_t *handle, snd_seq_client_info_t *info); | |
166 int snd_seq_query_next_client(snd_seq_t *handle, snd_seq_client_info_t *info); | |
167 | |
168 /* | |
169 */ | |
170 | |
171 /** client pool information container */ | |
172 typedef struct _snd_seq_client_pool snd_seq_client_pool_t; | |
173 | |
174 size_t snd_seq_client_pool_sizeof(void); | |
175 /** allocate a #snd_seq_client_pool_t container on stack */ | |
176 #define snd_seq_client_pool_alloca(ptr) \ | |
177 __snd_alloca(ptr, snd_seq_client_pool) | |
178 int snd_seq_client_pool_malloc(snd_seq_client_pool_t **ptr); | |
179 void snd_seq_client_pool_free(snd_seq_client_pool_t *ptr); | |
180 void snd_seq_client_pool_copy(snd_seq_client_pool_t *dst, const snd_seq_client_pool_t *src); | |
181 | |
182 int snd_seq_client_pool_get_client(const snd_seq_client_pool_t *info); | |
183 size_t snd_seq_client_pool_get_output_pool(const snd_seq_client_pool_t *info); | |
184 size_t snd_seq_client_pool_get_input_pool(const snd_seq_client_pool_t *info); | |
185 size_t snd_seq_client_pool_get_output_room(const snd_seq_client_pool_t *info); | |
186 size_t snd_seq_client_pool_get_output_free(const snd_seq_client_pool_t *info); | |
187 size_t snd_seq_client_pool_get_input_free(const snd_seq_client_pool_t *info); | |
188 void snd_seq_client_pool_set_output_pool(snd_seq_client_pool_t *info, size_t size); | |
189 void snd_seq_client_pool_set_input_pool(snd_seq_client_pool_t *info, size_t size); | |
190 void snd_seq_client_pool_set_output_room(snd_seq_client_pool_t *info, size_t size); | |
191 | |
192 int snd_seq_get_client_pool(snd_seq_t *handle, snd_seq_client_pool_t *info); | |
193 int snd_seq_set_client_pool(snd_seq_t *handle, snd_seq_client_pool_t *info); | |
194 | |
195 | |
196 /** \} */ | |
197 | |
198 | |
199 /** | |
200 * \defgroup SeqPort Sequencer Port Interface | |
201 * Sequencer Port Interface | |
202 * \ingroup Sequencer | |
203 * \{ | |
204 */ | |
205 | |
206 /** port information container */ | |
207 typedef struct _snd_seq_port_info snd_seq_port_info_t; | |
208 | |
209 /** known port numbers */ | |
210 #define SND_SEQ_PORT_SYSTEM_TIMER 0 /**< system timer port */ | |
211 #define SND_SEQ_PORT_SYSTEM_ANNOUNCE 1 /**< system announce port */ | |
212 | |
213 /** port capabilities (32 bits) */ | |
214 #define SND_SEQ_PORT_CAP_READ (1<<0) /**< readable from this port */ | |
215 #define SND_SEQ_PORT_CAP_WRITE (1<<1) /**< writable to this port */ | |
216 | |
217 #define SND_SEQ_PORT_CAP_SYNC_READ (1<<2) /**< allow read subscriptions */ | |
218 #define SND_SEQ_PORT_CAP_SYNC_WRITE (1<<3) /**< allow write subscriptions */ | |
219 | |
220 #define SND_SEQ_PORT_CAP_DUPLEX (1<<4) /**< allow read/write duplex */ | |
221 | |
222 #define SND_SEQ_PORT_CAP_SUBS_READ (1<<5) /**< allow read subscription */ | |
223 #define SND_SEQ_PORT_CAP_SUBS_WRITE (1<<6) /**< allow write subscription */ | |
224 #define SND_SEQ_PORT_CAP_NO_EXPORT (1<<7) /**< routing not allowed */ | |
225 | |
226 /* port type */ | |
227 /** Messages sent from/to this port have device-specific semantics. */ | |
228 #define SND_SEQ_PORT_TYPE_SPECIFIC (1<<0) | |
229 /** This port understands MIDI messages. */ | |
230 #define SND_SEQ_PORT_TYPE_MIDI_GENERIC (1<<1) | |
231 /** This port is compatible with the General MIDI specification. */ | |
232 #define SND_SEQ_PORT_TYPE_MIDI_GM (1<<2) | |
233 /** This port is compatible with the Roland GS standard. */ | |
234 #define SND_SEQ_PORT_TYPE_MIDI_GS (1<<3) | |
235 /** This port is compatible with the Yamaha XG specification. */ | |
236 #define SND_SEQ_PORT_TYPE_MIDI_XG (1<<4) | |
237 /** This port is compatible with the Roland MT-32. */ | |
238 #define SND_SEQ_PORT_TYPE_MIDI_MT32 (1<<5) | |
239 /** This port is compatible with the General MIDI 2 specification. */ | |
240 #define SND_SEQ_PORT_TYPE_MIDI_GM2 (1<<6) | |
241 /** This port understands SND_SEQ_EVENT_SAMPLE_xxx messages | |
242 (these are not MIDI messages). */ | |
243 #define SND_SEQ_PORT_TYPE_SYNTH (1<<10) | |
244 /** Instruments can be downloaded to this port | |
245 (with SND_SEQ_EVENT_INSTR_xxx messages sent directly). */ | |
246 #define SND_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11) | |
247 /** Instruments can be downloaded to this port | |
248 (with SND_SEQ_EVENT_INSTR_xxx messages sent directly or through a queue). */ | |
249 #define SND_SEQ_PORT_TYPE_SAMPLE (1<<12) | |
250 /** This port is implemented in hardware. */ | |
251 #define SND_SEQ_PORT_TYPE_HARDWARE (1<<16) | |
252 /** This port is implemented in software. */ | |
253 #define SND_SEQ_PORT_TYPE_SOFTWARE (1<<17) | |
254 /** Messages sent to this port will generate sounds. */ | |
255 #define SND_SEQ_PORT_TYPE_SYNTHESIZER (1<<18) | |
256 /** This port may connect to other devices | |
257 (whose characteristics are not known). */ | |
258 #define SND_SEQ_PORT_TYPE_PORT (1<<19) | |
259 /** This port belongs to an application, such as a sequencer or editor. */ | |
260 #define SND_SEQ_PORT_TYPE_APPLICATION (1<<20) | |
261 | |
262 | |
263 size_t snd_seq_port_info_sizeof(void); | |
264 /** allocate a #snd_seq_port_info_t container on stack */ | |
265 #define snd_seq_port_info_alloca(ptr) \ | |
266 __snd_alloca(ptr, snd_seq_port_info) | |
267 int snd_seq_port_info_malloc(snd_seq_port_info_t **ptr); | |
268 void snd_seq_port_info_free(snd_seq_port_info_t *ptr); | |
269 void snd_seq_port_info_copy(snd_seq_port_info_t *dst, const snd_seq_port_info_t *src); | |
270 | |
271 int snd_seq_port_info_get_client(const snd_seq_port_info_t *info); | |
272 int snd_seq_port_info_get_port(const snd_seq_port_info_t *info); | |
273 const snd_seq_addr_t *snd_seq_port_info_get_addr(const snd_seq_port_info_t *info); | |
274 const char *snd_seq_port_info_get_name(const snd_seq_port_info_t *info); | |
275 unsigned int snd_seq_port_info_get_capability(const snd_seq_port_info_t *info); | |
276 unsigned int snd_seq_port_info_get_type(const snd_seq_port_info_t *info); | |
277 int snd_seq_port_info_get_midi_channels(const snd_seq_port_info_t *info); | |
278 int snd_seq_port_info_get_midi_voices(const snd_seq_port_info_t *info); | |
279 int snd_seq_port_info_get_synth_voices(const snd_seq_port_info_t *info); | |
280 int snd_seq_port_info_get_read_use(const snd_seq_port_info_t *info); | |
281 int snd_seq_port_info_get_write_use(const snd_seq_port_info_t *info); | |
282 int snd_seq_port_info_get_port_specified(const snd_seq_port_info_t *info); | |
283 int snd_seq_port_info_get_timestamping(const snd_seq_port_info_t *info); | |
284 int snd_seq_port_info_get_timestamp_real(const snd_seq_port_info_t *info); | |
285 int snd_seq_port_info_get_timestamp_queue(const snd_seq_port_info_t *info); | |
286 | |
287 void snd_seq_port_info_set_client(snd_seq_port_info_t *info, int client); | |
288 void snd_seq_port_info_set_port(snd_seq_port_info_t *info, int port); | |
289 void snd_seq_port_info_set_addr(snd_seq_port_info_t *info, const snd_seq_addr_t *addr); | |
290 void snd_seq_port_info_set_name(snd_seq_port_info_t *info, const char *name); | |
291 void snd_seq_port_info_set_capability(snd_seq_port_info_t *info, unsigned int capability); | |
292 void snd_seq_port_info_set_type(snd_seq_port_info_t *info, unsigned int type); | |
293 void snd_seq_port_info_set_midi_channels(snd_seq_port_info_t *info, int channels); | |
294 void snd_seq_port_info_set_midi_voices(snd_seq_port_info_t *info, int voices); | |
295 void snd_seq_port_info_set_synth_voices(snd_seq_port_info_t *info, int voices); | |
296 void snd_seq_port_info_set_port_specified(snd_seq_port_info_t *info, int val); | |
297 void snd_seq_port_info_set_timestamping(snd_seq_port_info_t *info, int enable); | |
298 void snd_seq_port_info_set_timestamp_real(snd_seq_port_info_t *info, int realtime); | |
299 void snd_seq_port_info_set_timestamp_queue(snd_seq_port_info_t *info, int queue); | |
300 | |
301 int snd_seq_create_port(snd_seq_t *handle, snd_seq_port_info_t *info); | |
302 int snd_seq_delete_port(snd_seq_t *handle, int port); | |
303 int snd_seq_get_port_info(snd_seq_t *handle, int port, snd_seq_port_info_t *info); | |
304 int snd_seq_get_any_port_info(snd_seq_t *handle, int client, int port, snd_seq_port_info_t *info); | |
305 int snd_seq_set_port_info(snd_seq_t *handle, int port, snd_seq_port_info_t *info); | |
306 int snd_seq_query_next_port(snd_seq_t *handle, snd_seq_port_info_t *info); | |
307 | |
308 /** \} */ | |
309 | |
310 | |
311 /** | |
312 * \defgroup SeqSubscribe Sequencer Port Subscription | |
313 * Sequencer Port Subscription | |
314 * \ingroup Sequencer | |
315 * \{ | |
316 */ | |
317 | |
318 /** port subscription container */ | |
319 typedef struct _snd_seq_port_subscribe snd_seq_port_subscribe_t; | |
320 | |
321 size_t snd_seq_port_subscribe_sizeof(void); | |
322 /** allocate a #snd_seq_port_subscribe_t container on stack */ | |
323 #define snd_seq_port_subscribe_alloca(ptr) \ | |
324 __snd_alloca(ptr, snd_seq_port_subscribe) | |
325 int snd_seq_port_subscribe_malloc(snd_seq_port_subscribe_t **ptr); | |
326 void snd_seq_port_subscribe_free(snd_seq_port_subscribe_t *ptr); | |
327 void snd_seq_port_subscribe_copy(snd_seq_port_subscribe_t *dst, const snd_seq_port_subscribe_t *src); | |
328 | |
329 const snd_seq_addr_t *snd_seq_port_subscribe_get_sender(const snd_seq_port_subscribe_t *info); | |
330 const snd_seq_addr_t *snd_seq_port_subscribe_get_dest(const snd_seq_port_subscribe_t *info); | |
331 int snd_seq_port_subscribe_get_queue(const snd_seq_port_subscribe_t *info); | |
332 int snd_seq_port_subscribe_get_exclusive(const snd_seq_port_subscribe_t *info); | |
333 int snd_seq_port_subscribe_get_time_update(const snd_seq_port_subscribe_t *info); | |
334 int snd_seq_port_subscribe_get_time_real(const snd_seq_port_subscribe_t *info); | |
335 | |
336 void snd_seq_port_subscribe_set_sender(snd_seq_port_subscribe_t *info, const snd_seq_addr_t *addr); | |
337 void snd_seq_port_subscribe_set_dest(snd_seq_port_subscribe_t *info, const snd_seq_addr_t *addr); | |
338 void snd_seq_port_subscribe_set_queue(snd_seq_port_subscribe_t *info, int q); | |
339 void snd_seq_port_subscribe_set_exclusive(snd_seq_port_subscribe_t *info, int val); | |
340 void snd_seq_port_subscribe_set_time_update(snd_seq_port_subscribe_t *info, int val); | |
341 void snd_seq_port_subscribe_set_time_real(snd_seq_port_subscribe_t *info, int val); | |
342 | |
343 int snd_seq_get_port_subscription(snd_seq_t *handle, snd_seq_port_subscribe_t *sub); | |
344 int snd_seq_subscribe_port(snd_seq_t *handle, snd_seq_port_subscribe_t *sub); | |
345 int snd_seq_unsubscribe_port(snd_seq_t *handle, snd_seq_port_subscribe_t *sub); | |
346 | |
347 /* | |
348 */ | |
349 | |
350 /** subscription query container */ | |
351 typedef struct _snd_seq_query_subscribe snd_seq_query_subscribe_t; | |
352 | |
353 /** type of query subscription */ | |
354 typedef enum { | |
355 SND_SEQ_QUERY_SUBS_READ, /**< query read subscriptions */ | |
356 SND_SEQ_QUERY_SUBS_WRITE /**< query write subscriptions */ | |
357 } snd_seq_query_subs_type_t; | |
358 | |
359 size_t snd_seq_query_subscribe_sizeof(void); | |
360 /** allocate a #snd_seq_query_subscribe_t container on stack */ | |
361 #define snd_seq_query_subscribe_alloca(ptr) \ | |
362 __snd_alloca(ptr, snd_seq_query_subscribe) | |
363 int snd_seq_query_subscribe_malloc(snd_seq_query_subscribe_t **ptr); | |
364 void snd_seq_query_subscribe_free(snd_seq_query_subscribe_t *ptr); | |
365 void snd_seq_query_subscribe_copy(snd_seq_query_subscribe_t *dst, const snd_seq_query_subscribe_t *src); | |
366 | |
367 int snd_seq_query_subscribe_get_client(const snd_seq_query_subscribe_t *info); | |
368 int snd_seq_query_subscribe_get_port(const snd_seq_query_subscribe_t *info); | |
369 const snd_seq_addr_t *snd_seq_query_subscribe_get_root(const snd_seq_query_subscribe_t *info); | |
370 snd_seq_query_subs_type_t snd_seq_query_subscribe_get_type(const snd_seq_query_subscribe_t *info); | |
371 int snd_seq_query_subscribe_get_index(const snd_seq_query_subscribe_t *info); | |
372 int snd_seq_query_subscribe_get_num_subs(const snd_seq_query_subscribe_t *info); | |
373 const snd_seq_addr_t *snd_seq_query_subscribe_get_addr(const snd_seq_query_subscribe_t *info); | |
374 int snd_seq_query_subscribe_get_queue(const snd_seq_query_subscribe_t *info); | |
375 int snd_seq_query_subscribe_get_exclusive(const snd_seq_query_subscribe_t *info); | |
376 int snd_seq_query_subscribe_get_time_update(const snd_seq_query_subscribe_t *info); | |
377 int snd_seq_query_subscribe_get_time_real(const snd_seq_query_subscribe_t *info); | |
378 | |
379 void snd_seq_query_subscribe_set_client(snd_seq_query_subscribe_t *info, int client); | |
380 void snd_seq_query_subscribe_set_port(snd_seq_query_subscribe_t *info, int port); | |
381 void snd_seq_query_subscribe_set_root(snd_seq_query_subscribe_t *info, const snd_seq_addr_t *addr); | |
382 void snd_seq_query_subscribe_set_type(snd_seq_query_subscribe_t *info, snd_seq_query_subs_type_t type); | |
383 void snd_seq_query_subscribe_set_index(snd_seq_query_subscribe_t *info, int _index); | |
384 | |
385 int snd_seq_query_port_subscribers(snd_seq_t *seq, snd_seq_query_subscribe_t * subs); | |
386 | |
387 /** \} */ | |
388 | |
389 | |
390 /** | |
391 * \defgroup SeqQueue Sequencer Queue Interface | |
392 * Sequencer Queue Interface | |
393 * \ingroup Sequencer | |
394 * \{ | |
395 */ | |
396 | |
397 /** queue information container */ | |
398 typedef struct _snd_seq_queue_info snd_seq_queue_info_t; | |
399 /** queue status container */ | |
400 typedef struct _snd_seq_queue_status snd_seq_queue_status_t; | |
401 /** queue tempo container */ | |
402 typedef struct _snd_seq_queue_tempo snd_seq_queue_tempo_t; | |
403 /** queue timer information container */ | |
404 typedef struct _snd_seq_queue_timer snd_seq_queue_timer_t; | |
405 | |
406 /** special queue ids */ | |
407 #define SND_SEQ_QUEUE_DIRECT 253 /**< direct dispatch */ | |
408 | |
409 size_t snd_seq_queue_info_sizeof(void); | |
410 /** allocate a #snd_seq_queue_info_t container on stack */ | |
411 #define snd_seq_queue_info_alloca(ptr) \ | |
412 __snd_alloca(ptr, snd_seq_queue_info) | |
413 int snd_seq_queue_info_malloc(snd_seq_queue_info_t **ptr); | |
414 void snd_seq_queue_info_free(snd_seq_queue_info_t *ptr); | |
415 void snd_seq_queue_info_copy(snd_seq_queue_info_t *dst, const snd_seq_queue_info_t *src); | |
416 | |
417 int snd_seq_queue_info_get_queue(const snd_seq_queue_info_t *info); | |
418 const char *snd_seq_queue_info_get_name(const snd_seq_queue_info_t *info); | |
419 int snd_seq_queue_info_get_owner(const snd_seq_queue_info_t *info); | |
420 int snd_seq_queue_info_get_locked(const snd_seq_queue_info_t *info); | |
421 unsigned int snd_seq_queue_info_get_flags(const snd_seq_queue_info_t *info); | |
422 | |
423 void snd_seq_queue_info_set_name(snd_seq_queue_info_t *info, const char *name); | |
424 void snd_seq_queue_info_set_owner(snd_seq_queue_info_t *info, int owner); | |
425 void snd_seq_queue_info_set_locked(snd_seq_queue_info_t *info, int locked); | |
426 void snd_seq_queue_info_set_flags(snd_seq_queue_info_t *info, unsigned int flags); | |
427 | |
428 int snd_seq_create_queue(snd_seq_t *seq, snd_seq_queue_info_t *info); | |
429 int snd_seq_alloc_named_queue(snd_seq_t *seq, const char *name); | |
430 int snd_seq_alloc_queue(snd_seq_t *handle); | |
431 int snd_seq_free_queue(snd_seq_t *handle, int q); | |
432 int snd_seq_get_queue_info(snd_seq_t *seq, int q, snd_seq_queue_info_t *info); | |
433 int snd_seq_set_queue_info(snd_seq_t *seq, int q, snd_seq_queue_info_t *info); | |
434 int snd_seq_query_named_queue(snd_seq_t *seq, const char *name); | |
435 | |
436 int snd_seq_get_queue_usage(snd_seq_t *handle, int q); | |
437 int snd_seq_set_queue_usage(snd_seq_t *handle, int q, int used); | |
438 | |
439 /* | |
440 */ | |
441 size_t snd_seq_queue_status_sizeof(void); | |
442 /** allocate a #snd_seq_queue_status_t container on stack */ | |
443 #define snd_seq_queue_status_alloca(ptr) \ | |
444 __snd_alloca(ptr, snd_seq_queue_status) | |
445 int snd_seq_queue_status_malloc(snd_seq_queue_status_t **ptr); | |
446 void snd_seq_queue_status_free(snd_seq_queue_status_t *ptr); | |
447 void snd_seq_queue_status_copy(snd_seq_queue_status_t *dst, const snd_seq_queue_status_t *src); | |
448 | |
449 int snd_seq_queue_status_get_queue(const snd_seq_queue_status_t *info); | |
450 int snd_seq_queue_status_get_events(const snd_seq_queue_status_t *info); | |
451 snd_seq_tick_time_t snd_seq_queue_status_get_tick_time(const snd_seq_queue_status_t *info); | |
452 const snd_seq_real_time_t *snd_seq_queue_status_get_real_time(const snd_seq_queue_status_t *info); | |
453 unsigned int snd_seq_queue_status_get_status(const snd_seq_queue_status_t *info); | |
454 | |
455 int snd_seq_get_queue_status(snd_seq_t *handle, int q, snd_seq_queue_status_t *status); | |
456 | |
457 /* | |
458 */ | |
459 size_t snd_seq_queue_tempo_sizeof(void); | |
460 /** allocate a #snd_seq_queue_tempo_t container on stack */ | |
461 #define snd_seq_queue_tempo_alloca(ptr) \ | |
462 __snd_alloca(ptr, snd_seq_queue_tempo) | |
463 int snd_seq_queue_tempo_malloc(snd_seq_queue_tempo_t **ptr); | |
464 void snd_seq_queue_tempo_free(snd_seq_queue_tempo_t *ptr); | |
465 void snd_seq_queue_tempo_copy(snd_seq_queue_tempo_t *dst, const snd_seq_queue_tempo_t *src); | |
466 | |
467 int snd_seq_queue_tempo_get_queue(const snd_seq_queue_tempo_t *info); | |
468 unsigned int snd_seq_queue_tempo_get_tempo(const snd_seq_queue_tempo_t *info); | |
469 int snd_seq_queue_tempo_get_ppq(const snd_seq_queue_tempo_t *info); | |
470 unsigned int snd_seq_queue_tempo_get_skew(const snd_seq_queue_tempo_t *info); | |
471 unsigned int snd_seq_queue_tempo_get_skew_base(const snd_seq_queue_tempo_t *info); | |
472 void snd_seq_queue_tempo_set_tempo(snd_seq_queue_tempo_t *info, unsigned int tempo); | |
473 void snd_seq_queue_tempo_set_ppq(snd_seq_queue_tempo_t *info, int ppq); | |
474 void snd_seq_queue_tempo_set_skew(snd_seq_queue_tempo_t *info, unsigned int skew); | |
475 void snd_seq_queue_tempo_set_skew_base(snd_seq_queue_tempo_t *info, unsigned int base); | |
476 | |
477 int snd_seq_get_queue_tempo(snd_seq_t *handle, int q, snd_seq_queue_tempo_t *tempo); | |
478 int snd_seq_set_queue_tempo(snd_seq_t *handle, int q, snd_seq_queue_tempo_t *tempo); | |
479 | |
480 /* | |
481 */ | |
482 | |
483 /** sequencer timer sources */ | |
484 typedef enum { | |
485 SND_SEQ_TIMER_ALSA = 0, /* ALSA timer */ | |
486 SND_SEQ_TIMER_MIDI_CLOCK = 1, /* Midi Clock (CLOCK event) */ | |
487 SND_SEQ_TIMER_MIDI_TICK = 2 /* Midi Timer Tick (TICK event */ | |
488 } snd_seq_queue_timer_type_t; | |
489 | |
490 size_t snd_seq_queue_timer_sizeof(void); | |
491 /** allocate a #snd_seq_queue_timer_t container on stack */ | |
492 #define snd_seq_queue_timer_alloca(ptr) \ | |
493 __snd_alloca(ptr, snd_seq_queue_timer) | |
494 int snd_seq_queue_timer_malloc(snd_seq_queue_timer_t **ptr); | |
495 void snd_seq_queue_timer_free(snd_seq_queue_timer_t *ptr); | |
496 void snd_seq_queue_timer_copy(snd_seq_queue_timer_t *dst, const snd_seq_queue_timer_t *src); | |
497 | |
498 int snd_seq_queue_timer_get_queue(const snd_seq_queue_timer_t *info); | |
499 snd_seq_queue_timer_type_t snd_seq_queue_timer_get_type(const snd_seq_queue_timer_t *info); | |
500 const snd_timer_id_t *snd_seq_queue_timer_get_id(const snd_seq_queue_timer_t *info); | |
501 unsigned int snd_seq_queue_timer_get_resolution(const snd_seq_queue_timer_t *info); | |
502 | |
503 void snd_seq_queue_timer_set_type(snd_seq_queue_timer_t *info, snd_seq_queue_timer_type_t type); | |
504 void snd_seq_queue_timer_set_id(snd_seq_queue_timer_t *info, const snd_timer_id_t *id); | |
505 void snd_seq_queue_timer_set_resolution(snd_seq_queue_timer_t *info, unsigned int resolution); | |
506 | |
507 int snd_seq_get_queue_timer(snd_seq_t *handle, int q, snd_seq_queue_timer_t *timer); | |
508 int snd_seq_set_queue_timer(snd_seq_t *handle, int q, snd_seq_queue_timer_t *timer); | |
509 | |
510 /** \} */ | |
511 | |
512 /** | |
513 * \defgroup SeqEvent Sequencer Event API | |
514 * Sequencer Event API | |
515 * \ingroup Sequencer | |
516 * \{ | |
517 */ | |
518 | |
519 int snd_seq_free_event(snd_seq_event_t *ev); | |
520 ssize_t snd_seq_event_length(snd_seq_event_t *ev); | |
521 int snd_seq_event_output(snd_seq_t *handle, snd_seq_event_t *ev); | |
522 int snd_seq_event_output_buffer(snd_seq_t *handle, snd_seq_event_t *ev); | |
523 int snd_seq_event_output_direct(snd_seq_t *handle, snd_seq_event_t *ev); | |
524 int snd_seq_event_input(snd_seq_t *handle, snd_seq_event_t **ev); | |
525 int snd_seq_event_input_pending(snd_seq_t *seq, int fetch_sequencer); | |
526 int snd_seq_drain_output(snd_seq_t *handle); | |
527 int snd_seq_event_output_pending(snd_seq_t *seq); | |
528 int snd_seq_extract_output(snd_seq_t *handle, snd_seq_event_t **ev); | |
529 int snd_seq_drop_output(snd_seq_t *handle); | |
530 int snd_seq_drop_output_buffer(snd_seq_t *handle); | |
531 int snd_seq_drop_input(snd_seq_t *handle); | |
532 int snd_seq_drop_input_buffer(snd_seq_t *handle); | |
533 | |
534 /** event removal conditionals */ | |
535 typedef struct _snd_seq_remove_events snd_seq_remove_events_t; | |
536 | |
537 /** Remove conditional flags */ | |
538 #define SND_SEQ_REMOVE_INPUT (1<<0) /**< Flush input queues */ | |
539 #define SND_SEQ_REMOVE_OUTPUT (1<<1) /**< Flush output queues */ | |
540 #define SND_SEQ_REMOVE_DEST (1<<2) /**< Restrict by destination q:client:port */ | |
541 #define SND_SEQ_REMOVE_DEST_CHANNEL (1<<3) /**< Restrict by channel */ | |
542 #define SND_SEQ_REMOVE_TIME_BEFORE (1<<4) /**< Restrict to before time */ | |
543 #define SND_SEQ_REMOVE_TIME_AFTER (1<<5) /**< Restrict to time or after */ | |
544 #define SND_SEQ_REMOVE_TIME_TICK (1<<6) /**< Time is in ticks */ | |
545 #define SND_SEQ_REMOVE_EVENT_TYPE (1<<7) /**< Restrict to event type */ | |
546 #define SND_SEQ_REMOVE_IGNORE_OFF (1<<8) /**< Do not flush off events */ | |
547 #define SND_SEQ_REMOVE_TAG_MATCH (1<<9) /**< Restrict to events with given tag */ | |
548 | |
549 size_t snd_seq_remove_events_sizeof(void); | |
550 /** allocate a #snd_seq_remove_events_t container on stack */ | |
551 #define snd_seq_remove_events_alloca(ptr) \ | |
552 __snd_alloca(ptr, snd_seq_remove_events) | |
553 int snd_seq_remove_events_malloc(snd_seq_remove_events_t **ptr); | |
554 void snd_seq_remove_events_free(snd_seq_remove_events_t *ptr); | |
555 void snd_seq_remove_events_copy(snd_seq_remove_events_t *dst, const snd_seq_remove_events_t *src); | |
556 | |
557 unsigned int snd_seq_remove_events_get_condition(const snd_seq_remove_events_t *info); | |
558 int snd_seq_remove_events_get_queue(const snd_seq_remove_events_t *info); | |
559 const snd_seq_timestamp_t *snd_seq_remove_events_get_time(const snd_seq_remove_events_t *info); | |
560 const snd_seq_addr_t *snd_seq_remove_events_get_dest(const snd_seq_remove_events_t *info); | |
561 int snd_seq_remove_events_get_channel(const snd_seq_remove_events_t *info); | |
562 int snd_seq_remove_events_get_event_type(const snd_seq_remove_events_t *info); | |
563 int snd_seq_remove_events_get_tag(const snd_seq_remove_events_t *info); | |
564 | |
565 void snd_seq_remove_events_set_condition(snd_seq_remove_events_t *info, unsigned int flags); | |
566 void snd_seq_remove_events_set_queue(snd_seq_remove_events_t *info, int queue); | |
567 void snd_seq_remove_events_set_time(snd_seq_remove_events_t *info, const snd_seq_timestamp_t *time); | |
568 void snd_seq_remove_events_set_dest(snd_seq_remove_events_t *info, const snd_seq_addr_t *addr); | |
569 void snd_seq_remove_events_set_channel(snd_seq_remove_events_t *info, int channel); | |
570 void snd_seq_remove_events_set_event_type(snd_seq_remove_events_t *info, int type); | |
571 void snd_seq_remove_events_set_tag(snd_seq_remove_events_t *info, int tag); | |
572 | |
573 int snd_seq_remove_events(snd_seq_t *handle, snd_seq_remove_events_t *info); | |
574 | |
575 /** \} */ | |
576 | |
577 /** | |
578 * \defgroup SeqMisc Sequencer Miscellaneous | |
579 * Sequencer Miscellaneous | |
580 * \ingroup Sequencer | |
581 * \{ | |
582 */ | |
583 | |
584 void snd_seq_set_bit(int nr, void *array); | |
585 void snd_seq_unset_bit(int nr, void *array); | |
586 int snd_seq_change_bit(int nr, void *array); | |
587 int snd_seq_get_bit(int nr, void *array); | |
588 | |
589 /** \} */ | |
590 | |
591 | |
592 /** | |
593 * \defgroup SeqEvType Sequencer Event Type Checks | |
594 * Sequencer Event Type Checks | |
595 * \ingroup Sequencer | |
596 * \{ | |
597 */ | |
598 | |
599 /* event type macros */ | |
600 enum { | |
601 SND_SEQ_EVFLG_RESULT, | |
602 SND_SEQ_EVFLG_NOTE, | |
603 SND_SEQ_EVFLG_CONTROL, | |
604 SND_SEQ_EVFLG_QUEUE, | |
605 SND_SEQ_EVFLG_SYSTEM, | |
606 SND_SEQ_EVFLG_MESSAGE, | |
607 SND_SEQ_EVFLG_CONNECTION, | |
608 SND_SEQ_EVFLG_SAMPLE, | |
609 SND_SEQ_EVFLG_USERS, | |
610 SND_SEQ_EVFLG_INSTR, | |
611 SND_SEQ_EVFLG_QUOTE, | |
612 SND_SEQ_EVFLG_NONE, | |
613 SND_SEQ_EVFLG_RAW, | |
614 SND_SEQ_EVFLG_FIXED, | |
615 SND_SEQ_EVFLG_VARIABLE, | |
616 SND_SEQ_EVFLG_VARUSR | |
617 }; | |
618 | |
619 enum { | |
620 SND_SEQ_EVFLG_NOTE_ONEARG, | |
621 SND_SEQ_EVFLG_NOTE_TWOARG | |
622 }; | |
623 | |
624 enum { | |
625 SND_SEQ_EVFLG_QUEUE_NOARG, | |
626 SND_SEQ_EVFLG_QUEUE_TICK, | |
627 SND_SEQ_EVFLG_QUEUE_TIME, | |
628 SND_SEQ_EVFLG_QUEUE_VALUE | |
629 }; | |
630 | |
631 /** | |
632 * Exported event type table | |
633 * | |
634 * This table is referred by snd_seq_ev_is_xxx. | |
635 */ | |
636 extern const unsigned int snd_seq_event_types[]; | |
637 | |
638 #define _SND_SEQ_TYPE(x) (1<<(x)) /**< master type - 24bit */ | |
639 #define _SND_SEQ_TYPE_OPT(x) ((x)<<24) /**< optional type - 8bit */ | |
640 | |
641 /** check the event type */ | |
642 #define snd_seq_type_check(ev,x) (snd_seq_event_types[(ev)->type] & _SND_SEQ_TYPE(x)) | |
643 | |
644 /** event type check: result events */ | |
645 #define snd_seq_ev_is_result_type(ev) \ | |
646 snd_seq_type_check(ev, SND_SEQ_EVFLG_RESULT) | |
647 /** event type check: note events */ | |
648 #define snd_seq_ev_is_note_type(ev) \ | |
649 snd_seq_type_check(ev, SND_SEQ_EVFLG_NOTE) | |
650 /** event type check: control events */ | |
651 #define snd_seq_ev_is_control_type(ev) \ | |
652 snd_seq_type_check(ev, SND_SEQ_EVFLG_CONTROL) | |
653 /** event type check: channel specific events */ | |
654 #define snd_seq_ev_is_channel_type(ev) \ | |
655 (snd_seq_event_types[(ev)->type] & (_SND_SEQ_TYPE(SND_SEQ_EVFLG_NOTE) | _SND_SEQ_TYPE(SND_SEQ_EVFLG_CONTROL))) | |
656 | |
657 /** event type check: queue control events */ | |
658 #define snd_seq_ev_is_queue_type(ev) \ | |
659 snd_seq_type_check(ev, SND_SEQ_EVFLG_QUEUE) | |
660 /** event type check: system status messages */ | |
661 #define snd_seq_ev_is_message_type(ev) \ | |
662 snd_seq_type_check(ev, SND_SEQ_EVFLG_MESSAGE) | |
663 /** event type check: system status messages */ | |
664 #define snd_seq_ev_is_subscribe_type(ev) \ | |
665 snd_seq_type_check(ev, SND_SEQ_EVFLG_CONNECTION) | |
666 /** event type check: sample messages */ | |
667 #define snd_seq_ev_is_sample_type(ev) \ | |
668 snd_seq_type_check(ev, SND_SEQ_EVFLG_SAMPLE) | |
669 /** event type check: user-defined messages */ | |
670 #define snd_seq_ev_is_user_type(ev) \ | |
671 snd_seq_type_check(ev, SND_SEQ_EVFLG_USERS) | |
672 /** event type check: instrument layer events */ | |
673 #define snd_seq_ev_is_instr_type(ev) \ | |
674 snd_seq_type_check(ev, SND_SEQ_EVFLG_INSTR) | |
675 /** event type check: fixed length events */ | |
676 #define snd_seq_ev_is_fixed_type(ev) \ | |
677 snd_seq_type_check(ev, SND_SEQ_EVFLG_FIXED) | |
678 /** event type check: variable length events */ | |
679 #define snd_seq_ev_is_variable_type(ev) \ | |
680 snd_seq_type_check(ev, SND_SEQ_EVFLG_VARIABLE) | |
681 /** event type check: user pointer events */ | |
682 #define snd_seq_ev_is_varusr_type(ev) \ | |
683 snd_seq_type_check(ev, SND_SEQ_EVFLG_VARUSR) | |
684 /** event type check: reserved for kernel */ | |
685 #define snd_seq_ev_is_reserved(ev) \ | |
686 (! snd_seq_event_types[(ev)->type]) | |
687 | |
688 /** | |
689 * macros to check event flags | |
690 */ | |
691 /** prior events */ | |
692 #define snd_seq_ev_is_prior(ev) \ | |
693 (((ev)->flags & SND_SEQ_PRIORITY_MASK) == SND_SEQ_PRIORITY_HIGH) | |
694 | |
695 /** get the data length type */ | |
696 #define snd_seq_ev_length_type(ev) \ | |
697 ((ev)->flags & SND_SEQ_EVENT_LENGTH_MASK) | |
698 /** fixed length events */ | |
699 #define snd_seq_ev_is_fixed(ev) \ | |
700 (snd_seq_ev_length_type(ev) == SND_SEQ_EVENT_LENGTH_FIXED) | |
701 /** variable length events */ | |
702 #define snd_seq_ev_is_variable(ev) \ | |
703 (snd_seq_ev_length_type(ev) == SND_SEQ_EVENT_LENGTH_VARIABLE) | |
704 /** variable length on user-space */ | |
705 #define snd_seq_ev_is_varusr(ev) \ | |
706 (snd_seq_ev_length_type(ev) == SND_SEQ_EVENT_LENGTH_VARUSR) | |
707 | |
708 /** time-stamp type */ | |
709 #define snd_seq_ev_timestamp_type(ev) \ | |
710 ((ev)->flags & SND_SEQ_TIME_STAMP_MASK) | |
711 /** event is in tick time */ | |
712 #define snd_seq_ev_is_tick(ev) \ | |
713 (snd_seq_ev_timestamp_type(ev) == SND_SEQ_TIME_STAMP_TICK) | |
714 /** event is in real-time */ | |
715 #define snd_seq_ev_is_real(ev) \ | |
716 (snd_seq_ev_timestamp_type(ev) == SND_SEQ_TIME_STAMP_REAL) | |
717 | |
718 /** time-mode type */ | |
719 #define snd_seq_ev_timemode_type(ev) \ | |
720 ((ev)->flags & SND_SEQ_TIME_MODE_MASK) | |
721 /** scheduled in absolute time */ | |
722 #define snd_seq_ev_is_abstime(ev) \ | |
723 (snd_seq_ev_timemode_type(ev) == SND_SEQ_TIME_MODE_ABS) | |
724 /** scheduled in relative time */ | |
725 #define snd_seq_ev_is_reltime(ev) \ | |
726 (snd_seq_ev_timemode_type(ev) == SND_SEQ_TIME_MODE_REL) | |
727 | |
728 /** direct dispatched events */ | |
729 #define snd_seq_ev_is_direct(ev) \ | |
730 ((ev)->queue == SND_SEQ_QUEUE_DIRECT) | |
731 | |
732 /** \} */ | |
733 | |
734 #ifdef __cplusplus | |
735 } | |
736 #endif | |
737 | |
738 #endif /* __ALSA_SEQ_H */ | |
739 |