| 203 | } |
| 204 | |
| 205 | double TimeQuantizeOptions::_quantizeTime( |
| 206 | double inEventTime, double inBPM, double inTimeDivision, double inStartTimeQN, float inQuantizationForce) |
| 207 | { |
| 208 | jassert(inEventTime >= 0.0); |
| 209 | const double seconds_per_qn = 60.0 / inBPM; |
| 210 | |
| 211 | const double division_duration = inTimeDivision * 4.0 * seconds_per_qn; |
| 212 | |
| 213 | // Set previous bar start of recording start as new time origin. |
| 214 | double new_time_origin = inStartTimeQN * seconds_per_qn; |
| 215 | double shifted_time = inEventTime + new_time_origin; |
| 216 | |
| 217 | double time_since_previous_division = std::fmod(shifted_time, division_duration); |
| 218 | |
| 219 | // Get the time of the first division tick before the note start |
| 220 | double previous_division_time = shifted_time - time_since_previous_division; |
| 221 | |
| 222 | double target_time = time_since_previous_division < division_duration / 2.0 |
| 223 | ? previous_division_time |
| 224 | : previous_division_time + division_duration; |
| 225 | |
| 226 | jassert(shifted_time >= previous_division_time && shifted_time < previous_division_time + division_duration); |
| 227 | |
| 228 | double quantized_shifted_time = jmap(static_cast<double>(inQuantizationForce), shifted_time, target_time); |
| 229 | |
| 230 | // Re-shift |
| 231 | double quantized_time = quantized_shifted_time - new_time_origin; |
| 232 | |
| 233 | return quantized_time; |
| 234 | } |
| 235 | |
| 236 | void TimeQuantizeOptions::valueTreePropertyChanged(ValueTree& treeWhosePropertyHasChanged, const Identifier& property) |
| 237 | { |
nothing calls this directly
no outgoing calls
no test coverage detected