/[svn]/liblscp/trunk/examples/example_server.c
ViewVC logotype

Diff of /liblscp/trunk/examples/example_server.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 187 by capela, Wed Jul 7 23:41:07 2004 UTC revision 948 by capela, Tue Nov 28 15:31:20 2006 UTC
# Line 1  Line 1 
1  // example_server.c  // example_server.c
2  //  //
3  /****************************************************************************  /****************************************************************************
4     Copyright (C) 2004, rncbc aka Rui Nuno Capela. All rights reserved.     liblscp - LinuxSampler Control Protocol API
5       Copyright (C) 2004-2006, rncbc aka Rui Nuno Capela. All rights reserved.
6    
7     This program is free software; you can redistribute it and/or     This program is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License     modify it under the terms of the GNU General Public License
# Line 13  Line 14 
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15     GNU General Public License for more details.     GNU General Public License for more details.
16    
17     You should have received a copy of the GNU General Public License     You should have received a copy of the GNU General Public License along
18     along with this program; if not, write to the Free Software     with this program; if not, write to the Free Software Foundation, Inc.,
19     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20    
21  *****************************************************************************/  *****************************************************************************/
22    
# Line 37  lscp_status_t server_callback ( lscp_con Line 38  lscp_status_t server_callback ( lscp_con
38      lscp_status_t ret = LSCP_OK;      lscp_status_t ret = LSCP_OK;
39      lscp_parser_t tok;      lscp_parser_t tok;
40      const char *pszResult = NULL;      const char *pszResult = NULL;
41      char szTemp[256];      char szTemp[4096];
42      int i;      int i;
43      static int iSamplerChannel = 0;      static int iSamplerChannel = 0;
44      static int iAudioDevice = 0;      static int iAudioDevice = 0;
45      static int iMidiDevice  = 0;      static int iMidiDevice  = 0;
46        static int iMidiInstruments = 0;
47    
48      if (pchBuffer == NULL) {      if (pchBuffer == NULL) {
49          fprintf(stderr, "server_callback: addr=%s port=%d: ",          fprintf(stderr, "server_callback: addr=%s port=%d: ",
# Line 70  lscp_status_t server_callback ( lscp_con Line 72  lscp_status_t server_callback ( lscp_con
72                  pszResult = "ENGINE_NAME: DummyEngine\r\n"                  pszResult = "ENGINE_NAME: DummyEngine\r\n"
73                              "INSTRUMENT_FILE: DummyInstrument.gig\r\n"                              "INSTRUMENT_FILE: DummyInstrument.gig\r\n"
74                              "INSTRUMENT_NR: 0\r\n"                              "INSTRUMENT_NR: 0\r\n"
75                                "INSTRUMENT_NAME: Dummy Instrument\r\n"
76                              "INSTRUMENT_STATUS: 100\r\n"                              "INSTRUMENT_STATUS: 100\r\n"
77                              "AUDIO_OUTPUT_DEVICE: 0\r\n"                              "AUDIO_OUTPUT_DEVICE: 0\r\n"
78                              "AUDIO_OUTPUT_CHANNELS: 2\r\n"                              "AUDIO_OUTPUT_CHANNELS: 2\r\n"
# Line 77  lscp_status_t server_callback ( lscp_con Line 80  lscp_status_t server_callback ( lscp_con
80                              "MIDI_INPUT_DEVICE: 0\r\n"                              "MIDI_INPUT_DEVICE: 0\r\n"
81                              "MIDI_INPUT_PORT: 0\r\n"                              "MIDI_INPUT_PORT: 0\r\n"
82                              "MIDI_INPUT_CHANNEL: ALL\r\n"                              "MIDI_INPUT_CHANNEL: ALL\r\n"
83                              "VOLUME: 0.5\r\n";                              "VOLUME: 0.5\r\n"
84                                "MUTE: FALSE\r\n"
85                                "SOLO: TRUE\r\n"
86                                                            ".\r\n";
87              }              }
88              else if (lscp_parser_test(&tok, "VOICE_COUNT")) {              else if (lscp_parser_test(&tok, "VOICE_COUNT")) {
89                  // Current number of active voices:                  // Current number of active voices:
90                  // GET CHANNEL VOICE_COUNT <sampler-channel>                  // GET CHANNEL VOICE_COUNT <sampler-channel>
91                  sprintf(szTemp, "%d", rand() % 100);                  sprintf(szTemp, "%d\r\n", rand() % 100);
92                  pszResult = szTemp;                  pszResult = szTemp;
93              }              }
94              else if (lscp_parser_test(&tok, "STREAM_COUNT")) {              else if (lscp_parser_test(&tok, "STREAM_COUNT")) {
# Line 110  lscp_status_t server_callback ( lscp_con Line 116  lscp_status_t server_callback ( lscp_con
116          else if (lscp_parser_test(&tok, "CHANNELS")) {          else if (lscp_parser_test(&tok, "CHANNELS")) {
117              // Current number of sampler channels:              // Current number of sampler channels:
118              // GET CHANNELS              // GET CHANNELS
119              sprintf(szTemp, "%d", iSamplerChannel);              sprintf(szTemp, "%d\r\n", iSamplerChannel);
120              pszResult = szTemp;              pszResult = szTemp;
121          }          }
122          else if (lscp_parser_test(&tok, "AVAILABLE_AUDIO_OUTPUT_DRIVERS")) {          else if (lscp_parser_test(&tok, "AVAILABLE_AUDIO_OUTPUT_DRIVERS")) {
123              // Getting all available audio output drivers.              // Getting all available audio output driver count.
124              // GET AVAILABLE_AUDIO_OUTPUT_DRIVERS              // GET AVAILABLE_AUDIO_OUTPUT_DRIVERS
125              pszResult = "Alsa,Jack,CoreAudio\r\n";              pszResult = "2\r\n";
126          }          }
127          else if (lscp_parser_test(&tok, "AVAILABLE_MIDI_INPUT_DRIVERS")) {          else if (lscp_parser_test(&tok, "AVAILABLE_MIDI_INPUT_DRIVERS")) {
128              // Getting all available MIDI input drivers.              // Getting all available MIDI input driver count.
129              // GET AVAILABLE_MIDI_INPUT_DRIVERS              // GET AVAILABLE_MIDI_INPUT_DRIVERS
130              pszResult = "Alsa,MidiShare,CoreMidi\r\n";              pszResult = "1\r\n";
131          }          }
132          else if (lscp_parser_test2(&tok, "AUDIO_OUTPUT_DRIVER", "INFO")) {          else if (lscp_parser_test2(&tok, "AUDIO_OUTPUT_DRIVER", "INFO")) {
133              // Getting informations about a specific audio output driver.              // Getting informations about a specific audio output driver.
# Line 129  lscp_status_t server_callback ( lscp_con Line 135  lscp_status_t server_callback ( lscp_con
135              if (lscp_parser_test(&tok, "Alsa")) {              if (lscp_parser_test(&tok, "Alsa")) {
136                  pszResult = "DESCRIPTION: 'ALSA PCM'\r\n"                  pszResult = "DESCRIPTION: 'ALSA PCM'\r\n"
137                              "VERSION: '1.0'\r\n"                              "VERSION: '1.0'\r\n"
138                              "PARAMETERS: channels,samplerate,active,card\r\n";                              "PARAMETERS: channels,samplerate,active\r\n"
139                                ".\r\n";
140              }              }
141              else if (lscp_parser_test(&tok, "Jack")) {              else if (lscp_parser_test(&tok, "Jack")) {
142                  pszResult = "DESCRIPTION: JACK Audio Connection Kit\r\n"                  pszResult = "DESCRIPTION: JACK Audio Connection Kit\r\n"
143                              "VERSION: 0.98.1\r\n"                              "VERSION: 0.98.1\r\n"
144                              "PARAMETERS: channels,samplerate,active\r\n";                              "PARAMETERS: channels,samplerate,active\r\n"
145                                ".\r\n";
146              }              }
147              else ret = LSCP_FAILED;              else ret = LSCP_FAILED;
148          }          }
# Line 144  lscp_status_t server_callback ( lscp_con Line 152  lscp_status_t server_callback ( lscp_con
152              if (lscp_parser_test(&tok, "Alsa")) {              if (lscp_parser_test(&tok, "Alsa")) {
153                  pszResult = "DESCRIPTION: ALSA Sequencer\r\n"                  pszResult = "DESCRIPTION: ALSA Sequencer\r\n"
154                              "VERSION: 1.0\r\n"                              "VERSION: 1.0\r\n"
155                              "PARAMETERS: ports,active\r\n";                              "PARAMETERS: ports,active\r\n"
156                                ".\r\n";
157              }              }
158              else ret = LSCP_FAILED;              else ret = LSCP_FAILED;
159          }          }
160          else if (lscp_parser_test2(&tok, "AUDIO_OUTPUT_DRIVER_PARAMETER", "INFO")) {          else if (lscp_parser_test2(&tok, "AUDIO_OUTPUT_DRIVER_PARAMETER", "INFO")) {
161              // Getting informations about a specific audio output driver parameter.              // Getting informations about a specific audio output driver parameter.
162              // GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO <audio-output-type> <param>              // GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO <audio-output-type> <param>
163              if (lscp_parser_test2(&tok, "Alsa", "active")) {              if (lscp_parser_test(&tok, "Alsa")) {
164                  pszResult = "DESCRIPTION: 'ALSA PCM device active state'\r\n"                  if (lscp_parser_test(&tok, "active")) {
165                              "TYPE: BOOL\r\n"                      pszResult = "DESCRIPTION: 'ALSA PCM active state'\r\n"
166                              "MANDATORY: TRUE\r\n"                                  "TYPE: BOOL\r\n"
167                              "FIX: TRUE\r\n"                                  "MANDATORY: TRUE\r\n"
168                              "MULTIPLICITY: FALSE\r\n"                                  "FIX: TRUE\r\n"
169                              "DEPENDS: channels,samplerate,card\r\n"                                  "MULTIPLICITY: FALSE\r\n"
170                              "DEFAULT: TRUE\r\n"                                  "DEPENDS: channels,samplerate,card\r\n"
171                              "RANGE_MIN: FALSE\r\n"                                  "DEFAULT: TRUE\r\n"
172                              "RANGE_MAX: TRUE\r\n"                                  "RANGE_MIN: FALSE\r\n"
173                              "POSSIBILITIES: FALSE,TRUE\r\n";                                  "RANGE_MAX: TRUE\r\n"
174              }                                  "POSSIBILITIES: FALSE,TRUE\r\n"
175              else if (lscp_parser_test2(&tok, "Jack", "active")) {                                  ".\r\n";
176                  pszResult = "DESCRIPTION: 'JACK device active state'\r\n"                  }
177                              "TYPE: BOOL\r\n"                  else if (lscp_parser_test(&tok, "channels")) {
178                              "MANDATORY: TRUE\r\n"                      pszResult = "DESCRIPTION: 'Number of ALSA PCM channels'\r\n"
179                              "FIX: TRUE\r\n"                                  "TYPE: INT\r\n"
180                              "MULTIPLICITY: FALSE\r\n"                                  "MANDATORY: TRUE\r\n"
181                              "DEPENDS: channels,samplerate\r\n"                                  "FIX: TRUE\r\n"
182                              "DEFAULT: TRUE\r\n"                                  "MULTIPLICITY: FALSE\r\n"
183                              "RANGE_MIN: FALSE\r\n"                                  "DEFAULT: 2\r\n"
184                              "RANGE_MAX: TRUE\r\n"                                  ".\r\n";
185                              "POSSIBILITIES: FALSE,TRUE\r\n";                  }
186                    else if (lscp_parser_test(&tok, "samplerate")) {
187                        pszResult = "DESCRIPTION: 'ALSA PCM sample rate'\r\n"
188                                    "TYPE: INT\r\n"
189                                    "MANDATORY: TRUE\r\n"
190                                    "FIX: TRUE\r\n"
191                                    "MULTIPLICITY: TRUE\r\n"
192                                    "DEFAULT: 44100\r\n"
193                                    "POSSIBILITIES: 44100,48000,96000\r\n"
194                                    ".\r\n";
195                    }
196                    else ret = LSCP_FAILED;
197                }
198                else if (lscp_parser_test(&tok, "Jack")) {
199                    if (lscp_parser_test(&tok, "active")) {
200                        pszResult = "DESCRIPTION: 'JACK active state'\r\n"
201                                    "TYPE: BOOL\r\n"
202                                    "MANDATORY: TRUE\r\n"
203                                    "FIX: TRUE\r\n"
204                                    "MULTIPLICITY: FALSE\r\n"
205                                    "DEPENDS: channels,samplerate\r\n"
206                                    "DEFAULT: TRUE\r\n"
207                                    "RANGE_MIN: FALSE\r\n"
208                                    "RANGE_MAX: TRUE\r\n"
209                                    "POSSIBILITIES: FALSE,TRUE\r\n"
210                                    ".\r\n";
211                    }
212                    else if (lscp_parser_test(&tok, "channels")) {
213                        pszResult = "DESCRIPTION: 'Number of JACK audio channels'\r\n"
214                                    "TYPE: INT\r\n"
215                                    "MANDATORY: TRUE\r\n"
216                                    "FIX: TRUE\r\n"
217                                    "MULTIPLICITY: FALSE\r\n"
218                                    "DEFAULT: 2\r\n"
219                                    ".\r\n";
220                    }
221                    else if (lscp_parser_test(&tok, "samplerate")) {
222                        pszResult = "DESCRIPTION: 'JACK sample rate'\r\n"
223                                    "TYPE: INT\r\n"
224                                    "MANDATORY: TRUE\r\n"
225                                    "FIX: TRUE\r\n"
226                                    "MULTIPLICITY: TRUE\r\n"
227                                    "DEFAULT: 44100\r\n"
228                                    "POSSIBILITIES: 44100,48000,96000\r\n"
229                                    ".\r\n";
230                    }
231                    else ret = LSCP_FAILED;
232              }              }
233              else ret = LSCP_FAILED;              else ret = LSCP_FAILED;
234          }          }
235          else if (lscp_parser_test2(&tok, "MIDI_INPUT_DRIVER_PARAMETER", "INFO")) {          else if (lscp_parser_test2(&tok, "MIDI_INPUT_DRIVER_PARAMETER", "INFO")) {
236              // Getting informations about a specific MIDI input driver parameter.              // Getting informations about a specific MIDI input driver parameter.
237              // GET MIDI_INPUT_DRIVER_PARAMETER INFO <midi-input-type> <param>              // GET MIDI_INPUT_DRIVER_PARAMETER INFO <midi-input-type> <param>
238              if (lscp_parser_test2(&tok, "Alsa", "active")) {              if (lscp_parser_test(&tok, "Alsa")) {
239                  pszResult = "DESCRIPTION: 'ALSA Sequencer device active state'\r\n"                  if (lscp_parser_test(&tok, "active")) {
240                              "TYPE: BOOL\r\n"                      pszResult = "DESCRIPTION: 'ALSA Sequencer device active state'\r\n"
241                              "MANDATORY: TRUE\r\n"                                  "TYPE: BOOL\r\n"
242                              "FIX: TRUE\r\n"                                  "MANDATORY: TRUE\r\n"
243                              "MULTIPLICITY: FALSE\r\n"                                  "FIX: TRUE\r\n"
244                              "DEPENDS: channels,ports\r\n"                                  "MULTIPLICITY: FALSE\r\n"
245                              "DEFAULT: TRUE\r\n"                                  "DEPENDS: channels,ports\r\n"
246                              "RANGE_MIN: FALSE\r\n"                                  "DEFAULT: TRUE\r\n"
247                              "RANGE_MAX: TRUE\r\n"                                  "RANGE_MIN: FALSE\r\n"
248                              "POSSIBILITIES: FALSE,TRUE\r\n";                                  "RANGE_MAX: TRUE\r\n"
249                                    "POSSIBILITIES: FALSE,TRUE\r\n"
250                                    ".\r\n";
251                    }
252                    else if (lscp_parser_test(&tok, "ports")) {
253                        pszResult = "DESCRIPTION: 'Number of ALSA Sequencer ports'\r\n"
254                                    "TYPE: INT\r\n"
255                                    "MANDATORY: FALSE\r\n"
256                                    "FIX: FALSE\r\n"
257                                    "MULTIPLICITY: FALSE\r\n"
258                                    "DEFAULT: 1\r\n"
259                                    "RANGE_MIN: 1\r\n"
260                                    "RANGE_MAX: 4\r\n"
261                                    ".\r\n";
262                    }
263                    else ret = LSCP_FAILED;
264              }              }
265              else ret = LSCP_FAILED;              else ret = LSCP_FAILED;
266          }          }
# Line 201  lscp_status_t server_callback ( lscp_con Line 271  lscp_status_t server_callback ( lscp_con
271                  pszResult = "driver: Alsa\r\n"                  pszResult = "driver: Alsa\r\n"
272                              "active: TRUE\r\n"                              "active: TRUE\r\n"
273                              "channels: 2\r\n"                              "channels: 2\r\n"
274                              "samplerate: 44100\r\n";                              "samplerate: 44100\r\n"
275                                ".\r\n";
276              }              }
277              else ret = LSCP_FAILED;              else ret = LSCP_FAILED;
278          }          }
# Line 212  lscp_status_t server_callback ( lscp_con Line 283  lscp_status_t server_callback ( lscp_con
283                  pszResult = "driver: Alsa\r\n"                  pszResult = "driver: Alsa\r\n"
284                              "active: TRUE\r\n"                              "active: TRUE\r\n"
285                              "channels: 16\r\n"                              "channels: 16\r\n"
286                              "ports: 1\r\n";                              "ports: 1\r\n"
287                                ".\r\n";
288              }              }
289              else ret = LSCP_FAILED;              else ret = LSCP_FAILED;
290          }          }
291            else if (lscp_parser_test2(&tok, "AUDIO_OUTPUT_CHANNEL", "INFO")) {
292                // Getting informations about an audio channel.
293                // GET AUDIO_OUTPUT_CHANNEL INFO <audio-device-id> <audio-channel>
294                if (lscp_parser_nextint(&tok) < iAudioDevice) {
295                    pszResult = "name: DummyMonitor\r\n"
296                                "is_mix_channel: FALSE\r\n"
297                                "mix_channel_destination: 0\r\n"
298                                ".\r\n";
299                }
300                else ret = LSCP_FAILED;
301            }
302            else if (lscp_parser_test2(&tok, "MIDI_INPUT_PORT", "INFO")) {
303                // Getting informations about a MIDI port.
304                // GET MIDI_INPUT_PORT INFO <midi-device-id> <midi-port>
305                if (lscp_parser_nextint(&tok) < iMidiDevice) {
306                    pszResult = "name: DummyKeyboard\r\n"
307                                "alsa_seq_bindings: '64:0'\r\n"
308                                ".\r\n";
309                }
310                else ret = LSCP_FAILED;
311            }
312            else if (lscp_parser_test2(&tok, "AUDIO_OUTPUT_CHANNEL_PARAMETER", "INFO")) {
313                // Getting informations about specific audio channel parameter.
314                // GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO <audio-device-id> <audio-channel> <param>
315                if (lscp_parser_nextint(&tok) < iAudioDevice) {
316                    lscp_parser_nextint(&tok);
317                    if (lscp_parser_test(&tok, "is_mix_channel")) {
318                        pszResult = "DESCRIPTION: 'Whether this is an audio mix channel'\r\n"
319                                    "TYPE: BOOL\r\n"
320                                    "MANDATORY: TRUE\r\n"
321                                    "FIX: FALSE\r\n"
322                                    "MULTIPLICITY: FALSE\r\n"
323                                    "POSSIBILITIES: FALSE,TRUE\r\n"
324                                    ".\r\n";
325                    }
326                    else if (lscp_parser_test(&tok, "mix_channel_destination")) {
327                        pszResult = "DESCRIPTION: 'Audio mix channel destination'\r\n"
328                                    "TYPE: INT\r\n"
329                                    "MANDATORY: TRUE\r\n"
330                                    "FIX: FALSE\r\n"
331                                    "MULTIPLICITY: TRUE\r\n"
332                                    "POSSIBILITIES: 0,1\r\n"
333                                    ".\r\n";
334                    }
335                    else ret = LSCP_FAILED;
336                }
337                else ret = LSCP_FAILED;
338            }
339            else if (lscp_parser_test2(&tok, "MIDI_INPUT_PORT_PARAMETER", "INFO")) {
340                // Getting informations about specific MIDI port parameter.
341                // GET MIDI_INPUT_PORT_PARAMETER INFO <midi-device-id> <midi-port> <param>
342                if (lscp_parser_nextint(&tok) < iMidiDevice) {
343                    lscp_parser_nextint(&tok);
344                    if (lscp_parser_test(&tok, "alsa_seq_bindings")) {
345                        pszResult = "DESCRIPTION: 'Alsa sequencer port bindings'\r\n"
346                                    "TYPE: STRING\r\n"
347                                    "MANDATORY: TRUE\r\n"
348                                    "FIX: FALSE\r\n"
349                                    "MULTIPLICITY: TRUE\r\n"
350                                    "POSSIBILITIES: '64:0','68:0','68:1'\r\n"
351                                    ".\r\n";
352                    }
353                    else ret = LSCP_FAILED;
354                }
355                else ret = LSCP_FAILED;
356            }
357            else if (lscp_parser_test(&tok, "AUDIO_OUTPUT_DEVICES")) {
358                // Getting all created audio output device count.
359                // GET AUDIO_OUTPUT_DEVICES
360                sprintf(szTemp, "%d\r\n", iAudioDevice);
361                pszResult = szTemp;
362            }
363            else if (lscp_parser_test(&tok, "MIDI_INPUT_DEVICES")) {
364                // Getting all created MID input device count.
365                // GET MIDI_INPUT_DEVICES
366                sprintf(szTemp, "%d\r\n", iMidiDevice);
367                pszResult = szTemp;
368            }
369          else if (lscp_parser_test(&tok, "AVAILABLE_ENGINES")) {          else if (lscp_parser_test(&tok, "AVAILABLE_ENGINES")) {
370              // Getting all available engines:              // Getting all available engine count:
371              // GET AVAILABLE_ENGINES              // GET AVAILABLE_ENGINES
372              pszResult = "GigEngine,DLSEngine,AkaiEngine\r\n";              pszResult = "3\r\n";
373            }
374            else if (lscp_parser_test2(&tok, "SERVER", "INFO")) {
375                // Getting information about the server.
376                // GET SERVER INFO
377                sprintf(szTemp, "DESCRIPTION: example_server (%s) %s\r\n"
378                    "VERSION: %s\r\n.\r\n", lscp_server_package(),
379                    lscp_server_build(), lscp_server_version());
380                pszResult = szTemp;
381          }          }
382          else if (lscp_parser_test2(&tok, "ENGINE", "INFO")) {          else if (lscp_parser_test2(&tok, "ENGINE", "INFO")) {
383              // Getting information about an engine.              // Getting information about an engine.
384              // GET ENGINE INFO <engine-name>              // GET ENGINE INFO <engine-name>
385              if (lscp_parser_test(&tok, "GigEngine")) {              if (lscp_parser_test(&tok, "GigEngine")) {
386                  pszResult = "DESCRIPTION: GigaSampler Engine\r\n"                  pszResult = "DESCRIPTION: GigaSampler Engine\r\n"
387                              "VERSION: 0.3\r\n";                              "VERSION: 0.3\r\n"
388                                ".\r\n";
389              }              }
390              else if (lscp_parser_test(&tok, "DLSEngine")) {              else if (lscp_parser_test(&tok, "DLSEngine")) {
391                  pszResult = "DESCRIPTION: 'DLS Generic Engine'\r\n"                  pszResult = "DESCRIPTION: 'DLS Generic Engine'\r\n"
392                              "VERSION: 0.2\r\n";                              "VERSION: 0.2\r\n"
393                                ".\r\n";
394              }              }
395              else if (lscp_parser_test(&tok, "AkaiEngine")) {              else if (lscp_parser_test(&tok, "AkaiEngine")) {
396                  pszResult = "DESCRIPTION: Akai Sampler Engine\r\n"                  pszResult = "DESCRIPTION: Akai Sampler Engine\r\n"
397                              "VERSION: 0.1\r\n";                              "VERSION: 0.1\r\n"
398                                ".\r\n";
399              }              }
400              else ret = LSCP_FAILED;              else ret = LSCP_FAILED;
401          }          }
402            else if (lscp_parser_test(&tok, "TOTAL_VOICE_COUNT")) {
403                // Current number of active voices:
404                // GET TOTAL_VOICE_COUNT
405                sprintf(szTemp, "%d\r\n", rand() % 100);
406                pszResult = szTemp;
407            }
408            else if (lscp_parser_test(&tok, "TOTAL_VOICE_COUNT_MAX")) {
409                // Maximum amount of active voices:
410                // GET TOTAL_VOICE_COUNT_MAX
411                sprintf(szTemp, "%d\r\n", rand() % 100);
412                pszResult = szTemp;
413            }
414            else if (lscp_parser_test(&tok, "MIDI_INSTRUMENTS")) {
415                // Get the total count of MIDI instrument map entries:
416                // GET MIDI_INSTRUMENTS
417                sprintf(szTemp, "%d\r\n", iMidiInstruments);
418                pszResult = szTemp;
419            }
420            if (lscp_parser_test2(&tok, "MIDI_INSTRUMENT", "INFO")) {
421                // Getting information about a MIDI instrument map entry:
422                // GET MIDI_INSTRUMENT INFO <midi-bank-msb> <midi-bank-lsb> <midi-prog>
423                pszResult = "NAME: DummyName\r\n"
424                            "ENGINE_NAME: DummyEngine\r\n"
425                            "INSTRUMENT_FILE: DummyInstrument.gig\r\n"
426                            "INSTRUMENT_NR: 0\r\n"
427                            "INSTRUMENT_NAME: Dummy Instrument\r\n"
428                            "LOAD_MODE: ON_DEMAND\r\n"
429                            "VOLUME: 0.5\r\n"
430                            ".\r\n";
431            }
432          else ret = LSCP_FAILED;          else ret = LSCP_FAILED;
433      }      }
434      else if (lscp_parser_test(&tok, "LIST")) {      else if (lscp_parser_test(&tok, "LIST")) {
435          if (lscp_parser_test(&tok, "CHANNELS")) {          if (lscp_parser_test(&tok, "CHANNELS")) {
436              // Getting all created sampler channel list.              // Getting all created sampler channel list.
437              // GET CHANNELS              // LIST CHANNELS
438              if (iSamplerChannel > 0) {              if (iSamplerChannel > 0) {
439                  strcpy(szTemp, "0");                  strcpy(szTemp, "0");
440                  for (i = 1; i < iSamplerChannel && strlen(szTemp) < sizeof(szTemp) - 8; i++)                  for (i = 1; i < iSamplerChannel && strlen(szTemp) < sizeof(szTemp) - 8; i++)
# Line 253  lscp_status_t server_callback ( lscp_con Line 444  lscp_status_t server_callback ( lscp_con
444              }              }
445              else ret = LSCP_FAILED;              else ret = LSCP_FAILED;
446          }          }
447            else if (lscp_parser_test(&tok, "AVAILABLE_ENGINES")) {
448                // Getting all available engines:
449                // LIST AVAILABLE_ENGINES
450                pszResult = "GigEngine,DLSEngine,AkaiEngine\r\n";
451            }
452            else if (lscp_parser_test(&tok, "AVAILABLE_AUDIO_OUTPUT_DRIVERS")) {
453                // Getting all available audio output drivers.
454                // LIST AVAILABLE_AUDIO_OUTPUT_DRIVERS
455                pszResult = "ALSA,JACK\r\n";
456            }
457            else if (lscp_parser_test(&tok, "AVAILABLE_MIDI_INPUT_DRIVERS")) {
458                // Getting all available MIDI input drivers.
459                // LIST AVAILABLE_MIDI_INPUT_DRIVERS
460                pszResult = "ALSA\r\n";
461            }
462          else if (lscp_parser_test(&tok, "AUDIO_OUTPUT_DEVICES")) {          else if (lscp_parser_test(&tok, "AUDIO_OUTPUT_DEVICES")) {
463              // Getting all created audio output device list.              // Getting all created audio output device list.
464              // GET AUDIO_OUTPUT_DEVICES              // LIST AUDIO_OUTPUT_DEVICES
465              if (iAudioDevice > 0) {              if (iAudioDevice > 0) {
466                  strcpy(szTemp, "0");                  strcpy(szTemp, "0");
467                  for (i = 1; i < iAudioDevice && strlen(szTemp) < sizeof(szTemp) - 8; i++)                  for (i = 1; i < iAudioDevice && strlen(szTemp) < sizeof(szTemp) - 8; i++)
# Line 267  lscp_status_t server_callback ( lscp_con Line 473  lscp_status_t server_callback ( lscp_con
473          }          }
474          else if (lscp_parser_test(&tok, "MIDI_INPUT_DEVICES")) {          else if (lscp_parser_test(&tok, "MIDI_INPUT_DEVICES")) {
475              // Getting all created MID input device list.              // Getting all created MID input device list.
476              // GET MIDI_INPUT_DEVICES              // LIST MIDI_INPUT_DEVICES
477              if (iMidiDevice > 0) {              if (iMidiDevice > 0) {
478                  strcpy(szTemp, "0");                  strcpy(szTemp, "0");
479                  for (i = 1; i < iMidiDevice && strlen(szTemp) < sizeof(szTemp) - 8; i++)                  for (i = 1; i < iMidiDevice && strlen(szTemp) < sizeof(szTemp) - 8; i++)
# Line 277  lscp_status_t server_callback ( lscp_con Line 483  lscp_status_t server_callback ( lscp_con
483              }              }
484              else ret = LSCP_FAILED;              else ret = LSCP_FAILED;
485          }          }
486            else if (lscp_parser_test(&tok, "MIDI_INSTRUMENTS")) {
487                // Getting indeces of all MIDI instrument map entries:
488                // LIST MIDI_INSTRUMENTS
489                if (iMidiInstruments > 0) {
490                    strcpy(szTemp, "{0,0,0}");
491                    for (i = 1; i < iMidiInstruments && strlen(szTemp) < sizeof(szTemp) - 16; i++)
492                        sprintf(szTemp + strlen(szTemp), ",{0,%d,%d}", i / 128, i % 128);
493                    strcat(szTemp, "\r\n");
494                    pszResult = szTemp;
495                }
496                else ret = LSCP_FAILED;
497            }
498          else ret = LSCP_FAILED;          else ret = LSCP_FAILED;
499      }      }
500      else if (lscp_parser_test(&tok, "SET")) {      else if (lscp_parser_test(&tok, "SET")) {
# Line 285  lscp_status_t server_callback ( lscp_con Line 503  lscp_status_t server_callback ( lscp_con
503                  // Setting channel volume:                  // Setting channel volume:
504                  // SET CHANNEL VOLUME <sampler-channel> <volume>                  // SET CHANNEL VOLUME <sampler-channel> <volume>
505              }              }
506                else if (lscp_parser_test(&tok, "MUTE")) {
507                    // Muting a sampler channel:
508                    // SET CHANNEL MUTE <sampler-channel> <mute>
509                }
510                else if (lscp_parser_test(&tok, "SOLO")) {
511                    // Soloing a sampler channel:
512                    // SET CHANNEL SOLO <sampler-channel> <solo>
513                }
514              else if (lscp_parser_test(&tok, "AUDIO_OUTPUT_TYPE")) {              else if (lscp_parser_test(&tok, "AUDIO_OUTPUT_TYPE")) {
515                  // Setting audio output type:                  // Setting audio output type:
516                  // SET CHANNEL AUDIO_OUTPUT_TYPE <sampler-channel> <audio-output-type>                  // SET CHANNEL AUDIO_OUTPUT_TYPE <sampler-channel> <audio-output-type>
# Line 332  lscp_status_t server_callback ( lscp_con Line 558  lscp_status_t server_callback ( lscp_con
558          // Adding a new sampler channel:          // Adding a new sampler channel:
559          // ADD CHANNEL          // ADD CHANNEL
560          if (iSamplerChannel < 16) {          if (iSamplerChannel < 16) {
561              sprintf(szTemp, "OK[%d]", iSamplerChannel++);                      sprintf(szTemp, "OK[%d]\r\n", iSamplerChannel++);
562              pszResult = szTemp;              pszResult = szTemp;
563          } else {          } else {
564              iSamplerChannel = 0;              iSamplerChannel = 0;
# Line 342  lscp_status_t server_callback ( lscp_con Line 568  lscp_status_t server_callback ( lscp_con
568      else if (lscp_parser_test2(&tok, "REMOVE", "CHANNEL")) {      else if (lscp_parser_test2(&tok, "REMOVE", "CHANNEL")) {
569          // Removing a sampler channel:          // Removing a sampler channel:
570          // REMOVE CHANNEL <sampler-channel>          // REMOVE CHANNEL <sampler-channel>
571          if (lscp_parser_nextint(&tok) > iSamplerChannel)          if (lscp_parser_nextint(&tok) < iSamplerChannel)
572                iSamplerChannel--;
573            else
574              ret = LSCP_FAILED;              ret = LSCP_FAILED;
575      }      }
576      else if (lscp_parser_test2(&tok, "RESET", "CHANNEL")) {      else if (lscp_parser_test(&tok, "RESET")) {
577          // Resetting a sampler channel:          if (lscp_parser_test(&tok, "CHANNEL")) {
578          // RESET CHANNEL <sampler-channel>              // Resetting a sampler channel:
579          if (lscp_parser_nextint(&tok) > iSamplerChannel)              // RESET CHANNEL <sampler-channel>
580              ret = LSCP_FAILED;              if (lscp_parser_nextint(&tok) > iSamplerChannel)
581                    ret = LSCP_FAILED;
582            } else {
583                // Reset sampler:
584                // RESET
585                iSamplerChannel = 0;
586                iAudioDevice = 0;
587                iMidiDevice = 0;
588            }
589      }      }
590      else if (lscp_parser_test(&tok, "CREATE")) {      else if (lscp_parser_test(&tok, "CREATE")) {
591          if (lscp_parser_test(&tok, "AUDIO_OUTPUT_DEVICE")) {          if (lscp_parser_test(&tok, "AUDIO_OUTPUT_DEVICE")) {
592              // Creating an audio output device.              // Creating an audio output device.
593              // CREATE AUDIO_OUTPUT_DEVICE <audio-output-driver> [<params>]              // CREATE AUDIO_OUTPUT_DEVICE <audio-output-driver> [<params>]
594              if (iAudioDevice < 8) {              if (iAudioDevice < 8) {
595                  sprintf(szTemp, "OK[%d]", iAudioDevice++);                  sprintf(szTemp, "OK[%d]\r\n", iAudioDevice++);
596                  pszResult = szTemp;                  pszResult = szTemp;
597              } else {              } else {
598                  iAudioDevice = 0;                  iAudioDevice = 0;
# Line 367  lscp_status_t server_callback ( lscp_con Line 603  lscp_status_t server_callback ( lscp_con
603              // Creating an MIDI input device.              // Creating an MIDI input device.
604              // CREATE MIDI_INPUT_DEVICE <midi-input-driver> [<params>]              // CREATE MIDI_INPUT_DEVICE <midi-input-driver> [<params>]
605              if (iMidiDevice < 8) {              if (iMidiDevice < 8) {
606                  sprintf(szTemp, "OK[%d]", iMidiDevice++);                  sprintf(szTemp, "OK[%d]\r\n", iMidiDevice++);
607                  pszResult = szTemp;                  pszResult = szTemp;
608              } else {              } else {
609                  iMidiDevice = 0;                  iMidiDevice = 0;
# Line 380  lscp_status_t server_callback ( lscp_con Line 616  lscp_status_t server_callback ( lscp_con
616          if (lscp_parser_test(&tok, "AUDIO_OUTPUT_DEVICE")) {          if (lscp_parser_test(&tok, "AUDIO_OUTPUT_DEVICE")) {
617              // Destroying an audio output device.              // Destroying an audio output device.
618              // DESTROY AUDIO_OUTPUT_DEVICE <audio-device-id>              // DESTROY AUDIO_OUTPUT_DEVICE <audio-device-id>
619              if (lscp_parser_nextint(&tok) > iAudioDevice)              if (lscp_parser_nextint(&tok) < iAudioDevice)
620                    iAudioDevice--;
621                else
622                  ret = LSCP_FAILED;                  ret = LSCP_FAILED;
623          }          }
624          else if (lscp_parser_test(&tok, "MIDI_INPUT_DEVICE")) {          else if (lscp_parser_test(&tok, "MIDI_INPUT_DEVICE")) {
625              // Destroying an MIDI intput device.              // Destroying an MIDI intput device.
626              // DESTROY MIDI_INPUT_DEVICE <midi-device-id>              // DESTROY MIDI_INPUT_DEVICE <midi-device-id>
627              if (lscp_parser_nextint(&tok) > iMidiDevice)              if (lscp_parser_nextint(&tok) < iMidiDevice)
628                    iMidiDevice--;
629                else
630                  ret = LSCP_FAILED;                  ret = LSCP_FAILED;
631          }          }
632          else ret = LSCP_FAILED;          else ret = LSCP_FAILED;
633      }      }
634        else if (lscp_parser_test2(&tok, "MAP", "MIDI_INSTRUMENT")) {
635            // Create or replace a MIDI instrumnet map entry:
636            // MAP MIDI_INSTRUMENT <midi-bank-msb> <midi-bank-lsb> <midi-prog>
637            // <engine-name> <filename> <instr-index> <volume> <load-mode> [<name>]
638            iMidiInstruments++;
639        }
640        else if (lscp_parser_test2(&tok, "UNMAP", "MIDI_INSTRUMENT")) {
641            // Remove an entry from the MIDI instrument map:
642            // UNMAP MIDI_INSTRUMENT <midi-bank-msb> <midi-bank-lsb> <midi-prog>
643            if (iMidiInstruments > 0)
644                iMidiInstruments--;
645            else
646                ret = LSCP_FAILED;
647        }
648        else if (lscp_parser_test2(&tok, "CLEAR", "MIDI_INSTRUMENTS")) {
649            // Clear the MIDI instrumnet map:
650            // CLEAR MIDI_INSTRUMENTS
651        }
652      else if (lscp_parser_test(&tok, "SUBSCRIBE")) {      else if (lscp_parser_test(&tok, "SUBSCRIBE")) {
653          // Register frontend for receiving event notification messages:          // Register frontend for receiving event notification messages:
654          // SUBSCRIBE <event>          // SUBSCRIBE <event>
# Line 421  lscp_status_t server_callback ( lscp_con Line 679  lscp_status_t server_callback ( lscp_con
679    
680  ////////////////////////////////////////////////////////////////////////  ////////////////////////////////////////////////////////////////////////
681    
682    
683  void server_usage (void)  void server_usage (void)
684  {  {
685      printf("\n  %s %s (Build: %s)\n", lscp_server_package(), lscp_server_version(), lscp_server_build());      printf("\n  %s %s (Build: %s)\n", lscp_server_package(), lscp_server_version(), lscp_server_build());

Legend:
Removed from v.187  
changed lines
  Added in v.948

  ViewVC Help
Powered by ViewVC