24 |
#ifndef __LS_GIG_ENGINEGLOBALS_H__ |
#ifndef __LS_GIG_ENGINEGLOBALS_H__ |
25 |
#define __LS_GIG_ENGINEGLOBALS_H__ |
#define __LS_GIG_ENGINEGLOBALS_H__ |
26 |
|
|
|
#if DEBUG_HEADERS |
|
|
# warning EngineGlobals.h included |
|
|
#endif // DEBUG_HEADERS |
|
|
|
|
|
#define PITCHBEND_SEMITONES 12 |
|
|
#define MAX_AUDIO_VOICES 128 |
|
|
#define SYSEX_BUFFER_SIZE 2048 // 2kB |
|
|
#define VOICE_STEAL_ALGORITHM voice_steal_algo_oldestkey ///< @see voice_steal_algo_t for available voice stealing algorithms |
|
|
|
|
|
#define FILTER_UPDATE_PERIOD 64 ///< amount of sample points after which filter parameters (cutoff, resonance) are going to be updated (higher value means less CPU load, but also worse parameter resolution, this value will be aligned to a power of two) |
|
|
#define FORCE_FILTER_USAGE 0 ///< if set to 1 then filter is always used, if set to 0 filter is used only in case the instrument file defined one |
|
|
#define FILTER_CUTOFF_MAX 10000.0f ///< maximum cutoff frequency (10kHz) |
|
|
#define FILTER_CUTOFF_MIN 100.0f ///< minimum cutoff frequency (100Hz) |
|
|
|
|
|
// Uncomment following line to override external cutoff controller |
|
|
//#define OVERRIDE_FILTER_CUTOFF_CTRL 1 ///< set to an arbitrary MIDI control change controller (e.g. 1 for 'modulation wheel') |
|
|
|
|
|
// Uncomment following line to override external resonance controller |
|
|
//#define OVERRIDE_FILTER_RES_CTRL 91 ///< set to an arbitrary MIDI control change controller (e.g. 91 for 'effect 1 depth') |
|
|
|
|
|
// Uncomment following line to override filter type |
|
|
//#define OVERRIDE_FILTER_TYPE ::gig::vcf_type_lowpass ///< either ::gig::vcf_type_lowpass, ::gig::vcf_type_bandpass or ::gig::vcf_type_highpass |
|
|
|
|
27 |
#include "Voice.h" |
#include "Voice.h" |
28 |
#include "../common/Event.h" |
#include "../common/Event.h" |
29 |
|
|
31 |
|
|
32 |
class Voice; |
class Voice; |
33 |
|
|
34 |
|
/** @brief Voice Stealing Algorithms |
35 |
|
* |
36 |
|
* Enumeration of all possible voice stealing algorithms. |
37 |
|
*/ |
38 |
enum voice_steal_algo_t { |
enum voice_steal_algo_t { |
39 |
voice_steal_algo_none, |
voice_steal_algo_none, ///< Voice stealing disabled. |
40 |
voice_steal_algo_keymask, |
voice_steal_algo_oldestvoiceonkey, ///< Try to kill the oldest voice from same key where the new voice should be spawned. |
41 |
voice_steal_algo_oldestkey |
voice_steal_algo_oldestkey ///< Try to kill the oldest voice from the oldest active key. |
42 |
}; |
}; |
43 |
|
|
44 |
|
/** @brief MIDI key runtime informations |
45 |
|
* |
46 |
|
* Reflects runtime informations for one MIDI key. |
47 |
|
*/ |
48 |
struct midi_key_info_t { |
struct midi_key_info_t { |
49 |
RTList<Voice>* pActiveVoices; ///< Contains the active voices associated with the MIDI key. |
RTList<Voice>* pActiveVoices; ///< Contains the active voices associated with the MIDI key. |
50 |
bool KeyPressed; ///< Is true if the respective MIDI key is currently pressed. |
bool KeyPressed; ///< Is true if the respective MIDI key is currently pressed. |
52 |
bool ReleaseTrigger; ///< If we have to launch release triggered voice(s) when the key is released |
bool ReleaseTrigger; ///< If we have to launch release triggered voice(s) when the key is released |
53 |
Pool<uint>::Iterator itSelf; ///< hack to allow fast deallocation of the key from the list of active keys |
Pool<uint>::Iterator itSelf; ///< hack to allow fast deallocation of the key from the list of active keys |
54 |
RTList<Event>* pEvents; ///< Key specific events (only Note-on, Note-off and sustain pedal currently) |
RTList<Event>* pEvents; ///< Key specific events (only Note-on, Note-off and sustain pedal currently) |
55 |
|
int VoiceTheftsQueued; ///< Amount of voices postponed due to shortage of voices. |
56 |
uint8_t RoundRobinIndex; ///< For the round robin dimension: current articulation for this key, will be incremented for each note on |
uint8_t RoundRobinIndex; ///< For the round robin dimension: current articulation for this key, will be incremented for each note on |
57 |
}; |
}; |
58 |
|
|