| 672 | } |
| 673 | |
| 674 | void StepSequencer::Step(double time, float velocity, int pulseFlags) |
| 675 | { |
| 676 | if (!mIsSetUp) |
| 677 | return; |
| 678 | |
| 679 | mGrid->SetGrid(GetNumSteps(mStepInterval, mNumMeasures), mNumRows); |
| 680 | |
| 681 | if (!mEnabled) |
| 682 | { |
| 683 | UpdateLights(); |
| 684 | return; |
| 685 | } |
| 686 | |
| 687 | int direction = 1; |
| 688 | if (pulseFlags & kPulseFlag_Backward) |
| 689 | direction = -1; |
| 690 | if (pulseFlags & kPulseFlag_Repeat) |
| 691 | direction = 0; |
| 692 | |
| 693 | mCurrentColumn = (mCurrentColumn + direction + GetNumSteps(mStepInterval, mNumMeasures)) % GetNumSteps(mStepInterval, mNumMeasures); |
| 694 | |
| 695 | if (pulseFlags & kPulseFlag_Reset) |
| 696 | mCurrentColumn = 0; |
| 697 | else if (pulseFlags & kPulseFlag_Random) |
| 698 | mCurrentColumn = gRandom() % GetNumSteps(mStepInterval, mNumMeasures); |
| 699 | |
| 700 | if (!mHasExternalPulseSource || (pulseFlags & kPulseFlag_SyncToTransport)) |
| 701 | mCurrentColumn = GetStepNum(time); |
| 702 | |
| 703 | if (pulseFlags & kPulseFlag_Align) |
| 704 | { |
| 705 | int stepsPerMeasure = TheTransport->GetStepsPerMeasure(this); |
| 706 | int numMeasures = ceil(float(GetNumSteps(mStepInterval, mNumMeasures)) / stepsPerMeasure); |
| 707 | int measure = TheTransport->GetMeasure(time) % numMeasures; |
| 708 | int step = ((TheTransport->GetQuantized(time, mTransportListenerInfo) % stepsPerMeasure) + measure * stepsPerMeasure) % GetNumSteps(mStepInterval, mNumMeasures); |
| 709 | mCurrentColumn = step; |
| 710 | } |
| 711 | |
| 712 | mGrid->SetHighlightCol(time, mCurrentColumn); |
| 713 | UpdateLights(); |
| 714 | UpdateMetaLights(); |
| 715 | |
| 716 | if (mHasExternalPulseSource) |
| 717 | { |
| 718 | for (auto& row : mRows) |
| 719 | row->PlayStep(time, mCurrentColumn); |
| 720 | } |
| 721 | } |
| 722 | |
| 723 | void StepSequencer::PlayStepNote(double time, int note, float val) |
| 724 | { |
nothing calls this directly
no test coverage detected