| 179 | } |
| 180 | |
| 181 | float SoundOrchestrator::driveDisorganized(fl::u32 /*nowMs*/, float manualSpeedScalar) { |
| 182 | if (!mProcessor) return manualSpeedScalar; |
| 183 | // Map vibe.bass (self-normalizing, ~1.0 = average) into a speed modulation. |
| 184 | // This is the "time warp as secondary effect" knob: it still exists, but |
| 185 | // it's bounded by disorganizedSpeedSpan rather than dominating. |
| 186 | const float bass = mProcessor->getVibeBass(); // ~1.0 nominal |
| 187 | const float bassBoost = (bass - 1.0f) * mCfg.disorganizedSpeedSpan; |
| 188 | float speed = 1.0f + bassBoost; |
| 189 | if (speed < 0.1f) speed = 0.1f; |
| 190 | if (speed > 4.0f) speed = 4.0f; |
| 191 | return speed * manualSpeedScalar; |
| 192 | } |
| 193 | |
| 194 | float SoundOrchestrator::driveBpmLocked(fl::u32 nowMs, float manualSpeedScalar) { |
| 195 | if (!mProcessor) return manualSpeedScalar; |
nothing calls this directly
no test coverage detected