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

Diff of /linuxsampler/trunk/src/engines/gig/EngineChannel.h

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

revision 829 by schoenebeck, Sat Jan 14 14:07:47 2006 UTC revision 2871 by schoenebeck, Sun Apr 10 18:22:23 2016 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, 2006 Christian Schoenebeck                        *   *   Copyright (C) 2005 - 2008 Christian Schoenebeck                       *
7     *   Copyright (C) 2009 - 2012 Christian Schoenebeck and Grigor Iliev      *
8     *   Copyright (C) 2012 - 2016 Christian Schoenebeck and Andreas Persson   *
9   *                                                                         *   *                                                                         *
10   *   This program is free software; you can redistribute it and/or modify  *   *   This program is free software; you can redistribute it and/or modify  *
11   *   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 22  Line 24 
24   ***************************************************************************/   ***************************************************************************/
25    
26  #ifndef __LS_GIG_ENGINECHANNEL_H__  #ifndef __LS_GIG_ENGINECHANNEL_H__
27  #define __LS_GIG_ENGINECHANNEL_H__  #define __LS_GIG_ENGINECHANNEL_H__
28    
29  #if DEBUG_HEADERS  #include "../AbstractEngine.h"
30  # warning EngineChannel.h included  #include "../EngineChannelBase.h"
31  #endif // DEBUG_HEADERS  #include "../EngineChannelFactory.h"
   
 #include "../common/Event.h"  
 #include "../common/EngineChannel.h"  
 #include "EngineGlobals.h"  
 #include "Engine.h"  
32  #include "Voice.h"  #include "Voice.h"
33  #include "InstrumentResourceManager.h"  #include <gig.h>
34    
35  namespace LinuxSampler { namespace gig {  namespace LinuxSampler { namespace gig {
   
     // just symbol prototyping  
     class midi_key_info_t;  
36      class Voice;      class Voice;
37    
38      /** @brief Engine Channel of a gig::Engine      class EngineChannel: public LinuxSampler::EngineChannelBase<Voice, ::gig::DimensionRegion, ::gig::Instrument> {
      *  
      * Encapsulates a engine channel for the Gigasampler format capable  
      * sampler engine.  
      */  
     class EngineChannel : public LinuxSampler::EngineChannel, public InstrumentConsumer {  
39          public:          public:
40                virtual void SendProgramChange(uint8_t Program);
41                virtual void LoadInstrument();
42                virtual void ResetInternal(bool bResetEngine) OVERRIDE;
43                virtual String InstrumentFileName();
44                virtual String InstrumentFileName(int index);
45    
46                virtual AbstractEngine::Format GetEngineFormat();
47    
48                friend class Voice;
49                friend class Engine;
50                friend class LinuxSampler::EngineChannelFactory;
51    
52            protected:
53              EngineChannel();              EngineChannel();
54              virtual ~EngineChannel();              virtual ~EngineChannel();
55    
56              // implementation of abstract methods derived from interface class 'LinuxSampler::EngineChannel'              float CurrentKeyDimension;      ///< Current value (0-1.0) for the keyboard dimension, altered by pressing a keyswitching key.
             virtual void    PrepareLoadInstrument(const char* FileName, uint Instrument);  
             virtual void    LoadInstrument();  
             virtual void    Reset();  
             virtual void    SendNoteOn(uint8_t Key, uint8_t Velocity);  
             virtual void    SendNoteOff(uint8_t Key, uint8_t Velocity);  
             virtual void    SendPitchbend(int Pitch);  
             virtual void    SendControlChange(uint8_t Controller, uint8_t Value);  
             virtual bool    StatusChanged(bool bNewStatus = false);  
             virtual float   Volume();  
             virtual void    Volume(float f);  
             virtual uint    Channels();  
             virtual void    Connect(AudioOutputDevice* pAudioOut);  
             virtual void    DisconnectAudioOutputDevice();  
             virtual void    SetOutputChannel(uint EngineAudioChannel, uint AudioDeviceChannel);  
             virtual int     OutputChannel(uint EngineAudioChannel);  
             virtual void    Connect(MidiInputPort* pMidiPort, midi_chan_t MidiChannel);  
             virtual void    DisconnectMidiInputPort();  
             virtual MidiInputPort* GetMidiInputPort();  
             virtual midi_chan_t MidiChannel();  
             virtual String  InstrumentFileName();  
             virtual String  InstrumentName();  
             virtual int     InstrumentIndex();  
             virtual int     InstrumentStatus();  
             virtual LinuxSampler::Engine* GetEngine();  
             virtual String  EngineName();  
   
             // implementation of abstract methods derived from interface class 'InstrumentConsumer'  
             virtual void ResourceToBeUpdated(::gig::Instrument* pResource, void*& pUpdateArg);  
             virtual void ResourceUpdated(::gig::Instrument* pOldResource, ::gig::Instrument* pNewResource, void* pUpdateArg);  
             virtual void OnResourceProgress(float fProgress);  
   
         //protected:  
             Engine*                 pEngine;  
             float*                  pOutputLeft;              ///< Audio output channel buffer (left)  
             float*                  pOutputRight;             ///< Audio output channel buffer (right)  
             int                     AudioDeviceChannelLeft;   ///< audio device channel number to which the left channel is connected to  
             int                     AudioDeviceChannelRight;  ///< audio device channel number to which the right channel is connected to  
             MidiInputPort*          pMidiInputPort;           ///< Points to the connected MIDI input port or NULL if none assigned.  
             midi_chan_t             midiChannel;              ///< MIDI channel(s) on which this engine channel listens to.  
             RingBuffer<Event>*      pEventQueue;              ///< Input event queue.  
             RTList<Event>*          pEvents;                  ///< All engine channel specific events for the current audio fragment.  
             uint8_t                 ControllerTable[128];     ///< Reflects the current values (0-127) of all MIDI controllers for this engine / sampler channel.  
             midi_key_info_t*        pMIDIKeyInfo;             ///< Contains all active voices sorted by MIDI key number and other informations to the respective MIDI key  
             Pool<uint>*             pActiveKeys;              ///< Holds all keys in it's allocation list with active voices.  
             std::map<uint,uint*>    ActiveKeyGroups;          ///< Contains active keys (in case they belong to a key group) ordered by key group ID.  
             ::gig::Instrument*      pInstrument;  
             bool                    SustainPedal;             ///< true if sustain pedal is down  
             bool                    SostenutoPedal;           ///< true if sostenuto pedal is down  
             bool                    SoloMode;                 ///< in Solo Mode we only play one voice (group) at a time  
             int                     SoloKey;                  ///< Currently 'active' solo key, that is the key to which the currently sounding voice belongs to (only if SoloMode is enabled)  
             bool                    PortamentoMode;           ///< in Portamento Mode we slide the pitch from the last note to the current note.  
             float                   PortamentoTime;           ///< How long it will take to glide from the previous note to the current (in seconds)  
             float                   PortamentoPos;            ///< Current position on the keyboard, that is integer and fractional part (only used if PortamentoMode is on)  
             double                  GlobalVolume;             ///< overall volume (a value < 1.0 means attenuation, a value > 1.0 means amplification)  
             float                   GlobalPanLeft;  
             float                   GlobalPanRight;  
             int                     Pitch;                    ///< Current (absolute) MIDI pitch value.  
             int                     CurrentKeyDimension;      ///< Current value (0-127) for the keyboard dimension, altered by pressing a keyswitching key.  
             String                  InstrumentFile;  
             int                     InstrumentIdx;  
             String                  InstrumentIdxName;  
             int                     InstrumentStat;  
             int                     iEngineIndexSelf;         ///< Reflects the index of this EngineChannel in the Engine's ArrayList.  
             bool                    bStatusChanged;           ///< true in case an engine parameter has changed (e.g. new instrument, another volumet)  
   
             void ResetControllers();  
             void ClearEventLists();  
             void ImportEvents(uint Samples);  
57    
58              friend class Engine;              virtual void ProcessKeySwitchChange(int key);
             friend class Voice;  
             friend class InstrumentResourceManager;  
59    
         private:  
             void ResetInternal();  
60      };      };
61    
62  }} // namespace LinuxSampler::gig  }} // namespace LinuxSampler::gig
63    
64  #endif // __LS_GIG_ENGINECHANNEL_H__  #endif  /* __LS_GIG_ENGINECHANNEL_H__ */

Legend:
Removed from v.829  
changed lines
  Added in v.2871

  ViewVC Help
Powered by ViewVC