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

Diff of /linuxsampler/trunk/src/engines/common/AbstractVoice.h

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

revision 2216 by iliev, Mon Jul 25 17:21:16 2011 UTC revision 2879 by schoenebeck, Tue Apr 19 14:07:53 2016 UTC
# Line 4  Line 4 
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-2008 Christian Schoenebeck                         *   *   Copyright (C) 2005-2008 Christian Schoenebeck                         *
7   *   Copyright (C) 2009-2011 Christian Schoenebeck and 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 82  namespace LinuxSampler { Line 82  namespace LinuxSampler {
82      class AbstractVoice : public Voice {      class AbstractVoice : public Voice {
83          public:          public:
84              type_t       Type;         ///< Voice Type (bit field, a voice may have several types)              type_t       Type;         ///< Voice Type (bit field, a voice may have several types)
85              int          MIDIKey;      ///< MIDI key number of the key that triggered the voice              NoteBase*    pNote;        ///< Note this voice belongs to and was caused by.
86                int          MIDIPan;      ///< the current MIDI pan value plus the value from RegionInfo
87    
88              AbstractVoice();              SignalUnitRack* const pSignalUnitRack;
89    
90                AbstractVoice(SignalUnitRack* pRack);
91              virtual ~AbstractVoice();              virtual ~AbstractVoice();
92    
93              inline bool IsActive() { return PlaybackState; }              inline bool IsActive() { return PlaybackState; }
# Line 100  namespace LinuxSampler { Line 103  namespace LinuxSampler {
103                  int                     iKeyGroup                  int                     iKeyGroup
104              );              );
105    
106                /** Invoked when the voice is freed - gone from active to inactive. */
107                virtual void VoiceFreed() { }
108    
109              virtual void Synthesize(uint Samples, sample_t* pSrc, uint Skip);              virtual void Synthesize(uint Samples, sample_t* pSrc, uint Skip);
110                            
111              uint GetSampleRate() { return GetEngine()->SampleRate; }              uint GetSampleRate() { return GetEngine()->SampleRate; }
112                            
113              virtual SignalUnitRack* GetSignalUnitRack() { return NULL; }              uint8_t GetControllerValue(uint8_t Controller) {
114                    return (Controller > 128) ? 0 : pEngineChannel->ControllerTable[Controller];
115                }
116    
117                /// Keyboard key on which this voice should listen to transitional events (i.e. note-off events to release the voice).
118                inline uint8_t HostKey() const { return pNote->hostKey; }
119                /// Keyboard key which the voice should use for calculating any synthesis relevant parameters (i.e. pitch).
120                inline uint8_t MIDIKey() const { return pNote->cause.Param.Note.Key; }
121                /// MIDI note-on velocity value which the voice should use for calculating any synthesis relevant parameters (i.e. amplitude).
122                inline uint8_t MIDIVelocity() const { return pNote->cause.Param.Note.Velocity; }
123    
124              void processCCEvents(RTList<Event>::Iterator& itEvent, uint End);              void processCCEvents(RTList<Event>::Iterator& itEvent, uint End);
125              void processPitchEvent(RTList<Event>::Iterator& itEvent);              void processPitchEvent(RTList<Event>::Iterator& itEvent);
# Line 113  namespace LinuxSampler { Line 128  namespace LinuxSampler {
128              void processGroupEvents(RTList<Event>::Iterator& itEvent, uint End);              void processGroupEvents(RTList<Event>::Iterator& itEvent, uint End);
129              void UpdatePortamentoPos(Pool<Event>::Iterator& itNoteOffEvent);              void UpdatePortamentoPos(Pool<Event>::Iterator& itNoteOffEvent);
130              void Kill(Pool<Event>::Iterator& itKillEvent);              void Kill(Pool<Event>::Iterator& itKillEvent);
131                void CreateEq();
132                void onScaleTuningChanged();
133    
134              bool                Orphan;             ///< true if this voice is playing a sample from an instrument that is unloaded. When the voice dies, the sample (and dimension region) will be handed back to the instrument resource manager.              bool                Orphan;             ///< true if this voice is playing a sample from an instrument that is unloaded. When the voice dies, the sample (and dimension region) will be handed back to the instrument resource manager.
135              playback_state_t    PlaybackState;      ///< When a sample will be triggered, it will be first played from RAM cache and after a couple of sample points it will switch to disk streaming and at the end of a disk stream we have to add null samples, so the interpolator can do it's work correctly              playback_state_t    PlaybackState;      ///< When a sample will be triggered, it will be first played from RAM cache and after a couple of sample points it will switch to disk streaming and at the end of a disk stream we have to add null samples, so the interpolator can do it's work correctly
# Line 158  namespace LinuxSampler { Line 175  namespace LinuxSampler {
175              gig::SynthesisParam         finalSynthesisParameters;              gig::SynthesisParam         finalSynthesisParameters;
176              gig::Loop                   loop;              gig::Loop                   loop;
177              RTList<Event>*              pGroupEvents;        ///< Events directed to an exclusive group              RTList<Event>*              pGroupEvents;        ///< Events directed to an exclusive group
178                
179                EqSupport* pEq;         ///< Used for per voice equalization
180                bool       bEqSupport;
181                
182                void PrintEqInfo() {
183                    if (!bEqSupport || pEq == NULL) {
184                        dmsg(1,("EQ support: no\n"));
185                    } else {
186                        pEq->PrintInfo();
187                    }
188                }
189    
190              virtual AbstractEngine* GetEngine() = 0;              virtual AbstractEngine* GetEngine() = 0;
191              virtual SampleInfo      GetSampleInfo() = 0;              virtual SampleInfo      GetSampleInfo() = 0;
# Line 272  namespace LinuxSampler { Line 300  namespace LinuxSampler {
300    
301              virtual void    GetFirstEventOnKey(uint8_t MIDIKey, RTList<Event>::Iterator& itEvent) = 0;              virtual void    GetFirstEventOnKey(uint8_t MIDIKey, RTList<Event>::Iterator& itEvent) = 0;
302              virtual void    ProcessCCEvent(RTList<Event>::Iterator& itEvent) = 0;              virtual void    ProcessCCEvent(RTList<Event>::Iterator& itEvent) = 0;
303                virtual void    ProcessChannelPressureEvent(RTList<Event>::Iterator& itEvent) = 0;
304                virtual void    ProcessPolyphonicKeyPressureEvent(RTList<Event>::Iterator& itEvent) = 0;
305              virtual void    ProcessCutoffEvent(RTList<Event>::Iterator& itEvent) = 0;              virtual void    ProcessCutoffEvent(RTList<Event>::Iterator& itEvent) = 0;
306              virtual double  GetVelocityRelease(uint8_t MIDIKeyVelocity) = 0;              virtual double  GetVelocityRelease(uint8_t MIDIKeyVelocity) = 0;
307    
# Line 279  namespace LinuxSampler { Line 309  namespace LinuxSampler {
309    
310              virtual void    ProcessGroupEvent(RTList<Event>::Iterator& itEvent) = 0;              virtual void    ProcessGroupEvent(RTList<Event>::Iterator& itEvent) = 0;
311              void            EnterReleaseStage();              void            EnterReleaseStage();
312    
313                virtual int     CalculatePan(uint8_t pan) = 0;
314      };      };
315  } // namespace LinuxSampler  } // namespace LinuxSampler
316    

Legend:
Removed from v.2216  
changed lines
  Added in v.2879

  ViewVC Help
Powered by ViewVC