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 43 /** Server info cache struct. */ 44 typedef struct _lscp_server_info_t 45 { 46 char * description; 47 char * version; 48 char * protocol_version; 49 50 } lscp_server_info_t; 51 52 53 /** Engine info cache struct. */ 54 typedef struct _lscp_engine_info_t 55 { 56 char * description; 57 char * version; 58 59 } lscp_engine_info_t; 60 61 62 /** Channel info cache struct. */ 63 typedef struct _lscp_channel_info_t 64 { 65 char * engine_name; 66 int audio_device; 67 int audio_channels; 68 int * audio_routing; 69 char * instrument_file; 70 int instrument_nr; 71 char * instrument_name; 72 int instrument_status; 73 int midi_device; 74 int midi_port; 75 int midi_channel; 76 int midi_map; 77 float volume; 78 int mute; 79 int solo; 80 81 } lscp_channel_info_t; 82 83 84 /** Buffer fill cache struct. */ 85 typedef struct _lscp_buffer_fill_t 86 { 87 unsigned int stream_id; 88 unsigned long stream_usage; 89 90 } lscp_buffer_fill_t; 91 92 93 /** Buffer fill stream usage types. */ 94 typedef enum _lscp_usage_t 95 { 96 LSCP_USAGE_BYTES = 0, 97 LSCP_USAGE_PERCENTAGE 98 99 } lscp_usage_t; 100 101 102 /** Effect send info cache struct. */ 103 typedef struct _lscp_fxsend_info_t 104 { 105 char * name; 106 int midi_controller; 107 int * audio_routing; 108 float level; 109 110 } lscp_fxsend_info_t; 111 112 113 /** MIDI instrument parameter struct. */ 114 typedef struct _lscp_midi_instrument_t 115 { 116 int map; 117 int bank; 118 int prog; 119 120 } lscp_midi_instrument_t; 121 122 123 /** MIDI instrument load mode. */ 124 typedef enum _lscp_load_mode_t 125 { 126 LSCP_LOAD_DEFAULT = 0, 127 LSCP_LOAD_ON_DEMAND, 128 LSCP_LOAD_ON_DEMAND_HOLD, 129 LSCP_LOAD_PERSISTENT 130 131 } lscp_load_mode_t; 132 133 134 /** MIDI instrument info cache struct. */ 135 typedef struct _lscp_midi_instrument_info_t 136 { 137 char * name; 138 char * engine_name; 139 char * instrument_file; 140 int instrument_nr; 141 char * instrument_name; 142 lscp_load_mode_t load_mode; 143 float volume; 144 145 } lscp_midi_instrument_info_t; 146 147 148 /** MIDI instrument map mode. */ 149 typedef enum _lscp_midi_map_mode_t 150 { 151 LSCP_MIDI_MAP_NONE = -1, 152 LSCP_MIDI_MAP_DEFAULT = -2, 153 LSCP_MIDI_MAP_ALL = -3 154 155 } lscp_midi_map_mode_t; 156 157 158 //------------------------------------------------------------------------- 159 // Client socket main structure. 160 161 /** Client opaque descriptor struct. */ 162 typedef struct _lscp_client_t lscp_client_t; 163 164 /** Client event callback procedure prototype. */ 165 typedef lscp_status_t (*lscp_client_proc_t) 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); 185 lscp_status_t lscp_client_join (lscp_client_t *pClient); 186 lscp_status_t lscp_client_destroy (lscp_client_t *pClient); 187 188 lscp_status_t lscp_client_set_timeout (lscp_client_t *pClient, int iTimeout); 189 int lscp_client_get_timeout (lscp_client_t *pClient); 190 bool lscp_client_connection_lost (lscp_client_t *pClient); 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 202 lscp_status_t lscp_client_subscribe (lscp_client_t *pClient, lscp_event_t events); 203 lscp_status_t lscp_client_unsubscribe (lscp_client_t *pClient, lscp_event_t events); 204 205 lscp_event_t lscp_client_get_events (lscp_client_t *pClient); 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 218 int lscp_get_available_engines (lscp_client_t *pClient); 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 247 lscp_status_t lscp_reset_sampler (lscp_client_t *pClient); 248 249 lscp_server_info_t * lscp_get_server_info (lscp_client_t *pClient); 250 251 int lscp_get_total_voice_count (lscp_client_t *pClient); 252 int lscp_get_total_voice_count_max (lscp_client_t *pClient); 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); 283 lscp_status_t lscp_remove_midi_instrument_map (lscp_client_t *pClient, int iMidiMap); 284 285 int lscp_get_midi_instrument_maps (lscp_client_t *pClient); 286 int * lscp_list_midi_instrument_maps (lscp_client_t *pClient); 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); 292 lscp_status_t lscp_unmap_midi_instrument (lscp_client_t *pClient, lscp_midi_instrument_t *pMidiInstr); 293 294 int lscp_get_midi_instruments (lscp_client_t *pClient, int iMidiMap); 295 lscp_midi_instrument_t *lscp_list_midi_instruments (lscp_client_t *pClient, int iMidiMap); 296 297 lscp_midi_instrument_info_t *lscp_get_midi_instrument_info(lscp_client_t *pClient, lscp_midi_instrument_t *pMidiInstr); 298 299 lscp_status_t lscp_clear_midi_instruments (lscp_client_t *pClient, int iMidiMap); 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 313