29 |
|
|
30 |
#include "../../common/global_private.h" |
#include "../../common/global_private.h" |
31 |
#include "../AbstractEngineChannel.h" |
#include "../AbstractEngineChannel.h" |
32 |
#include "../common/LFOBase.h" |
#include "LFOBase.h" |
33 |
|
#include "EaseInEaseOut.h" |
34 |
#include "../EngineBase.h" |
#include "../EngineBase.h" |
35 |
#include "EG.h" |
#include "EG.h" |
36 |
#include "../gig/EGADSR.h" |
#include "../gig/EGADSR.h" |
42 |
|
|
43 |
// include the appropriate (unsigned) triangle LFO implementation |
// include the appropriate (unsigned) triangle LFO implementation |
44 |
#if CONFIG_UNSIGNED_TRIANG_ALGO == INT_MATH_SOLUTION |
#if CONFIG_UNSIGNED_TRIANG_ALGO == INT_MATH_SOLUTION |
45 |
# include "../common/LFOTriangleIntMath.h" |
# include "LFOTriangleIntMath.h" |
46 |
#elif CONFIG_UNSIGNED_TRIANG_ALGO == INT_ABS_MATH_SOLUTION |
#elif CONFIG_UNSIGNED_TRIANG_ALGO == INT_ABS_MATH_SOLUTION |
47 |
# include "../common/LFOTriangleIntAbsMath.h" |
# include "LFOTriangleIntAbsMath.h" |
48 |
#elif CONFIG_UNSIGNED_TRIANG_ALGO == DI_HARMONIC_SOLUTION |
#elif CONFIG_UNSIGNED_TRIANG_ALGO == DI_HARMONIC_SOLUTION |
49 |
# include "../common/LFOTriangleDiHarmonic.h" |
# include "LFOTriangleDiHarmonic.h" |
50 |
#else |
#else |
51 |
# error "Unknown or no (unsigned) triangle LFO implementation selected!" |
# error "Unknown or no (unsigned) triangle LFO implementation selected!" |
52 |
#endif |
#endif |
53 |
|
|
54 |
// include the appropriate (signed) triangle LFO implementation |
// include the appropriate (signed) triangle LFO implementation |
55 |
#if CONFIG_SIGNED_TRIANG_ALGO == INT_MATH_SOLUTION |
#if CONFIG_SIGNED_TRIANG_ALGO == INT_MATH_SOLUTION |
56 |
# include "../common/LFOTriangleIntMath.h" |
# include "LFOTriangleIntMath.h" |
57 |
#elif CONFIG_SIGNED_TRIANG_ALGO == INT_ABS_MATH_SOLUTION |
#elif CONFIG_SIGNED_TRIANG_ALGO == INT_ABS_MATH_SOLUTION |
58 |
# include "../common/LFOTriangleIntAbsMath.h" |
# include "LFOTriangleIntAbsMath.h" |
59 |
#elif CONFIG_SIGNED_TRIANG_ALGO == DI_HARMONIC_SOLUTION |
#elif CONFIG_SIGNED_TRIANG_ALGO == DI_HARMONIC_SOLUTION |
60 |
# include "../common/LFOTriangleDiHarmonic.h" |
# include "LFOTriangleDiHarmonic.h" |
61 |
#else |
#else |
62 |
# error "Unknown or no (signed) triangle LFO implementation selected!" |
# error "Unknown or no (signed) triangle LFO implementation selected!" |
63 |
#endif |
#endif |
146 |
|
|
147 |
double Pos; ///< Current playback position in sample |
double Pos; ///< Current playback position in sample |
148 |
PitchInfo Pitch; |
PitchInfo Pitch; |
149 |
float NotePitch; ///< Updated by calls to built-in instrument script function change_tune() (defaults to 1.0, that is neutral). |
EaseInEaseOut NotePitch; ///< Updated by calls to built-in instrument script function change_tune() (defaults to 1.0, that is neutral). |
150 |
float CutoffBase; ///< Cutoff frequency before control change, EG and LFO are applied |
float CutoffBase; ///< Cutoff frequency before control change, EG and LFO are applied |
151 |
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. |
152 |
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. |
158 |
gig::SmoothVolume VolumeSmoother; ///< Volume, updated by CC 7 (volume) events |
gig::SmoothVolume VolumeSmoother; ///< Volume, updated by CC 7 (volume) events |
159 |
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. |
160 |
gig::SmoothVolume PanRightSmoother; ///< Right channel volume, updated by CC 10 (pan) events and change_pan() real-time instrument script calls. |
gig::SmoothVolume PanRightSmoother; ///< Right channel volume, updated by CC 10 (pan) events and change_pan() real-time instrument script calls. |
161 |
gig::SmoothVolume NoteVolumeSmoother; ///< Note's global volume, updated by change_vol() real-time instrument script calls. |
EaseInEaseOut NoteVolume; ///< Note's global volume, updated by change_vol() real-time instrument script calls (defaults to 1.0, that is neutral). |
162 |
bool DiskVoice; ///< If the sample is very short it completely fits into the RAM cache and doesn't need to be streamed from disk, in that case this flag is set to false |
bool DiskVoice; ///< If the sample is very short it completely fits into the RAM cache and doesn't need to be streamed from disk, in that case this flag is set to false |
163 |
bool RAMLoop; ///< If this voice has a loop defined which completely fits into the cached RAM part of the sample, in this case we handle the looping within the voice class, else if the loop is located in the disk stream part, we let the disk stream handle the looping |
bool RAMLoop; ///< If this voice has a loop defined which completely fits into the cached RAM part of the sample, in this case we handle the looping within the voice class, else if the loop is located in the disk stream part, we let the disk stream handle the looping |
164 |
unsigned long MaxRAMPos; ///< The upper allowed limit (not actually the end) in the RAM sample cache, after that point it's not safe to chase the interpolator another time over over the current cache position, instead we switch to disk then. |
unsigned long MaxRAMPos; ///< The upper allowed limit (not actually the end) in the RAM sample cache, after that point it's not safe to chase the interpolator another time over over the current cache position, instead we switch to disk then. |