liblscp  0.9.90
client.h
Go to the documentation of this file.
1 // client.h
2 //
3 /****************************************************************************
4  liblscp - LinuxSampler Control Protocol API
5  Copyright (C) 2004-2021, 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 #include <stdbool.h>
29 
30 #if defined(__cplusplus)
31 extern "C" {
32 #endif
33 
34 //-------------------------------------------------------------------------
35 // MIDI channel omni mode.
36 
37 #define LSCP_MIDI_CHANNEL_ALL 16
38 
39 
40 //-------------------------------------------------------------------------
41 // Client data structures.
42 
44 typedef struct _lscp_server_info_t
45 {
46  char * description;
47  char * version;
49 
51 
52 
54 typedef struct _lscp_engine_info_t
55 {
56  char * description;
57  char * version;
58 
60 
61 
63 typedef struct _lscp_channel_info_t
64 {
65  char * engine_name;
74  int midi_port;
76  int midi_map;
77  float volume;
78  int mute;
79  int solo;
80 
82 
83 
85 typedef struct _lscp_buffer_fill_t
86 {
87  unsigned int stream_id;
88  unsigned long stream_usage;
89 
91 
92 
94 typedef enum _lscp_usage_t
95 {
98 
99 } lscp_usage_t;
100 
101 
103 typedef struct _lscp_fxsend_info_t
104 {
105  char * name;
108  float level;
109 
111 
112 
115 {
116  int map;
117  int bank;
118  int prog;
119 
121 
122 
124 typedef enum _lscp_load_mode_t
125 {
130 
132 
133 
136 {
137  char * name;
138  char * engine_name;
142  lscp_load_mode_t load_mode;
143  float volume;
144 
146 
147 
150 {
154 
156 
157 
158 //-------------------------------------------------------------------------
159 // Client socket main structure.
160 
162 typedef struct _lscp_client_t lscp_client_t;
163 
166 (
167  struct _lscp_client_t *pClient,
168  lscp_event_t event,
169  const char *pchData,
170  int cchData,
171  void *pvData
172 );
173 
174 //-------------------------------------------------------------------------
175 // Client versioning teller function.
176 
177 const char * lscp_client_package (void);
178 const char * lscp_client_version (void);
179 const char * lscp_client_build (void);
180 
181 //-------------------------------------------------------------------------
182 // Client socket functions.
183 
184 lscp_client_t * lscp_client_create (const char *pszHost, int iPort, lscp_client_proc_t pfnCallback, void *pvData);
187 
188 lscp_status_t lscp_client_set_timeout (lscp_client_t *pClient, int iTimeout);
191 
192 //-------------------------------------------------------------------------
193 // Client common protocol functions.
194 
195 lscp_status_t lscp_client_query (lscp_client_t *pClient, const char *pszQuery);
196 const char * lscp_client_get_result (lscp_client_t *pClient );
197 int lscp_client_get_errno (lscp_client_t *pClient );
198 
199 //-------------------------------------------------------------------------
200 // Client registration protocol functions.
201 
204 
206 
207 //-------------------------------------------------------------------------
208 // Client command protocol functions.
209 
210 lscp_status_t lscp_load_instrument (lscp_client_t *pClient, const char *pszFileName, int iInstrIndex, int iSamplerChannel);
211 lscp_status_t lscp_load_instrument_non_modal (lscp_client_t *pClient, const char *pszFileName, int iInstrIndex, int iSamplerChannel);
212 lscp_status_t lscp_load_engine (lscp_client_t *pClient, const char *pszEngineName, int iSamplerChannel);
213 int lscp_get_channels (lscp_client_t *pClient);
214 int * lscp_list_channels (lscp_client_t *pClient);
215 int lscp_add_channel (lscp_client_t *pClient);
216 lscp_status_t lscp_remove_channel (lscp_client_t *pClient, int iSamplerChannel);
217 
219 const char ** lscp_list_available_engines (lscp_client_t *pClient);
220 
221 lscp_engine_info_t * lscp_get_engine_info (lscp_client_t *pClient, const char *pszEngineName);
222 lscp_channel_info_t * lscp_get_channel_info (lscp_client_t *pClient, int iSamplerChannel);
223 
224 int lscp_get_channel_voice_count (lscp_client_t *pClient, int iSamplerChannel);
225 int lscp_get_channel_stream_count (lscp_client_t *pClient, int iSamplerChannel);
226 int lscp_get_channel_stream_usage (lscp_client_t *pClient, int iSamplerChannel);
227 
228 lscp_buffer_fill_t * lscp_get_channel_buffer_fill (lscp_client_t *pClient, lscp_usage_t iUsageType, int iSamplerChannel);
229 
230 lscp_status_t lscp_set_channel_audio_type (lscp_client_t *pClient, int iSamplerChannel, const char *pszAudioType);
231 lscp_status_t lscp_set_channel_audio_device (lscp_client_t *pClient, int iSamplerChannel, int iAudioDevice);
232 lscp_status_t lscp_set_channel_audio_channel (lscp_client_t *pClient, int iSamplerChannel, int iAudioOut, int iAudioIn);
233 
234 lscp_status_t lscp_set_channel_midi_type (lscp_client_t *pClient, int iSamplerChannel, const char *pszMidiType);
235 lscp_status_t lscp_set_channel_midi_device (lscp_client_t *pClient, int iSamplerChannel, int iMidiDevice);
236 lscp_status_t lscp_set_channel_midi_port (lscp_client_t *pClient, int iSamplerChannel, int iMidiPort);
237 lscp_status_t lscp_set_channel_midi_channel (lscp_client_t *pClient, int iSamplerChannel, int iMidiChannel);
238 lscp_status_t lscp_set_channel_midi_map (lscp_client_t *pClient, int iSamplerChannel, int iMidiMap);
239 
240 lscp_status_t lscp_set_channel_volume (lscp_client_t *pClient, int iSamplerChannel, float fVolume);
241 
242 lscp_status_t lscp_set_channel_mute (lscp_client_t *pClient, int iSamplerChannel, int iMute);
243 lscp_status_t lscp_set_channel_solo (lscp_client_t *pClient, int iSamplerChannel, int iSolo);
244 
245 lscp_status_t lscp_reset_channel (lscp_client_t *pClient, int iSamplerChannel);
246 
248 
250 
253 
254 float lscp_get_volume (lscp_client_t *pClient);
255 lscp_status_t lscp_set_volume (lscp_client_t *pClient, float fVolume);
256 
257 int lscp_get_voices (lscp_client_t *pClient);
258 lscp_status_t lscp_set_voices (lscp_client_t *pClient, int iMaxVoices);
259 
260 int lscp_get_streams (lscp_client_t *pClient);
261 lscp_status_t lscp_set_streams (lscp_client_t *pClient, int iMaxStreams);
262 
263 //-------------------------------------------------------------------------
264 // Effect sends control functions.
265 
266 int lscp_create_fxsend (lscp_client_t *pClient, int iSamplerChannel, int iMidiController, const char *pszFxName);
267 lscp_status_t lscp_destroy_fxsend (lscp_client_t *pClient, int iSamplerChannel, int iFxSend);
268 
269 int lscp_get_fxsends (lscp_client_t *pClient, int iSamplerChannel);
270 int * lscp_list_fxsends (lscp_client_t *pClient, int iSamplerChannel);
271 
272 lscp_fxsend_info_t * lscp_get_fxsend_info (lscp_client_t *pClient, int iSamplerChannel, int iFxSend);
273 
274 lscp_status_t lscp_set_fxsend_name (lscp_client_t *pClient, int iSamplerChannel, int iFxSend, const char *pszFxName);
275 lscp_status_t lscp_set_fxsend_audio_channel (lscp_client_t *pClient, int iSamplerChannel, int iFxSend, int iAudioSrc, int iAudioDst);
276 lscp_status_t lscp_set_fxsend_midi_controller (lscp_client_t *pClient, int iSamplerChannel, int iFxSend, int iMidiController);
277 lscp_status_t lscp_set_fxsend_level (lscp_client_t *pClient, int iSamplerChannel, int iFxSend, float fLevel);
278 
279 //-------------------------------------------------------------------------
280 // MIDI instrument mapping control functions.
281 
282 int lscp_add_midi_instrument_map (lscp_client_t *pClient, const char *pszMapName);
284 
287 
288 const char * lscp_get_midi_instrument_map_name (lscp_client_t *pClient, int iMidiMap);
289 lscp_status_t lscp_set_midi_instrument_map_name (lscp_client_t *pClient, int iMidiMap, const char *pszMapName);
290 
291 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);
293 
294 int lscp_get_midi_instruments (lscp_client_t *pClient, int iMidiMap);
296 
298 
300 
301 //-------------------------------------------------------------------------
302 // Instrument editor functions.
303 
304 lscp_status_t lscp_edit_channel_instrument (lscp_client_t *pClient, int iSamplerChannel);
305 
306 #if defined(__cplusplus)
307 }
308 #endif
309 
310 #endif // __LSCP_CLIENT_H
311 
312 // end of client.h
Definition: client.h:54
enum _lscp_midi_map_mode_t lscp_midi_map_mode_t
lscp_status_t lscp_set_channel_solo(lscp_client_t *pClient, int iSamplerChannel, int iSolo)
Definition: client.c:1878
float volume
Definition: client.h:143
_lscp_load_mode_t
Definition: client.h:124
lscp_engine_info_t * lscp_get_engine_info(lscp_client_t *pClient, const char *pszEngineName)
Definition: client.c:1208
Definition: client.h:114
lscp_status_t lscp_client_query(lscp_client_t *pClient, const char *pszQuery)
Definition: client.c:682
lscp_status_t lscp_set_channel_audio_device(lscp_client_t *pClient, int iSamplerChannel, int iAudioDevice)
Definition: client.c:1635
lscp_status_t lscp_set_fxsend_name(lscp_client_t *pClient, int iSamplerChannel, int iFxSend, const char *pszFxName)
Definition: client.c:2467
int lscp_get_channel_voice_count(lscp_client_t *pClient, int iSamplerChannel)
Definition: client.c:1410
lscp_status_t lscp_set_streams(lscp_client_t *pClient, int iMaxStreams)
Definition: client.c:2221
Definition: client.h:128
Definition: client.h:129
lscp_status_t lscp_set_channel_mute(lscp_client_t *pClient, int iSamplerChannel, int iMute)
Definition: client.c:1852
lscp_status_t lscp_set_channel_volume(lscp_client_t *pClient, int iSamplerChannel, float fVolume)
Definition: client.c:1822
int map
Definition: client.h:116
int audio_channels
Definition: client.h:67
int lscp_add_midi_instrument_map(lscp_client_t *pClient, const char *pszMapName)
Definition: client.c:2574
int lscp_get_channel_stream_count(lscp_client_t *pClient, int iSamplerChannel)
Definition: client.c:1443
lscp_status_t lscp_set_voices(lscp_client_t *pClient, int iMaxVoices)
Definition: client.c:2157
lscp_status_t lscp_set_fxsend_midi_controller(lscp_client_t *pClient, int iSamplerChannel, int iFxSend, int iMidiController)
Definition: client.c:2520
int bank
Definition: client.h:117
const char * lscp_client_package(void)
Definition: client.c:278
char * name
Definition: client.h:137
lscp_status_t lscp_unmap_midi_instrument(lscp_client_t *pClient, lscp_midi_instrument_t *pMidiInstr)
Definition: client.c:2847
int prog
Definition: client.h:118
lscp_status_t(* lscp_client_proc_t)(struct _lscp_client_t *pClient, lscp_event_t event, const char *pchData, int cchData, void *pvData)
Definition: client.h:166
Definition: client.h:44
int lscp_get_channels(lscp_client_t *pClient)
Definition: client.c:1031
int instrument_status
Definition: client.h:72
lscp_status_t lscp_client_set_timeout(lscp_client_t *pClient, int iTimeout)
Definition: client.c:624
char * name
Definition: client.h:105
char * engine_name
Definition: client.h:138
Definition: client.h:151
Definition: client.h:152
const char * lscp_client_get_result(lscp_client_t *pClient)
Definition: client.c:710
lscp_fxsend_info_t * lscp_get_fxsend_info(lscp_client_t *pClient, int iSamplerChannel, int iFxSend)
Definition: client.c:2387
int instrument_nr
Definition: client.h:140
int lscp_get_midi_instruments(lscp_client_t *pClient, int iMidiMap)
Definition: client.c:2876
char * instrument_name
Definition: client.h:141
lscp_status_t lscp_clear_midi_instruments(lscp_client_t *pClient, int iMidiMap)
Definition: client.c:3066
int instrument_nr
Definition: client.h:70
int * lscp_list_channels(lscp_client_t *pClient)
Definition: client.c:1060
struct _lscp_fxsend_info_t lscp_fxsend_info_t
lscp_status_t lscp_set_channel_midi_channel(lscp_client_t *pClient, int iSamplerChannel, int iMidiChannel)
Definition: client.c:1757
lscp_status_t lscp_set_channel_audio_type(lscp_client_t *pClient, int iSamplerChannel, const char *pszAudioType)
Definition: client.c:1611
float volume
Definition: client.h:77
unsigned int stream_id
Definition: client.h:87
int lscp_get_total_voice_count_max(lscp_client_t *pClient)
Definition: client.c:2024
int midi_port
Definition: client.h:74
lscp_status_t lscp_load_instrument(lscp_client_t *pClient, const char *pszFileName, int iInstrIndex, int iSamplerChannel)
Definition: client.c:960
enum _lscp_status_t lscp_status_t
lscp_status_t lscp_reset_sampler(lscp_client_t *pClient)
Definition: client.c:1921
lscp_status_t lscp_set_channel_midi_port(lscp_client_t *pClient, int iSamplerChannel, int iMidiPort)
Definition: client.c:1732
Definition: client.h:97
int * lscp_list_midi_instrument_maps(lscp_client_t *pClient)
Definition: client.c:2662
lscp_status_t lscp_set_midi_instrument_map_name(lscp_client_t *pClient, int iMidiMap, const char *pszMapName)
Definition: client.c:2749
struct _lscp_client_t lscp_client_t
Definition: client.h:162
int lscp_add_channel(lscp_client_t *pClient)
Definition: client.c:1094
struct _lscp_engine_info_t lscp_engine_info_t
int lscp_client_get_timeout(lscp_client_t *pClient)
Definition: client.c:643
unsigned long stream_usage
Definition: client.h:88
lscp_status_t lscp_client_destroy(lscp_client_t *pClient)
Definition: client.c:541
lscp_status_t lscp_destroy_fxsend(lscp_client_t *pClient, int iSamplerChannel, int iFxSend)
Definition: client.c:2288
lscp_status_t lscp_set_fxsend_level(lscp_client_t *pClient, int iSamplerChannel, int iFxSend, float fLevel)
Definition: client.c:2546
lscp_status_t lscp_set_channel_audio_channel(lscp_client_t *pClient, int iSamplerChannel, int iAudioOut, int iAudioIn)
Definition: client.c:1660
int lscp_get_total_voice_count(lscp_client_t *pClient)
Definition: client.c:1995
struct _lscp_buffer_fill_t lscp_buffer_fill_t
Definition: client.h:126
int lscp_get_available_engines(lscp_client_t *pClient)
Definition: client.c:1144
int midi_map
Definition: client.h:76
lscp_status_t lscp_set_volume(lscp_client_t *pClient, float fVolume)
Definition: client.c:2089
Definition: client.h:135
char * version
Definition: client.h:47
struct _lscp_midi_instrument_info_t lscp_midi_instrument_info_t
lscp_status_t lscp_edit_channel_instrument(lscp_client_t *pClient, int iSamplerChannel)
Definition: client.c:3093
lscp_midi_instrument_info_t * lscp_get_midi_instrument_info(lscp_client_t *pClient, lscp_midi_instrument_t *pMidiInstr)
Definition: client.c:2962
lscp_status_t lscp_client_subscribe(lscp_client_t *pClient, lscp_event_t events)
Definition: client.c:767
int lscp_get_voices(lscp_client_t *pClient)
Definition: client.c:2119
int lscp_client_get_errno(lscp_client_t *pClient)
Definition: client.c:727
char * description
Definition: client.h:46
lscp_status_t lscp_reset_channel(lscp_client_t *pClient, int iSamplerChannel)
Definition: client.c:1901
int lscp_get_midi_instrument_maps(lscp_client_t *pClient)
Definition: client.c:2633
enum _lscp_usage_t lscp_usage_t
struct _lscp_channel_info_t lscp_channel_info_t
const char ** lscp_list_available_engines(lscp_client_t *pClient)
Definition: client.c:1173
float level
Definition: client.h:108
lscp_status_t lscp_set_channel_midi_type(lscp_client_t *pClient, int iSamplerChannel, const char *pszMidiType)
Definition: client.c:1684
char * instrument_file
Definition: client.h:69
int mute
Definition: client.h:78
enum _lscp_event_t lscp_event_t
Definition: client.h:153
lscp_load_mode_t load_mode
Definition: client.h:142
struct _lscp_server_info_t lscp_server_info_t
_lscp_midi_map_mode_t
Definition: client.h:149
char * instrument_name
Definition: client.h:71
int lscp_get_fxsends(lscp_client_t *pClient, int iSamplerChannel)
Definition: client.c:2313
int * audio_routing
Definition: client.h:68
int midi_channel
Definition: client.h:75
const char * lscp_get_midi_instrument_map_name(lscp_client_t *pClient, int iMidiMap)
Definition: client.c:2696
int lscp_get_streams(lscp_client_t *pClient)
Definition: client.c:2183
lscp_midi_instrument_t * lscp_list_midi_instruments(lscp_client_t *pClient, int iMidiMap)
Definition: client.c:2916
lscp_status_t lscp_load_instrument_non_modal(lscp_client_t *pClient, const char *pszFileName, int iInstrIndex, int iSamplerChannel)
Definition: client.c:985
enum _lscp_load_mode_t lscp_load_mode_t
float lscp_get_volume(lscp_client_t *pClient)
Definition: client.c:2053
Definition: client.h:85
lscp_status_t lscp_set_channel_midi_device(lscp_client_t *pClient, int iSamplerChannel, int iMidiDevice)
Definition: client.c:1708
Definition: client.h:127
int midi_controller
Definition: client.h:106
lscp_buffer_fill_t * lscp_get_channel_buffer_fill(lscp_client_t *pClient, lscp_usage_t iUsageType, int iSamplerChannel)
Definition: client.c:1537
_lscp_usage_t
Definition: client.h:94
const char * lscp_client_version(void)
Definition: client.c:281
int lscp_get_channel_stream_usage(lscp_client_t *pClient, int iSamplerChannel)
Definition: client.c:1476
int lscp_create_fxsend(lscp_client_t *pClient, int iSamplerChannel, int iMidiController, const char *pszFxName)
Definition: client.c:2246
bool lscp_client_connection_lost(lscp_client_t *pClient)
Definition: client.c:658
char * version
Definition: client.h:57
int solo
Definition: client.h:79
char * protocol_version
Definition: client.h:48
lscp_client_t * lscp_client_create(const char *pszHost, int iPort, lscp_client_proc_t pfnCallback, void *pvData)
Definition: client.c:304
Definition: client.h:103
lscp_status_t lscp_set_fxsend_audio_channel(lscp_client_t *pClient, int iSamplerChannel, int iFxSend, int iAudioSrc, int iAudioDst)
Definition: client.c:2494
lscp_channel_info_t * lscp_get_channel_info(lscp_client_t *pClient, int iSamplerChannel)
Definition: client.c:1267
char * instrument_file
Definition: client.h:139
int * audio_routing
Definition: client.h:107
lscp_status_t lscp_remove_channel(lscp_client_t *pClient, int iSamplerChannel)
Definition: client.c:1123
lscp_server_info_t * lscp_get_server_info(lscp_client_t *pClient)
Definition: client.c:1937
lscp_status_t lscp_load_engine(lscp_client_t *pClient, const char *pszEngineName, int iSamplerChannel)
Definition: client.c:1009
lscp_status_t lscp_client_join(lscp_client_t *pClient)
Definition: client.c:518
Definition: client.h:63
struct _lscp_midi_instrument_t lscp_midi_instrument_t
lscp_status_t lscp_remove_midi_instrument_map(lscp_client_t *pClient, int iMidiMap)
Definition: client.c:2611
const char * lscp_client_build(void)
Definition: client.c:284
lscp_event_t lscp_client_get_events(lscp_client_t *pClient)
Definition: client.c:937
int audio_device
Definition: client.h:66
Definition: client.h:96
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)
Definition: client.c:2788
lscp_status_t lscp_client_unsubscribe(lscp_client_t *pClient, lscp_event_t events)
Definition: client.c:863
int midi_device
Definition: client.h:73
lscp_status_t lscp_set_channel_midi_map(lscp_client_t *pClient, int iSamplerChannel, int iMidiMap)
Definition: client.c:1787
int * lscp_list_fxsends(lscp_client_t *pClient, int iSamplerChannel)
Definition: client.c:2348
char * description
Definition: client.h:56
char * engine_name
Definition: client.h:65