39 |
#include "../gig/Synthesizer.h" |
#include "../gig/Synthesizer.h" |
40 |
#include "../gig/Profiler.h" |
#include "../gig/Profiler.h" |
41 |
#include "SignalUnitRack.h" |
#include "SignalUnitRack.h" |
42 |
|
#include "LFOAll.h" |
|
// include the appropriate (unsigned) triangle LFO implementation |
|
|
#if CONFIG_UNSIGNED_TRIANG_ALGO == INT_MATH_SOLUTION |
|
|
# include "LFOTriangleIntMath.h" |
|
|
#elif CONFIG_UNSIGNED_TRIANG_ALGO == INT_ABS_MATH_SOLUTION |
|
|
# include "LFOTriangleIntAbsMath.h" |
|
|
#elif CONFIG_UNSIGNED_TRIANG_ALGO == DI_HARMONIC_SOLUTION |
|
|
# include "LFOTriangleDiHarmonic.h" |
|
|
#else |
|
|
# error "Unknown or no (unsigned) triangle LFO implementation selected!" |
|
|
#endif |
|
|
|
|
|
// include the appropriate (signed) triangle LFO implementation |
|
|
#if CONFIG_SIGNED_TRIANG_ALGO == INT_MATH_SOLUTION |
|
|
# include "LFOTriangleIntMath.h" |
|
|
#elif CONFIG_SIGNED_TRIANG_ALGO == INT_ABS_MATH_SOLUTION |
|
|
# include "LFOTriangleIntAbsMath.h" |
|
|
#elif CONFIG_SIGNED_TRIANG_ALGO == DI_HARMONIC_SOLUTION |
|
|
# include "LFOTriangleDiHarmonic.h" |
|
|
#else |
|
|
# error "Unknown or no (signed) triangle LFO implementation selected!" |
|
|
#endif |
|
43 |
|
|
44 |
namespace LinuxSampler { |
namespace LinuxSampler { |
45 |
|
|
|
#if CONFIG_UNSIGNED_TRIANG_ALGO == INT_MATH_SOLUTION |
|
|
typedef LFOTriangleIntMath<range_unsigned> LFOUnsigned; |
|
|
#elif CONFIG_UNSIGNED_TRIANG_ALGO == INT_ABS_MATH_SOLUTION |
|
|
typedef LFOTriangleIntAbsMath<range_unsigned> LFOUnsigned; |
|
|
#elif CONFIG_UNSIGNED_TRIANG_ALGO == DI_HARMONIC_SOLUTION |
|
|
typedef LFOTriangleDiHarmonic<range_unsigned> LFOUnsigned; |
|
|
#endif |
|
|
|
|
|
#if CONFIG_SIGNED_TRIANG_ALGO == INT_MATH_SOLUTION |
|
|
typedef LFOTriangleIntMath<range_signed> LFOSigned; |
|
|
#elif CONFIG_SIGNED_TRIANG_ALGO == INT_ABS_MATH_SOLUTION |
|
|
typedef LFOTriangleIntAbsMath<range_signed> LFOSigned; |
|
|
#elif CONFIG_SIGNED_TRIANG_ALGO == DI_HARMONIC_SOLUTION |
|
|
typedef LFOTriangleDiHarmonic<range_signed> LFOSigned; |
|
|
#endif |
|
|
|
|
46 |
class AbstractVoice : public Voice { |
class AbstractVoice : public Voice { |
47 |
public: |
public: |
48 |
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) |
71 |
virtual void VoiceFreed() { } |
virtual void VoiceFreed() { } |
72 |
|
|
73 |
virtual void Synthesize(uint Samples, sample_t* pSrc, uint Skip); |
virtual void Synthesize(uint Samples, sample_t* pSrc, uint Skip); |
74 |
|
|
75 |
|
virtual release_trigger_t GetReleaseTriggerFlags() = 0; |
76 |
|
|
77 |
uint GetSampleRate() { return GetEngine()->SampleRate; } |
uint GetSampleRate() { return GetEngine()->SampleRate; } |
78 |
|
|
79 |
uint8_t GetControllerValue(uint8_t Controller) { |
uint8_t GetControllerValue(uint8_t Controller) { |
119 |
float CutoffBase; ///< Cutoff frequency before control change, EG and LFO are applied |
float CutoffBase; ///< Cutoff frequency before control change, EG and LFO are applied |
120 |
float VolumeLeft; ///< Left channel volume. This factor is calculated when the voice is triggered and doesn't change after that. |
float VolumeLeft; ///< Left channel volume. This factor is calculated when the voice is triggered and doesn't change after that. |
121 |
float VolumeRight; ///< Right channel volume. This factor is calculated when the voice is triggered and doesn't change after that. |
float VolumeRight; ///< Right channel volume. This factor is calculated when the voice is triggered and doesn't change after that. |
122 |
float NotePanLeft; ///< Updated by calls to built-in instrument script function change_pan() (defaults to 1.0, that is neutral). |
Fade NotePan[2]; ///< Updated by calls to built-in instrument script function change_pan() (defaults to 1.0, that is neutral, index 0 for left pan, index 1 for right). |
123 |
float NotePanRight; ///< Updated by calls to built-in instrument script function change_pan() (defaults to 1.0, that is neutral). |
NoteBase::Norm NoteCutoff; ///< Updated by calls to built-in instrument script function change_cutoff() (defaults to 1.0, that is neutral). |
124 |
float NoteCutoff; ///< Updated by calls to built-in instrument script function change_cutoff() (defaults to 1.0, that is neutral). |
NoteBase::Norm NoteResonance; ///< Updated by calls to built-in instrument script function change_reso() (defaults to 1.0, that is neutral). |
|
float NoteResonance; ///< Updated by calls to built-in instrument script function change_reso() (defaults to 1.0, that is neutral). |
|
125 |
gig::SmoothVolume CrossfadeSmoother; ///< Crossfade volume, updated by crossfade CC events |
gig::SmoothVolume CrossfadeSmoother; ///< Crossfade volume, updated by crossfade CC events |
126 |
gig::SmoothVolume VolumeSmoother; ///< Volume, updated by CC 7 (volume) events |
gig::SmoothVolume VolumeSmoother; ///< Volume, updated by CC 7 (volume) events |
127 |
gig::SmoothVolume PanLeftSmoother; ///< Left channel volume, updated by CC 10 (pan) events and change_pan() real-time instrument script calls. |
gig::SmoothVolume PanLeftSmoother; ///< Left channel volume, updated by CC 10 (pan) events and change_pan() real-time instrument script calls. |