29 |
# warning Engine.h included |
# warning Engine.h included |
30 |
#endif // DEBUG_HEADERS |
#endif // DEBUG_HEADERS |
31 |
|
|
32 |
|
#include <map> |
33 |
|
|
34 |
#include "../../common/RingBuffer.h" |
#include "../../common/RingBuffer.h" |
35 |
#include "../../common/RTELMemoryPool.h" |
#include "../../common/RTELMemoryPool.h" |
36 |
#include "../../common/ConditionServer.h" |
#include "../../common/ConditionServer.h" |
46 |
|
|
47 |
namespace LinuxSampler { namespace gig { |
namespace LinuxSampler { namespace gig { |
48 |
|
|
49 |
|
using std::map; |
50 |
|
|
51 |
// just symbol prototyping |
// just symbol prototyping |
52 |
class Voice; |
class Voice; |
53 |
class DiskThread; |
class DiskThread; |
98 |
virtual void ResourceUpdated(::gig::Instrument* pOldResource, ::gig::Instrument* pNewResource, void* pUpdateArg); |
virtual void ResourceUpdated(::gig::Instrument* pOldResource, ::gig::Instrument* pNewResource, void* pUpdateArg); |
99 |
protected: |
protected: |
100 |
struct midi_key_info_t { |
struct midi_key_info_t { |
101 |
RTEList<Voice>* pActiveVoices; ///< Contains the active voices associated with the MIDI key. |
RTEList<Voice>* pActiveVoices; ///< Contains the active voices associated with the MIDI key. |
102 |
bool KeyPressed; ///< Is true if the respective MIDI key is currently pressed. |
bool KeyPressed; ///< Is true if the respective MIDI key is currently pressed. |
103 |
bool Active; ///< If the key contains active voices. |
bool Active; ///< If the key contains active voices. |
104 |
uint* pSelf; ///< hack to allow fast deallocation of the key from the list of active keys |
bool ReleaseTrigger; ///< If we have to launch release triggered voice(s) when the key is released |
105 |
RTEList<Event>* pEvents; ///< Key specific events (only Note-on, Note-off and sustain pedal currently) |
uint* pSelf; ///< hack to allow fast deallocation of the key from the list of active keys |
106 |
|
RTEList<Event>* pEvents; ///< Key specific events (only Note-on, Note-off and sustain pedal currently) |
107 |
}; |
}; |
108 |
|
|
109 |
static InstrumentResourceManager Instruments; |
static InstrumentResourceManager Instruments; |
129 |
float* pSynthesisParameters[Event::destination_count]; ///< Matrix with final synthesis parameters for the current audio fragment which will be used in the main synthesis loop. |
float* pSynthesisParameters[Event::destination_count]; ///< Matrix with final synthesis parameters for the current audio fragment which will be used in the main synthesis loop. |
130 |
biquad_param_t* pBasicFilterParameters; ///< Biquad parameters of the basic bandpass filter. |
biquad_param_t* pBasicFilterParameters; ///< Biquad parameters of the basic bandpass filter. |
131 |
biquad_param_t* pMainFilterParameters; ///< Main biquad parameters of the individual filter (lowpass / bandpass / highpass). |
biquad_param_t* pMainFilterParameters; ///< Main biquad parameters of the individual filter (lowpass / bandpass / highpass). |
132 |
|
map<uint,uint*> ActiveKeyGroups; ///< Contains active keys (in case they belong to a key group) ordered by key group ID. |
133 |
RIFF::File* pRIFF; |
RIFF::File* pRIFF; |
134 |
::gig::File* pGig; |
::gig::File* pGig; |
135 |
::gig::Instrument* pInstrument; |
::gig::Instrument* pInstrument; |
148 |
void ProcessNoteOff(Event* pNoteOffEvent); |
void ProcessNoteOff(Event* pNoteOffEvent); |
149 |
void ProcessPitchbend(Event* pPitchbendEvent); |
void ProcessPitchbend(Event* pPitchbendEvent); |
150 |
void ProcessControlChange(Event* pControlChangeEvent); |
void ProcessControlChange(Event* pControlChangeEvent); |
151 |
void KillVoice(Voice* pVoice); |
void LaunchVoice(Event* pNoteOnEvent, int iLayer = 0, bool ReleaseTriggerVoice = false); |
152 |
|
void KillVoiceImmediately(Voice* pVoice); |
153 |
void ResetSynthesisParameters(Event::destination_t dst, float val); |
void ResetSynthesisParameters(Event::destination_t dst, float val); |
154 |
void ResetInternal(); |
void ResetInternal(); |
155 |
|
|