27 |
|
|
28 |
namespace LinuxSampler { namespace gig { |
namespace LinuxSampler { namespace gig { |
29 |
|
|
|
// TODO: no support for crossfades yet |
|
|
|
|
30 |
const float Voice::FILTER_CUTOFF_COEFF(CalculateFilterCutoffCoeff()); |
const float Voice::FILTER_CUTOFF_COEFF(CalculateFilterCutoffCoeff()); |
31 |
|
|
32 |
const int Voice::FILTER_UPDATE_MASK(CalculateFilterUpdateMask()); |
const int Voice::FILTER_UPDATE_MASK(CalculateFilterUpdateMask()); |
103 |
* Initializes and triggers the voice, a disk stream will be launched if |
* Initializes and triggers the voice, a disk stream will be launched if |
104 |
* needed. |
* needed. |
105 |
* |
* |
106 |
* @param pNoteOnEvent - event that caused triggering of this voice |
* @param pNoteOnEvent - event that caused triggering of this voice |
107 |
* @param PitchBend - MIDI detune factor (-8192 ... +8191) |
* @param PitchBend - MIDI detune factor (-8192 ... +8191) |
108 |
* @param pInstrument - points to the loaded instrument which provides sample wave(s) and articulation data |
* @param pInstrument - points to the loaded instrument which provides sample wave(s) and articulation data |
109 |
* @param iLayer - layer number this voice refers to (only if this is a layered sound of course) |
* @param iLayer - layer number this voice refers to (only if this is a layered sound of course) |
110 |
* @returns 0 on success, a value < 0 if something failed |
* @param ReleaseTriggerVoice - if this new voice is a release trigger voice (optional, default = false) |
111 |
|
* @returns 0 on success, a value < 0 if something failed |
112 |
*/ |
*/ |
113 |
int Voice::Trigger(Event* pNoteOnEvent, int PitchBend, ::gig::Instrument* pInstrument, int iLayer) { |
int Voice::Trigger(Event* pNoteOnEvent, int PitchBend, ::gig::Instrument* pInstrument, int iLayer, bool ReleaseTriggerVoice) { |
114 |
if (!pInstrument) { |
if (!pInstrument) { |
115 |
dmsg(1,("voice::trigger: !pInstrument\n")); |
dmsg(1,("voice::trigger: !pInstrument\n")); |
116 |
exit(EXIT_FAILURE); |
exit(EXIT_FAILURE); |
117 |
} |
} |
118 |
|
|
119 |
|
Type = type_normal; |
120 |
Active = true; |
Active = true; |
121 |
MIDIKey = pNoteOnEvent->Key; |
MIDIKey = pNoteOnEvent->Key; |
122 |
pRegion = pInstrument->GetRegion(MIDIKey); |
pRegion = pInstrument->GetRegion(MIDIKey); |
146 |
// if this is the 1st layer then spawn further voices for all the other layers |
// if this is the 1st layer then spawn further voices for all the other layers |
147 |
if (iLayer == 0) |
if (iLayer == 0) |
148 |
for (int iNewLayer = 1; iNewLayer < pRegion->pDimensionDefinitions[i].zones; iNewLayer++) |
for (int iNewLayer = 1; iNewLayer < pRegion->pDimensionDefinitions[i].zones; iNewLayer++) |
149 |
pEngine->LaunchVoice(pNoteOnEvent, iNewLayer); |
pEngine->LaunchVoice(pNoteOnEvent, iNewLayer, ReleaseTriggerVoice); |
150 |
break; |
break; |
151 |
case ::gig::dimension_velocity: |
case ::gig::dimension_velocity: |
152 |
DimValues[i] = pNoteOnEvent->Velocity; |
DimValues[i] = pNoteOnEvent->Velocity; |
155 |
DimValues[i] = 0; //TODO: we currently ignore this dimension |
DimValues[i] = 0; //TODO: we currently ignore this dimension |
156 |
break; |
break; |
157 |
case ::gig::dimension_releasetrigger: |
case ::gig::dimension_releasetrigger: |
158 |
DimValues[i] = 0; //TODO: we currently ignore this dimension |
Type = (ReleaseTriggerVoice) ? type_release_trigger : (!iLayer) ? type_release_trigger_required : type_normal; |
159 |
|
DimValues[i] = (uint) ReleaseTriggerVoice; |
160 |
break; |
break; |
161 |
case ::gig::dimension_keyboard: |
case ::gig::dimension_keyboard: |
162 |
DimValues[i] = (uint) pNoteOnEvent->Key; |
DimValues[i] = (uint) pNoteOnEvent->Key; |
1087 |
* @param pKillEvent - event which caused the voice to be killed |
* @param pKillEvent - event which caused the voice to be killed |
1088 |
*/ |
*/ |
1089 |
void Voice::Kill(Event* pKillEvent) { |
void Voice::Kill(Event* pKillEvent) { |
1090 |
|
if (pTriggerEvent && pKillEvent->FragmentPos() <= pTriggerEvent->FragmentPos()) return; |
1091 |
this->pKillEvent = pKillEvent; |
this->pKillEvent = pKillEvent; |
1092 |
} |
} |
1093 |
|
|