/[svn]/linuxsampler/trunk/src/engines/AbstractEngineChannel.h
ViewVC logotype

Diff of /linuxsampler/trunk/src/engines/AbstractEngineChannel.h

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

revision 2013 by persson, Sat Oct 24 09:07:38 2009 UTC revision 2326 by persson, Thu Mar 8 19:40:14 2012 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-2009 Christian Schoenebeck                         *   *   Copyright (C) 2005-2008 Christian Schoenebeck                         *
7   *   Copyright (C) 2009 Grigor Iliev                                       *   *   Copyright (C) 2009-2012 Christian Schoenebeck and Grigor Iliev        *
8   *                                                                         *   *                                                                         *
9   *   This program is free software; you can redistribute it and/or modify  *   *   This program is free software; you can redistribute it and/or modify  *
10   *   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 23  Line 23 
23   ***************************************************************************/   ***************************************************************************/
24    
25  #ifndef __LS_ABSTRACTENGINECHANNEL_H__  #ifndef __LS_ABSTRACTENGINECHANNEL_H__
26  #define __LS_ABSTRACTENGINECHANNEL_H__  #define __LS_ABSTRACTENGINECHANNEL_H__
27    
28  #include "EngineChannel.h"  #include "EngineChannel.h"
29  #include "AbstractEngine.h"  #include "AbstractEngine.h"
# Line 38  namespace LinuxSampler { Line 38  namespace LinuxSampler {
38              // implementation of abstract methods derived from interface class 'LinuxSampler::EngineChannel'              // implementation of abstract methods derived from interface class 'LinuxSampler::EngineChannel'
39              virtual void    PrepareLoadInstrument(const char* FileName, uint Instrument);              virtual void    PrepareLoadInstrument(const char* FileName, uint Instrument);
40              virtual void    Reset();              virtual void    Reset();
41              virtual void    SendNoteOn(uint8_t Key, uint8_t Velocity);              virtual void    SendNoteOn(uint8_t Key, uint8_t Velocity, uint8_t MidiChannel);
42              virtual void    SendNoteOn(uint8_t Key, uint8_t Velocity, int32_t FragmentPos);              virtual void    SendNoteOn(uint8_t Key, uint8_t Velocity, uint8_t MidiChannel, int32_t FragmentPos);
43              virtual void    SendNoteOff(uint8_t Key, uint8_t Velocity);              virtual void    SendNoteOff(uint8_t Key, uint8_t Velocity, uint8_t MidiChannel);
44              virtual void    SendNoteOff(uint8_t Key, uint8_t Velocity, int32_t FragmentPos);              virtual void    SendNoteOff(uint8_t Key, uint8_t Velocity, uint8_t MidiChannel, int32_t FragmentPos);
45              virtual void    SendPitchbend(int Pitch);              virtual void    SendPitchbend(int Pitch, uint8_t MidiChannel);
46              virtual void    SendPitchbend(int Pitch, int32_t FragmentPos);              virtual void    SendPitchbend(int Pitch, uint8_t MidiChannel, int32_t FragmentPos);
47              virtual void    SendControlChange(uint8_t Controller, uint8_t Value);              virtual void    SendControlChange(uint8_t Controller, uint8_t Value, uint8_t MidiChannel);
48              virtual void    SendControlChange(uint8_t Controller, uint8_t Value, int32_t FragmentPos);              virtual void    SendControlChange(uint8_t Controller, uint8_t Value, uint8_t MidiChannel, int32_t FragmentPos);
49              virtual bool    StatusChanged(bool bNewStatus = false);              virtual bool    StatusChanged(bool bNewStatus = false);
50              virtual float   Volume();              virtual float   Volume();
51              virtual void    Volume(float f);              virtual void    Volume(float f);
# Line 63  namespace LinuxSampler { Line 63  namespace LinuxSampler {
63              virtual String  InstrumentName();              virtual String  InstrumentName();
64              virtual int     InstrumentIndex();              virtual int     InstrumentIndex();
65              virtual int     InstrumentStatus();              virtual int     InstrumentStatus();
66              virtual LinuxSampler::Engine* GetEngine();              virtual Engine* GetEngine();
67              virtual String  EngineName();              virtual String  EngineName();
68              virtual FxSend* AddFxSend(uint8_t MidiCtrl, String Name = "") throw (Exception);              virtual FxSend* AddFxSend(uint8_t MidiCtrl, String Name = "") throw (Exception);
69              virtual FxSend* GetFxSend(uint FxSendIndex);              virtual FxSend* GetFxSend(uint FxSendIndex);
# Line 75  namespace LinuxSampler { Line 75  namespace LinuxSampler {
75    
76              virtual AbstractEngine::Format GetEngineFormat() = 0;              virtual AbstractEngine::Format GetEngineFormat() = 0;
77    
78                AudioOutputDevice* GetAudioOutputDeviceSafe();
79    
80                friend class AbstractVoice;
81              friend class AbstractEngine;              friend class AbstractEngine;
82              template<class TV, class TRR, class TR, class TD, class TIM, class TI> friend class EngineBase;              template<class TV, class TRR, class TR, class TD, class TIM, class TI> friend class EngineBase;
83                template<class EC, class R, class S, class D> friend class VoiceBase;
84    
85          protected:          protected:
86              AbstractEngineChannel();              AbstractEngineChannel();
87              virtual ~AbstractEngineChannel();              virtual ~AbstractEngineChannel();
88    
89              AbstractEngine*           pEngine;              AbstractEngine*           pEngine;
90                Mutex                     EngineMutex; ///< protects the Engine from access by the instrument loader thread when lscp is disconnecting
91    
92          public: // TODO: should be protected          public: // TODO: should be protected
93              AudioChannel*             pChannelLeft;             ///< encapsulates the audio rendering buffer (left)              AudioChannel*             pChannelLeft;             ///< encapsulates the audio rendering buffer (left)
94              AudioChannel*             pChannelRight;            ///< encapsulates the audio rendering buffer (right)              AudioChannel*             pChannelRight;            ///< encapsulates the audio rendering buffer (right)
# Line 112  namespace LinuxSampler { Line 118  namespace LinuxSampler {
118              int                       iLastPanRequest;          ///< just for the return value of Pan(), so we don't have to make an injective function              int                       iLastPanRequest;          ///< just for the return value of Pan(), so we don't have to make an injective function
119              int                       iEngineIndexSelf;         ///< Reflects the index of this EngineChannel in the Engine's ArrayList.              int                       iEngineIndexSelf;         ///< Reflects the index of this EngineChannel in the Engine's ArrayList.
120              bool                      bStatusChanged;           ///< true in case an engine parameter has changed (e.g. new instrument, another volumet)              bool                      bStatusChanged;           ///< true in case an engine parameter has changed (e.g. new instrument, another volumet)
121                uint32_t                  RoundRobinIndex;          ///< counter for round robin sample selection, incremented for each note on
122    
123              SynchronizedConfig< ArrayList<VirtualMidiDevice*> > virtualMidiDevices;              SynchronizedConfig< ArrayList<VirtualMidiDevice*> > virtualMidiDevices;
124              SynchronizedConfig< ArrayList<VirtualMidiDevice*> >::Reader virtualMidiDevicesReader_AudioThread;              SynchronizedConfig< ArrayList<VirtualMidiDevice*> >::Reader virtualMidiDevicesReader_AudioThread;
125              SynchronizedConfig< ArrayList<VirtualMidiDevice*> >::Reader virtualMidiDevicesReader_MidiThread;              SynchronizedConfig< ArrayList<VirtualMidiDevice*> >::Reader virtualMidiDevicesReader_MidiThread;
126    
127                // specialization of RTList that doesn't require the pool
128                // to be provided at construction time
129                template<typename T>
130                class LazyList : public RTList<T> {
131                public:
132                    using RTList<T>::allocAppend;
133                    using RTList<T>::pPool;
134    
135                    LazyList() : RTList<T>(0) { }
136                    typename RTList<T>::Iterator allocAppend(Pool<T>* pool) {
137                        pPool = pool;
138                        return allocAppend();
139                    }
140                };
141                
142                typedef std::map<uint, LazyList<Event>*> ActiveKeyGroupMap;
143                ActiveKeyGroupMap ActiveKeyGroups;      ///< Contains event queues for key groups, ordered by key group ID.
144    
145              virtual void ResetControllers();              virtual void ResetControllers();
146              virtual void ResetInternal();              virtual void ResetInternal();
147              virtual void RemoveAllFxSends();              virtual void RemoveAllFxSends();
148    
149              void ImportEvents(uint Samples);              void ImportEvents(uint Samples);
150    
151                void AddGroup(uint group);
152                void HandleKeyGroupConflicts(uint KeyGroup, Pool<Event>::Iterator& itNoteOnEvent);
153                void ClearGroupEventLists();
154                void DeleteGroupEventLists();
155      };      };
156    
157  } // namespace LinuxSampler  } // namespace LinuxSampler
158    
159  #endif  /* __LS_ABSTRACTENGINECHANNEL_H__ */  #endif  /* __LS_ABSTRACTENGINECHANNEL_H__ */
160    

Legend:
Removed from v.2013  
changed lines
  Added in v.2326

  ViewVC Help
Powered by ViewVC