| 517 | } |
| 518 | |
| 519 | int Transport::GetSyncedStep(double time, ITimeListener* listener, const TransportListenerInfo* listenerInfo, int length) |
| 520 | { |
| 521 | double offsetMs; |
| 522 | if (listenerInfo->mOffsetInfo.mOffsetIsInMs) |
| 523 | offsetMs = listenerInfo->mOffsetInfo.mOffset; |
| 524 | else |
| 525 | offsetMs = listenerInfo->mOffsetInfo.mOffset * MsPerBar(); |
| 526 | |
| 527 | int step; |
| 528 | if (GetMeasureFraction(listenerInfo->mInterval) < 1) |
| 529 | { |
| 530 | int stepsPerMeasure = GetStepsPerMeasure(listener); |
| 531 | int measure = GetMeasure(time + offsetMs); |
| 532 | step = GetQuantized(time, listenerInfo) + measure * stepsPerMeasure; //GetQuantized() handles offset internally |
| 533 | } |
| 534 | else |
| 535 | { |
| 536 | int measure = GetMeasure(time + offsetMs); |
| 537 | step = int(measure / GetMeasureFraction(listenerInfo->mInterval)); |
| 538 | } |
| 539 | |
| 540 | if (length > 0) |
| 541 | step %= length; |
| 542 | |
| 543 | return step; |
| 544 | } |
| 545 | |
| 546 | double Transport::GetDuration(NoteInterval interval) |
| 547 | { |