/[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 523 by capela, Mon May 9 10:17:12 2005 UTC revision 946 by capela, Mon Nov 27 18:33:02 2006 UTC
# Line 1  Line 1 
1  // example_server.c  // example_server.c
2  //  //
3  /****************************************************************************  /****************************************************************************
4     Copyright (C) 2004-2005, 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 42  lscp_status_t server_callback ( lscp_con Line 43  lscp_status_t server_callback ( lscp_con
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 78  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              }              }
87              else if (lscp_parser_test(&tok, "VOICE_COUNT")) {              else if (lscp_parser_test(&tok, "VOICE_COUNT")) {
88                  // Current number of active voices:                  // Current number of active voices:
# Line 348  lscp_status_t server_callback ( lscp_con Line 352  lscp_status_t server_callback ( lscp_con
352              // GET AVAILABLE_ENGINES              // GET AVAILABLE_ENGINES
353              pszResult = "3\r\n";              pszResult = "3\r\n";
354          }          }
355            else if (lscp_parser_test2(&tok, "SERVER", "INFO")) {
356                // Getting information about the server.
357                // GET SERVER INFO
358                sprintf(szTemp, "DESCRIPTION: example_server (%s) %s\r\n"
359                    "VERSION: %s\r\n", lscp_server_package(),
360                    lscp_server_build(), lscp_server_version());
361                pszResult = szTemp;
362            }
363          else if (lscp_parser_test2(&tok, "ENGINE", "INFO")) {          else if (lscp_parser_test2(&tok, "ENGINE", "INFO")) {
364              // Getting information about an engine.              // Getting information about an engine.
365              // GET ENGINE INFO <engine-name>              // GET ENGINE INFO <engine-name>
# Line 365  lscp_status_t server_callback ( lscp_con Line 377  lscp_status_t server_callback ( lscp_con
377              }              }
378              else ret = LSCP_FAILED;              else ret = LSCP_FAILED;
379          }          }
380                    else if (lscp_parser_test(&tok, "TOTAL_VOICE_COUNT")) {
381                            // Current number of active voices:
382                            // GET TOTAL_VOICE_COUNT
383                            sprintf(szTemp, "%d", rand() % 100);
384                            pszResult = szTemp;
385                    }
386                    else if (lscp_parser_test(&tok, "TOTAL_VOICE_COUNT_MAX")) {
387                            // Maximum amount of active voices:
388                            // GET TOTAL_VOICE_COUNT_MAX
389                            sprintf(szTemp, "%d", rand() % 100);
390                            pszResult = szTemp;
391                    }
392            else if (lscp_parser_test(&tok, "MIDI_INSTRUMENTS")) {
393                // Get the total count of MIDI instrument map entries:
394                // GET MIDI_INSTRUMENTS
395                sprintf(szTemp, "%d", iMidiInstruments);
396                pszResult = szTemp;
397            }
398            if (lscp_parser_test2(&tok, "MIDI_INSTRUMENT", "INFO")) {
399                // Getting information about a MIDI instrument map entry:
400                // GET MIDI_INSTRUMENT INFO <midi-bank-msb> <midi-bank-lsb> <midi-prog>
401                pszResult = "NAME: DummyName\r\n"
402                            "ENGINE_NAME: DummyEngine\r\n"
403                            "INSTRUMENT_FILE: DummyInstrument.gig\r\n"
404                            "INSTRUMENT_NR: 0\r\n"
405                            "INSTRUMENT_NAME: Dummy Instrument\r\n"
406                            "LOAD_MODE: ON_DEMAND\r\n"
407                            "VOLUME: 0.5\r\n";
408            }
409          else ret = LSCP_FAILED;          else ret = LSCP_FAILED;
410      }      }
411      else if (lscp_parser_test(&tok, "LIST")) {      else if (lscp_parser_test(&tok, "LIST")) {
# Line 419  lscp_status_t server_callback ( lscp_con Line 460  lscp_status_t server_callback ( lscp_con
460              }              }
461              else ret = LSCP_FAILED;              else ret = LSCP_FAILED;
462          }          }
463            else if (lscp_parser_test(&tok, "LIST_MIDI_INSTRUMENTS")) {
464                            // Getting indeces of all MIDI instrument map entries:
465                            // LIST MIDI_INSTRUMENTS
466                if (iMidiInstruments > 0) {
467                                    strcpy(szTemp, "{0,0,0}");
468                    for (i = 1; i < iMidiInstruments && strlen(szTemp) < sizeof(szTemp) - 16; i++)
469                        sprintf(szTemp + strlen(szTemp), ",{0,%d,%d}", i / 128, i % 128);
470                    strcat(szTemp, "\r\n");
471                    pszResult = szTemp;
472                }
473                else ret = LSCP_FAILED;
474                    }
475          else ret = LSCP_FAILED;          else ret = LSCP_FAILED;
476      }      }
477      else if (lscp_parser_test(&tok, "SET")) {      else if (lscp_parser_test(&tok, "SET")) {
# Line 427  lscp_status_t server_callback ( lscp_con Line 480  lscp_status_t server_callback ( lscp_con
480                  // Setting channel volume:                  // Setting channel volume:
481                  // SET CHANNEL VOLUME <sampler-channel> <volume>                  // SET CHANNEL VOLUME <sampler-channel> <volume>
482              }              }
483                else if (lscp_parser_test(&tok, "MUTE")) {
484                    // Muting a sampler channel:
485                    // SET CHANNEL MUTE <sampler-channel> <mute>
486                }
487                else if (lscp_parser_test(&tok, "SOLO")) {
488                    // Soloing a sampler channel:
489                    // SET CHANNEL SOLO <sampler-channel> <solo>
490                }
491              else if (lscp_parser_test(&tok, "AUDIO_OUTPUT_TYPE")) {              else if (lscp_parser_test(&tok, "AUDIO_OUTPUT_TYPE")) {
492                  // Setting audio output type:                  // Setting audio output type:
493                  // SET CHANNEL AUDIO_OUTPUT_TYPE <sampler-channel> <audio-output-type>                  // SET CHANNEL AUDIO_OUTPUT_TYPE <sampler-channel> <audio-output-type>
# Line 547  lscp_status_t server_callback ( lscp_con Line 608  lscp_status_t server_callback ( lscp_con
608          }          }
609          else ret = LSCP_FAILED;          else ret = LSCP_FAILED;
610      }      }
611        else if (lscp_parser_test2(&tok, "MAP", "MIDI_INSTRUMENT")) {
612            // Create or replace a MIDI instrumnet map entry:
613            // MAP MIDI_INSTRUMENT <midi-bank-msb> <midi-bank-lsb> <midi-prog>
614            // <engine-name> <filename> <instr-index> <volume> <load-mode> [<name>]
615                    iMidiInstruments++;
616            }
617        else if (lscp_parser_test2(&tok, "UNMAP", "MIDI_INSTRUMENT")) {
618            // Remove an entry from the MIDI instrument map:
619            // UNMAP MIDI_INSTRUMENT <midi-bank-msb> <midi-bank-lsb> <midi-prog>
620                    if (iMidiInstruments > 0)
621                            iMidiInstruments--;
622                    else
623                ret = LSCP_FAILED;
624            }
625        else if (lscp_parser_test2(&tok, "CLEAR", "MIDI_INSTRUMENTS")) {
626            // Clear the MIDI instrumnet map:
627            // CLEAR MIDI_INSTRUMENTS
628            }
629      else if (lscp_parser_test(&tok, "SUBSCRIBE")) {      else if (lscp_parser_test(&tok, "SUBSCRIBE")) {
630          // Register frontend for receiving event notification messages:          // Register frontend for receiving event notification messages:
631          // SUBSCRIBE <event>          // SUBSCRIBE <event>

Legend:
Removed from v.523  
changed lines
  Added in v.946

  ViewVC Help
Powered by ViewVC