diff --git a/SCClassLibrary/Common/Control/asScore/ScoreStreamPlayer.sc b/SCClassLibrary/Common/Control/asScore/ScoreStreamPlayer.sc index 9fd56d0491a..6344219efd0 100644 --- a/SCClassLibrary/Common/Control/asScore/ScoreStreamPlayer.sc +++ b/SCClassLibrary/Common/Control/asScore/ScoreStreamPlayer.sc @@ -42,10 +42,10 @@ ScoreStreamPlayer : Server { prepareEvent { | event | event = event.copy; event.use({ - ~schedBundle = { | lag, offset, server ...bundle | + ~schedBundle = flop { | lag, offset, server ... bundle | this.add(offset * tempo + lag + beats, bundle) }; - ~schedBundleArray = { | lag, offset, server, bundle | + ~schedBundleArray = flop { | lag, offset, server, bundle | this.add(offset * tempo + lag + beats, bundle) }; }); @@ -57,10 +57,10 @@ ScoreStreamPlayer : Server { proto = ( server: this, - schedBundle: { | lag, offset, server ...bundle | + schedBundle: flop { | lag, offset, server ...bundle | this.add(offset * tempo + lag + beats, bundle) }, - schedBundleArray: { | lag, offset, server, bundle | + schedBundleArray: flop { | lag, offset, server, bundle | this.add(offset * tempo + lag + beats, bundle) } ); diff --git a/testsuite/classlibrary/TestScore.sc b/testsuite/classlibrary/TestScore.sc new file mode 100644 index 00000000000..423fb270c70 --- /dev/null +++ b/testsuite/classlibrary/TestScore.sc @@ -0,0 +1,48 @@ +TestScore : UnitTest { + + test_pattern_asScore_lag { + var events, score, s_new_messages, onsetTimes; + events = [(x: 0, lag: 0.5), (x: 1, dur: 0.5), (x: 2, lag: 0.5)]; + score = Pseq(events).asScore(3); + s_new_messages = score.score.drop(1).select { |x| x[2] == \default }; + onsetTimes = s_new_messages.collect { |x| x.first }; + this.assertEquals(onsetTimes, [0.5, 1, 2], "onsets should be correctly derived from lag and dur"); + } + + test_pattern_asScore_timingOffset { + var events, score, s_new_messages, onsetTimes; + events = [(x: 0, timingOffset: 0.5), (x: 1, dur: 0.5), (x: 2, timingOffset: 0.5)]; + score = Pseq(events).asScore(3); + s_new_messages = score.score.drop(1).select { |x| x[2] == \default }; + onsetTimes = s_new_messages.collect { |x| x.first }; + this.assertEquals(onsetTimes, [0.5, 1, 2], "onsets should be correctly derived from timingOffset and dur"); + } + + test_pattern_asScore_lag_multichannel { + var events, score, s_new_messages, onsetTimes; + events = [(x: 0, lag: [0.5, 1, 2])]; + score = Pseq(events).asScore(3); + s_new_messages = score.score.drop(1).select { |x| x[2] == \default }; + onsetTimes = s_new_messages.collect { |x| x.first }; + this.assertEquals(onsetTimes, [0.5, 1, 2], "onsets should be correctly derived from lag in multichannel expanding"); + } + + test_pattern_asScore_timingOffset_multichannel { + var events, score, s_new_messages, onsetTimes; + events = [(x: 0, timingOffset: [0.5, 1, 2])]; + score = Pseq(events).asScore(3); + s_new_messages = score.score.drop(1).select { |x| x[2] == \default }; + onsetTimes = s_new_messages.collect { |x| x.first }; + this.assertEquals(onsetTimes, [0.5, 1, 2], "onsets should be correctly derived from timingOffset in multichannel expanding"); + } + + test_pattern_asScore_timingValues_multichannel { + var events, score, s_new_messages, onsetTimes; + events = [(x: 0, timingOffset: [0.5, 1, 2], lag: [0.3, 0.7, 1])]; + score = Pseq(events).asScore(4); + s_new_messages = score.score.drop(1).select { |x| x[2] == \default }; + onsetTimes = s_new_messages.collect { |x| x.first }; + this.assertEquals(onsetTimes, [0.5, 1, 2] + [0.3, 0.7, 1], "onsets should be correctly derived from lag and timingOffset in multichannel expanding"); + } + +}