/[svn]/liblscp/trunk/lscp/client.h
ViewVC logotype

Contents of /liblscp/trunk/lscp/client.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 977 - (show annotations) (download) (as text)
Sun Dec 17 15:08:35 2006 UTC (17 years, 3 months ago) by capela
File MIME type: text/x-c++hdr
File size: 10518 byte(s)
- Last-minute addition to new protocol_version field on server info struct.

1 // client.h
2 //
3 /****************************************************************************
4 liblscp - LinuxSampler Control Protocol API
5 Copyright (C) 2004-2006, rncbc aka Rui Nuno Capela. All rights reserved.
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU General Public License along
18 with this program; if not, write to the Free Software Foundation, Inc.,
19 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
21 *****************************************************************************/
22
23 #ifndef __LSCP_CLIENT_H
24 #define __LSCP_CLIENT_H
25
26 #include "lscp/socket.h"
27 #include "lscp/event.h"
28
29 #if defined(__cplusplus)
30 extern "C" {
31 #endif
32
33 //-------------------------------------------------------------------------
34 // MIDI channel omni mode.
35
36 #define LSCP_MIDI_CHANNEL_ALL 16
37
38
39 //-------------------------------------------------------------------------
40 // Client data structures.
41
42 /** Server info cache struct. */
43 typedef struct _lscp_server_info_t
44 {
45 char * description;
46 char * version;
47 char * protocol_version;
48
49 } lscp_server_info_t;
50
51
52 /** Engine info cache struct. */
53 typedef struct _lscp_engine_info_t
54 {
55 char * description;
56 char * version;
57
58 } lscp_engine_info_t;
59
60
61 /** Channel info cache struct. */
62 typedef struct _lscp_channel_info_t
63 {
64 char * engine_name;
65 int audio_device;
66 int audio_channels;
67 char ** audio_routing;
68 char * instrument_file;
69 int instrument_nr;
70 char * instrument_name;
71 int instrument_status;
72 int midi_device;
73 int midi_port;
74 int midi_channel;
75 int midi_map;
76 float volume;
77 int mute;
78 int solo;
79
80 } lscp_channel_info_t;
81
82
83 /** Buffer fill cache struct. */
84 typedef struct _lscp_buffer_fill_t
85 {
86 unsigned int stream_id;
87 unsigned long stream_usage;
88
89 } lscp_buffer_fill_t;
90
91
92 /** Buffer fill stream usage types. */
93 typedef enum _lscp_usage_t
94 {
95 LSCP_USAGE_BYTES = 0,
96 LSCP_USAGE_PERCENTAGE
97
98 } lscp_usage_t;
99
100
101 /** MIDI instrument parameter struct. */
102 typedef struct _lscp_midi_instrument_t
103 {
104 int map;
105 int bank;
106 int prog;
107
108 } lscp_midi_instrument_t;
109
110
111 /** MIDI instrument load mode. */
112 typedef enum _lscp_load_mode_t
113 {
114 LSCP_LOAD_DEFAULT = 0,
115 LSCP_LOAD_ON_DEMAND,
116 LSCP_LOAD_ON_DEMAND_HOLD,
117 LSCP_LOAD_PERSISTENT
118
119 } lscp_load_mode_t;
120
121
122 /** MIDI instrument info cache struct. */
123 typedef struct _lscp_midi_instrument_info_t
124 {
125 char * name;
126 char * engine_name;
127 char * instrument_file;
128 int instrument_nr;
129 char * instrument_name;
130 lscp_load_mode_t load_mode;
131 float volume;
132
133 } lscp_midi_instrument_info_t;
134
135
136 /** MIDI instrument map mode. */
137 typedef enum _lscp_midi_map_mode_t
138 {
139 LSCP_MIDI_MAP_NONE = -1,
140 LSCP_MIDI_MAP_DEFAULT = -2,
141 LSCP_MIDI_MAP_ALL = -3
142
143 } lscp_midi_map_mode_t;
144
145
146 //-------------------------------------------------------------------------
147 // Client socket main structure.
148
149 /** Client opaque descriptor struct. */
150 typedef struct _lscp_client_t lscp_client_t;
151
152 /** Client event callback procedure prototype. */
153 typedef lscp_status_t (*lscp_client_proc_t)
154 (
155 struct _lscp_client_t *pClient,
156 lscp_event_t event,
157 const char *pchData,
158 int cchData,
159 void *pvData
160 );
161
162 //-------------------------------------------------------------------------
163 // Client versioning teller function.
164
165 const char * lscp_client_package (void);
166 const char * lscp_client_version (void);
167 const char * lscp_client_build (void);
168
169 //-------------------------------------------------------------------------
170 // Client socket functions.
171
172 lscp_client_t * lscp_client_create (const char *pszHost, int iPort, lscp_client_proc_t pfnCallback, void *pvData);
173 lscp_status_t lscp_client_join (lscp_client_t *pClient);
174 lscp_status_t lscp_client_destroy (lscp_client_t *pClient);
175
176 lscp_status_t lscp_client_set_timeout (lscp_client_t *pClient, int iTimeout);
177 int lscp_client_get_timeout (lscp_client_t *pClient);
178
179 //-------------------------------------------------------------------------
180 // Client common protocol functions.
181
182 lscp_status_t lscp_client_query (lscp_client_t *pClient, const char *pszQuery);
183 const char * lscp_client_get_result (lscp_client_t *pClient );
184 int lscp_client_get_errno (lscp_client_t *pClient );
185
186 //-------------------------------------------------------------------------
187 // Client registration protocol functions.
188
189 lscp_status_t lscp_client_subscribe (lscp_client_t *pClient, lscp_event_t events);
190 lscp_status_t lscp_client_unsubscribe (lscp_client_t *pClient, lscp_event_t events);
191
192 lscp_event_t lscp_client_get_events (lscp_client_t *pClient);
193
194 //-------------------------------------------------------------------------
195 // Client command protocol functions.
196
197 lscp_status_t lscp_load_instrument (lscp_client_t *pClient, const char *pszFileName, int iInstrIndex, int iSamplerChannel);
198 lscp_status_t lscp_load_instrument_non_modal (lscp_client_t *pClient, const char *pszFileName, int iInstrIndex, int iSamplerChannel);
199 lscp_status_t lscp_load_engine (lscp_client_t *pClient, const char *pszEngineName, int iSamplerChannel);
200 int lscp_get_channels (lscp_client_t *pClient);
201 int * lscp_list_channels (lscp_client_t *pClient);
202 int lscp_add_channel (lscp_client_t *pClient);
203 lscp_status_t lscp_remove_channel (lscp_client_t *pClient, int iSamplerChannel);
204
205 int lscp_get_available_engines (lscp_client_t *pClient);
206 const char ** lscp_list_available_engines (lscp_client_t *pClient);
207
208 lscp_engine_info_t * lscp_get_engine_info (lscp_client_t *pClient, const char *pszEngineName);
209 lscp_channel_info_t * lscp_get_channel_info (lscp_client_t *pClient, int iSamplerChannel);
210
211 int lscp_get_channel_voice_count (lscp_client_t *pClient, int iSamplerChannel);
212 int lscp_get_channel_stream_count (lscp_client_t *pClient, int iSamplerChannel);
213 int lscp_get_channel_stream_usage (lscp_client_t *pClient, int iSamplerChannel);
214
215 lscp_buffer_fill_t * lscp_get_channel_buffer_fill (lscp_client_t *pClient, lscp_usage_t iUsageType, int iSamplerChannel);
216
217 lscp_status_t lscp_set_channel_audio_type (lscp_client_t *pClient, int iSamplerChannel, const char *pszAudioType);
218 lscp_status_t lscp_set_channel_audio_device (lscp_client_t *pClient, int iSamplerChannel, int iAudioDevice);
219 lscp_status_t lscp_set_channel_audio_channel (lscp_client_t *pClient, int iSamplerChannel, int iAudioOut, int iAudioIn);
220
221 lscp_status_t lscp_set_channel_midi_type (lscp_client_t *pClient, int iSamplerChannel, const char *pszMidiType);
222 lscp_status_t lscp_set_channel_midi_device (lscp_client_t *pClient, int iSamplerChannel, int iMidiDevice);
223 lscp_status_t lscp_set_channel_midi_port (lscp_client_t *pClient, int iSamplerChannel, int iMidiPort);
224 lscp_status_t lscp_set_channel_midi_channel (lscp_client_t *pClient, int iSamplerChannel, int iMidiChannel);
225 lscp_status_t lscp_set_channel_midi_map (lscp_client_t *pClient, int iSamplerChannel, int iMidiMap);
226
227 lscp_status_t lscp_set_channel_volume (lscp_client_t *pClient, int iSamplerChannel, float fVolume);
228
229 lscp_status_t lscp_set_channel_mute (lscp_client_t *pClient, int iSamplerChannel, int iMute);
230 lscp_status_t lscp_set_channel_solo (lscp_client_t *pClient, int iSamplerChannel, int iSolo);
231
232 lscp_status_t lscp_reset_channel (lscp_client_t *pClient, int iSamplerChannel);
233
234 lscp_status_t lscp_reset_sampler (lscp_client_t *pClient);
235
236 lscp_server_info_t * lscp_get_server_info (lscp_client_t *pClient);
237
238 int lscp_get_total_voice_count (lscp_client_t *pClient);
239 int lscp_get_total_voice_count_max (lscp_client_t *pClient);
240
241 //-------------------------------------------------------------------------
242 // MIDI instrument mapping control functions.
243
244 int lscp_add_midi_instrument_map (lscp_client_t *pClient, const char *pszMapName);
245 lscp_status_t lscp_remove_midi_instrument_map (lscp_client_t *pClient, int iMidiMap);
246
247 int lscp_get_midi_instrument_maps (lscp_client_t *pClient);
248 int * lscp_list_midi_instrument_maps (lscp_client_t *pClient);
249
250 const char * lscp_get_midi_instrument_map_name (lscp_client_t *pClient, int iMidiMap);
251 lscp_status_t lscp_set_midi_instrument_map_name (lscp_client_t *pClient, int iMidiMap, const char *pszMapName);
252
253 lscp_status_t lscp_map_midi_instrument (lscp_client_t *pClient, lscp_midi_instrument_t *pMidiInstr, const char *pszEngineName, const char *pszFileName, int iInstrIndex, float fVolume, lscp_load_mode_t load_mode, const char *pszName);
254 lscp_status_t lscp_unmap_midi_instrument (lscp_client_t *pClient, lscp_midi_instrument_t *pMidiInstr);
255
256 int lscp_get_midi_instruments (lscp_client_t *pClient, int iMidiMap);
257 lscp_midi_instrument_t *lscp_list_midi_instruments (lscp_client_t *pClient, int iMidiMap);
258
259 lscp_midi_instrument_info_t *lscp_get_midi_instrument_info(lscp_client_t *pClient, lscp_midi_instrument_t *pMidiInstr);
260
261 lscp_status_t lscp_clear_midi_instruments (lscp_client_t *pClient, int iMidiMap);
262
263
264 #if defined(__cplusplus)
265 }
266 #endif
267
268 #endif // __LSCP_CLIENT_H
269
270 // end of client.h

  ViewVC Help
Powered by ViewVC