Compare commits
1 Commits
88b1caf885
...
3dd1ce42df
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3dd1ce42df |
@ -150,15 +150,15 @@ struct SyncTrack {
|
|||||||
}
|
}
|
||||||
assert(result.num_intervals < cSyncTrackMaxIntervals);
|
assert(result.num_intervals < cSyncTrackMaxIntervals);
|
||||||
|
|
||||||
int track_A_repeats = result.num_intervals / track_A.num_intervals;
|
float track_A_repeats = static_cast<float>(result.num_intervals / track_A.num_intervals);
|
||||||
int track_B_repeats = result.num_intervals / track_B.num_intervals;
|
float track_B_repeats = static_cast<float>(result.num_intervals / track_B.num_intervals);
|
||||||
|
|
||||||
result.duration = (1.0f - weight) * (track_A.duration * track_A_repeats) + weight * (track_B.duration * track_B_repeats);
|
result.duration = (1.0f - weight) * (track_A.duration * track_A_repeats) + weight * (track_B.duration * track_B_repeats);
|
||||||
result.interval_start_ratio[0] = 0.f;
|
result.interval_start_ratio[0] = 0.f;
|
||||||
|
|
||||||
for (int i = 0; i < result.num_intervals; i++) {
|
for (int i = 0; i < result.num_intervals; i++) {
|
||||||
float interval_duration_A = track_A.interval_duration_ratio[i % track_A.num_intervals];
|
float interval_duration_A = track_A.interval_duration_ratio[i % track_A.num_intervals] / track_A_repeats;
|
||||||
float interval_duration_B = track_B.interval_duration_ratio[i % track_B.num_intervals];
|
float interval_duration_B = track_B.interval_duration_ratio[i % track_B.num_intervals] / track_B_repeats;
|
||||||
result.interval_duration_ratio[i] =
|
result.interval_duration_ratio[i] =
|
||||||
(1.0f - weight) * interval_duration_A + weight * interval_duration_B;
|
(1.0f - weight) * interval_duration_A + weight * interval_duration_B;
|
||||||
|
|
||||||
|
|||||||
@ -230,18 +230,19 @@ TEST_CASE("[Blendalot][SyncTrack] Sync Track blending non-matching interval coun
|
|||||||
float weight = 0.2f;
|
float weight = 0.2f;
|
||||||
SyncTrack blended = SyncTrack::blend(weight, track_a, track_b);
|
SyncTrack blended = SyncTrack::blend(weight, track_a, track_b);
|
||||||
|
|
||||||
int track_b_repeats = 3;
|
float track_a_repeats = static_cast<float>(blended.num_intervals / track_a.num_intervals);
|
||||||
|
float track_b_repeats = static_cast<float>(blended.num_intervals / track_b.num_intervals);
|
||||||
|
|
||||||
REQUIRE(
|
CHECK(
|
||||||
blended.duration == (1.0f - weight) * track_a.duration + weight * track_b.duration * track_b_repeats);
|
blended.duration == doctest::Approx(2.5));
|
||||||
REQUIRE(
|
CHECK(
|
||||||
blended.interval_start_ratio[0] == 0.0);
|
blended.interval_start_ratio[0] == 0.0);
|
||||||
REQUIRE(
|
CHECK(
|
||||||
blended.interval_duration_ratio[0] == (1.0f - weight) * (track_a.interval_duration_ratio[0]) + weight * (track_b.interval_duration_ratio[0]));
|
blended.interval_duration_ratio[0] == doctest::Approx((1.0 - weight) * track_a.interval_duration_ratio[0] / track_a_repeats + weight * track_b.interval_duration_ratio[0] / track_b_repeats));
|
||||||
REQUIRE(
|
CHECK(
|
||||||
blended.interval_duration_ratio[1] == (1.0f - weight) * (track_a.interval_duration_ratio[1]) + weight * (track_b.interval_duration_ratio[0]));
|
blended.interval_duration_ratio[1] == doctest::Approx((1.0 - weight) * track_a.interval_duration_ratio[1] / track_a_repeats + weight * track_b.interval_duration_ratio[0] / track_b_repeats));
|
||||||
REQUIRE(
|
CHECK(
|
||||||
blended.interval_duration_ratio[2] == (1.0f - weight) * (track_a.interval_duration_ratio[2]) + weight * (track_b.interval_duration_ratio[0]));
|
blended.interval_duration_ratio[2] == doctest::Approx((1.0 - weight) * track_a.interval_duration_ratio[2] / track_a_repeats + weight * track_b.interval_duration_ratio[0] / track_b_repeats));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user