/[svn]/linuxsampler/trunk/src/network/lscpserver.h
ViewVC logotype

Diff of /linuxsampler/trunk/src/network/lscpserver.h

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

revision 1535 by iliev, Mon Dec 3 13:59:03 2007 UTC revision 2500 by schoenebeck, Fri Jan 10 12:20:05 2014 UTC
# Line 3  Line 3 
3   *   LinuxSampler - modular, streaming capable sampler                     *   *   LinuxSampler - modular, streaming capable sampler                     *
4   *                                                                         *   *                                                                         *
5   *   Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck   *   *   Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck   *
6   *   Copyright (C) 2005 - 2007 Christian Schoenebeck                       *   *   Copyright (C) 2005 - 2014 Christian Schoenebeck                       *
7   *                                                                         *   *                                                                         *
8   *   This library is free software; you can redistribute it and/or modify  *   *   This library is free software; you can redistribute it and/or modify  *
9   *   it under the terms of the GNU General Public License as published by  *   *   it under the terms of the GNU General Public License as published by  *
# Line 43  typedef int socklen_t; Line 43  typedef int socklen_t;
43    
44  #include "lscp.h"  #include "lscp.h"
45  #include "lscpparser.h"  #include "lscpparser.h"
 #include "lscp.h"  
46  #include "lscpevent.h"  #include "lscpevent.h"
47  #include "../Sampler.h"  #include "../Sampler.h"
48  #include "../common/Thread.h"  #include "../common/Thread.h"
# Line 52  typedef int socklen_t; Line 51  typedef int socklen_t;
51  #include "../common/global_private.h"  #include "../common/global_private.h"
52    
53  #include "../drivers/midi/MidiInstrumentMapper.h"  #include "../drivers/midi/MidiInstrumentMapper.h"
54    #include "../drivers/midi/VirtualMidiDevice.h"
55    
56  #if HAVE_SQLITE3  #if HAVE_SQLITE3
57  #include "../db/InstrumentsDb.h"  #include "../db/InstrumentsDb.h"
# Line 64  typedef int socklen_t; Line 64  typedef int socklen_t;
64  /// try up to 3 minutes to bind server socket  /// try up to 3 minutes to bind server socket
65  #define LSCP_SERVER_BIND_TIMEOUT 180  #define LSCP_SERVER_BIND_TIMEOUT 180
66    
 using namespace LinuxSampler;  
   
67  // External references to the main scanner and parser functions  // External references to the main scanner and parser functions
68  extern int yyparse(void* YYPARSE_PARAM);  extern int yyparse(void* YYPARSE_PARAM);
69    
70    namespace LinuxSampler {
71    
72  extern void restart(yyparse_param_t* pparam, int& yychar);  extern void restart(yyparse_param_t* pparam, int& yychar);
73    
74  /**  /**
# Line 78  class LSCPServer : public Thread { Line 79  class LSCPServer : public Thread {
79          LSCPServer(Sampler* pSampler, long int addr, short int port);          LSCPServer(Sampler* pSampler, long int addr, short int port);
80          virtual ~LSCPServer();          virtual ~LSCPServer();
81          int WaitUntilInitialized(long TimeoutSeconds = 0L, long TimeoutNanoSeconds = 0L);          int WaitUntilInitialized(long TimeoutSeconds = 0L, long TimeoutNanoSeconds = 0L);
82            void RemoveListeners();
83    
84          // Methods called by the parser          // Methods called by the parser
85          String DestroyAudioOutputDevice(uint DeviceIndex);          String DestroyAudioOutputDevice(uint DeviceIndex);
# Line 130  class LSCPServer : public Thread { Line 132  class LSCPServer : public Thread {
132          String SetAudioOutputChannel(uint ChannelAudioOutputChannel, uint AudioOutputDeviceInputChannel, uint uiSamplerChannel);          String SetAudioOutputChannel(uint ChannelAudioOutputChannel, uint AudioOutputDeviceInputChannel, uint uiSamplerChannel);
133          String SetAudioOutputDevice(uint AudioDeviceId, uint SamplerChannel);          String SetAudioOutputDevice(uint AudioDeviceId, uint SamplerChannel);
134          String SetAudioOutputType(String AudioOutputDriver, uint uiSamplerChannel);          String SetAudioOutputType(String AudioOutputDriver, uint uiSamplerChannel);
135            String AddChannelMidiInput(uint uiSamplerChannel, uint MIDIDeviceId, uint MIDIPort = 0);
136            String RemoveChannelMidiInput(uint uiSamplerChannel);
137            String RemoveChannelMidiInput(uint uiSamplerChannel, uint MIDIDeviceId);
138            String RemoveChannelMidiInput(uint uiSamplerChannel, uint MIDIDeviceId, uint MIDIPort);
139            String ListChannelMidiInputs(uint uiSamplerChannel);
140          String SetMIDIInputPort(uint MIDIPort, uint uiSamplerChannel);          String SetMIDIInputPort(uint MIDIPort, uint uiSamplerChannel);
141          String SetMIDIInputChannel(uint MIDIChannel, uint uiSamplerChannel);          String SetMIDIInputChannel(uint MIDIChannel, uint uiSamplerChannel);
142          String SetMIDIInputDevice(uint MIDIDeviceId, uint uiSamplerChannel);          String SetMIDIInputDevice(uint MIDIDeviceId, uint uiSamplerChannel);
# Line 164  class LSCPServer : public Thread { Line 171  class LSCPServer : public Thread {
171          String SetFxSendAudioOutputChannel(uint uiSamplerChannel, uint FxSendID, uint FxSendChannel, uint DeviceChannel);          String SetFxSendAudioOutputChannel(uint uiSamplerChannel, uint FxSendID, uint FxSendChannel, uint DeviceChannel);
172          String SetFxSendMidiController(uint uiSamplerChannel, uint FxSendID, uint MidiController);          String SetFxSendMidiController(uint uiSamplerChannel, uint FxSendID, uint MidiController);
173          String SetFxSendLevel(uint uiSamplerChannel, uint FxSendID, double dLevel);          String SetFxSendLevel(uint uiSamplerChannel, uint FxSendID, double dLevel);
174            String SetFxSendEffect(uint uiSamplerChannel, uint FxSendID, int iSendEffectChain, int iEffectChainPosition);
175    
176            // effect commands
177            String GetAvailableEffects();
178            String ListAvailableEffects();
179            String GetEffectInfo(int iEffectIndex);
180            String CreateEffectInstance(int iEffectIndex);
181            String CreateEffectInstance(String effectSystem, String module, String effectName);
182            String DestroyEffectInstance(int iEffectInstance);
183            String GetEffectInstances();
184            String ListEffectInstances();
185            String GetEffectInstanceInfo(int iEffectInstance);
186            String GetEffectInstanceInputControlInfo(int iEffectInstance, int iInputControlIndex);
187            String SetEffectInstanceInputControlValue(int iEffectInstance, int iInputControlIndex, double dValue);
188            String GetSendEffectChains(int iAudioOutputDevice);
189            String ListSendEffectChains(int iAudioOutputDevice);
190            String AddSendEffectChain(int iAudioOutputDevice);
191            String RemoveSendEffectChain(int iAudioOutputDevice, int iSendEffectChain);
192            String GetSendEffectChainInfo(int iAudioOutputDevice, int iSendEffectChain);
193            String AppendSendEffectChainEffect(int iAudioOutputDevice, int iSendEffectChain, int iEffectInstance);
194            String InsertSendEffectChainEffect(int iAudioOutputDevice, int iSendEffectChain, int iEffectChainPosition, int iEffectInstance);
195            String RemoveSendEffectChainEffect(int iAudioOutputDevice, int iSendEffectChain, int iEffectChainPosition);
196    
197          String AddDbInstrumentDirectory(String Dir);          String AddDbInstrumentDirectory(String Dir);
198          String RemoveDbInstrumentDirectory(String Dir, bool Force = false);          String RemoveDbInstrumentDirectory(String Dir, bool Force = false);
199          String GetDbInstrumentDirectoryCount(String Dir, bool Recursive = false);          String GetDbInstrumentDirectoryCount(String Dir, bool Recursive = false);
# Line 175  class LSCPServer : public Thread { Line 205  class LSCPServer : public Thread {
205          String SetDbInstrumentDirectoryDescription(String Dir, String Desc);          String SetDbInstrumentDirectoryDescription(String Dir, String Desc);
206          String FindDbInstrumentDirectories(String Dir, std::map<String,String> Parameters, bool Recursive = true);          String FindDbInstrumentDirectories(String Dir, std::map<String,String> Parameters, bool Recursive = true);
207          String AddDbInstruments(String DbDir, String FilePath, int Index = -1, bool bBackground = false);          String AddDbInstruments(String DbDir, String FilePath, int Index = -1, bool bBackground = false);
208          String AddDbInstruments(String ScanMode, String DbDir, String FsDir, bool bBackground = false);          String AddDbInstruments(String ScanMode, String DbDir, String FsDir, bool bBackground = false, bool insDir = false);
209          String RemoveDbInstrument(String Instr);          String RemoveDbInstrument(String Instr);
210          String GetDbInstrumentCount(String Dir, bool Recursive = false);          String GetDbInstrumentCount(String Dir, bool Recursive = false);
211          String GetDbInstruments(String Dir, bool Recursive = false);          String GetDbInstruments(String Dir, bool Recursive = false);
# Line 184  class LSCPServer : public Thread { Line 214  class LSCPServer : public Thread {
214          String MoveDbInstrument(String Instr, String Dst);          String MoveDbInstrument(String Instr, String Dst);
215          String CopyDbInstrument(String Instr, String Dst);          String CopyDbInstrument(String Instr, String Dst);
216          String SetDbInstrumentDescription(String Instr, String Desc);          String SetDbInstrumentDescription(String Instr, String Desc);
217            String SetDbInstrumentFilePath(String OldPath, String NewPath);
218            String FindLostDbInstrumentFiles();
219          String FindDbInstruments(String Dir, std::map<String,String> Parameters, bool Recursive = true);          String FindDbInstruments(String Dir, std::map<String,String> Parameters, bool Recursive = true);
220          String FormatInstrumentsDb();          String FormatInstrumentsDb();
221          String EditSamplerChannelInstrument(uint uiSamplerChannel);          String EditSamplerChannelInstrument(uint uiSamplerChannel);
# Line 191  class LSCPServer : public Thread { Line 223  class LSCPServer : public Thread {
223          String ResetChannel(uint uiSamplerChannel);          String ResetChannel(uint uiSamplerChannel);
224          String ResetSampler();          String ResetSampler();
225          String GetServerInfo();          String GetServerInfo();
226            String GetTotalStreamCount();
227          String GetTotalVoiceCount();          String GetTotalVoiceCount();
228          String GetTotalVoiceCountMax();          String GetTotalVoiceCountMax();
229            String GetGlobalMaxVoices();
230            String SetGlobalMaxVoices(int iVoices);
231            String GetGlobalMaxStreams();
232            String SetGlobalMaxStreams(int iStreams);
233          String GetGlobalVolume();          String GetGlobalVolume();
234          String SetGlobalVolume(double dVolume);          String SetGlobalVolume(double dVolume);
235          String GetFileInstruments(String Filename);          String GetFileInstruments(String Filename);
236          String ListFileInstruments(String Filename);          String ListFileInstruments(String Filename);
237          String GetFileInstrumentInfo(String Filename, uint InstrumentID);          String GetFileInstrumentInfo(String Filename, uint InstrumentID);
238            String SendChannelMidiData(String MidiMsg, uint uiSamplerChannel, uint Arg1, uint Arg2);
239          String SubscribeNotification(LSCPEvent::event_t);          String SubscribeNotification(LSCPEvent::event_t);
240          String UnsubscribeNotification(LSCPEvent::event_t);          String UnsubscribeNotification(LSCPEvent::event_t);
241          String SetEcho(yyparse_param_t* pSession, double boolean_value);          String SetEcho(yyparse_param_t* pSession, double boolean_value);
242          void   AnswerClient(String ReturnMessage);          void   AnswerClient(String ReturnMessage);
243            void   CloseAllConnections();
244    
245          static int currentSocket;          static int currentSocket;
246          static std::map<int,String> bufferedCommands;          static std::map<int,String> bufferedCommands;
247    
248          static void SendLSCPNotify( LSCPEvent Event );          static void SendLSCPNotify( LSCPEvent Event );
249          static int EventSubscribers( std::list<LSCPEvent::event_t> events );          static int EventSubscribers( std::list<LSCPEvent::event_t> events );
250          static void LockRTNotify( void ) { RTNotifyMutex.Lock(); }          static String FilterEndlines(String s);
251          static void UnlockRTNotify( void ) { RTNotifyMutex.Unlock(); }  
252      static String FilterEndlines(String s);          //Protect main thread that generates real time notify messages
253            //like voice count, stream count and buffer fill
254            //from LSCP server removing engines and channels from underneath
255            static Mutex RTNotifyMutex;
256    
257      protected:      protected:
258          int            hSocket;          int            hSocket;
# Line 242  class LSCPServer : public Thread { Line 284  class LSCPServer : public Thread {
284          bool HasSoloChannel();          bool HasSoloChannel();
285          void MuteNonSoloChannels();          void MuteNonSoloChannels();
286          void UnmuteChannels();          void UnmuteChannels();
287            
288          /**          /**
289           * Throws an exception if the specified file is not found or           * Throws an exception if the specified file is not found or
290           * if directory is specified.           * if directory is specified.
# Line 259  class LSCPServer : public Thread { Line 301  class LSCPServer : public Thread {
301          static std::map< LSCPEvent::event_t, std::list<int> > eventSubscriptions;          static std::map< LSCPEvent::event_t, std::list<int> > eventSubscriptions;
302          static fd_set fdSet;          static fd_set fdSet;
303    
         //Protect main thread that generates real time notify messages  
         //like voice count, stream count and buffer fill  
         //from LSCP server removing engines and channels from underneath  
         static Mutex RTNotifyMutex;  
   
304          class EventHandler : public ChannelCountListener, public AudioDeviceCountListener,          class EventHandler : public ChannelCountListener, public AudioDeviceCountListener,
305              public MidiDeviceCountListener, public MidiInstrumentCountListener,              public MidiDeviceCountListener, public MidiInstrumentCountListener,
306              public MidiInstrumentInfoListener, public MidiInstrumentMapCountListener,              public MidiInstrumentInfoListener, public MidiInstrumentMapCountListener,
307              public MidiInstrumentMapInfoListener, public FxSendCountListener,              public MidiInstrumentMapInfoListener, public FxSendCountListener,
308              public VoiceCountListener, public StreamCountListener,              public VoiceCountListener, public StreamCountListener, public BufferFillListener,
309              public BufferFillListener, public TotalVoiceCountListener {              public TotalStreamCountListener, public TotalVoiceCountListener,
310                public EngineChangeListener, public MidiPortCountListener {
311    
312              public:              public:
313                    EventHandler(LSCPServer* pParent);
314    
315                  /**                  /**
316                   * Invoked when the number of sampler channels has changed.                   * Invoked when the number of sampler channels has changed.
317                   * @param NewCount The new number of sampler channels.                   * @param NewCount The new number of sampler channels.
318                   */                   */
319                  virtual void ChannelCountChanged(int NewCount);                  virtual void ChannelCountChanged(int NewCount);
320                    virtual void ChannelAdded(SamplerChannel* pChannel);
321                    virtual void ChannelToBeRemoved(SamplerChannel* pChannel);
322    
323                  /**                  /**
324                   * Invoked when the number of audio output devices has changed.                   * Invoked when the number of audio output devices has changed.
# Line 291  class LSCPServer : public Thread { Line 333  class LSCPServer : public Thread {
333                  virtual void MidiDeviceCountChanged(int NewCount);                  virtual void MidiDeviceCountChanged(int NewCount);
334    
335                  /**                  /**
336                     * Invoked right before the supplied MIDI input device is going
337                     * to be destroyed.
338                     * @param pDevice MidiInputDevice to be deleted
339                     */
340                    virtual void MidiDeviceToBeDestroyed(MidiInputDevice* pDevice);
341    
342                    /**
343                     * Invoked to inform that a new MidiInputDevice has just been
344                     * created.
345                     * @param pDevice newly created MidiInputDevice
346                     */
347                    virtual void MidiDeviceCreated(MidiInputDevice* pDevice);
348    
349                    /**
350                     * Invoked when the number of MIDI input ports has changed.
351                     * @param NewCount The new number of MIDI input ports.
352                     */
353                    virtual void MidiPortCountChanged(int NewCount);
354    
355                    /**
356                     * Invoked right before the supplied MIDI input port is going
357                     * to be destroyed.
358                     * @param pPort MidiInputPort to be deleted
359                     */
360                    virtual void MidiPortToBeRemoved(MidiInputPort* pPort);
361    
362                    /**
363                     * Invoked to inform that a new MidiInputPort has just been
364                     * added.
365                     * @param pPort newly created MidiInputPort
366                     */
367                    virtual void MidiPortAdded(MidiInputPort* pPort);
368    
369                    /**
370                   * Invoked when the number of MIDI instruments has changed.                   * Invoked when the number of MIDI instruments has changed.
371                   * @param MapId The numerical ID of the MIDI instrument map.                   * @param MapId The numerical ID of the MIDI instrument map.
372                   * @param NewCount The new number of MIDI instruments.                   * @param NewCount The new number of MIDI instruments.
# Line 354  class LSCPServer : public Thread { Line 430  class LSCPServer : public Thread {
430                   * @param NewCount The new number of active voices.                   * @param NewCount The new number of active voices.
431                   */                   */
432                  virtual void TotalVoiceCountChanged(int NewCount);                  virtual void TotalVoiceCountChanged(int NewCount);
433                    virtual void TotalStreamCountChanged(int NewCount);
434    
435                    virtual void EngineToBeChanged(int ChannelId);
436                    virtual void EngineChanged(int ChannelId);
437    
438                    virtual ~EventHandler();
439    
440                    struct midi_listener_entry {
441                        SamplerChannel* pSamplerChannel;
442                        EngineChannel* pEngineChannel;
443                        VirtualMidiDevice* pMidiListener;
444                    };
445    
446                    std::vector<midi_listener_entry> channelMidiListeners;
447    
448                    struct device_midi_listener_entry {
449                        MidiInputPort* pPort;
450                        VirtualMidiDevice* pMidiListener;
451                        uint uiDeviceID;
452                    };
453    
454                    std::vector<device_midi_listener_entry> deviceMidiListeners;
455    
456                private:
457                    LSCPServer* pParent;
458          } eventHandler;          } eventHandler;
459    
460  #if HAVE_SQLITE3  #if HAVE_SQLITE3
# Line 370  class LSCPServer : public Thread { Line 471  class LSCPServer : public Thread {
471  #endif // HAVE_SQLITE3  #endif // HAVE_SQLITE3
472  };  };
473    
474    }
475    
476  #endif // __LSCPSERVER_H_  #endif // __LSCPSERVER_H_

Legend:
Removed from v.1535  
changed lines
  Added in v.2500

  ViewVC Help
Powered by ViewVC