section shifts should be working now
This commit is contained in:
parent
a76a653c99
commit
c8fff752fb
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
Binary file not shown.
Binary file not shown.
|
|
@ -1,12 +1,13 @@
|
||||||
(
|
(
|
||||||
var genWindow, masterView, faderView, buildGenerator, buildMetronome, buildTransport, buildAuxControls, buildMasterFader, buildTrackFader,
|
var genWindow, masterView, faderView, buildGenerator, buildMetronome, buildTransport, buildAuxControls, buildMasterFader, buildTrackFader,
|
||||||
clockStringFunc, metronomeStringFunc, metronomeColorFunc, updateTransport;
|
updateSection, updateSubsection, clockStringFunc, metronomeStringFunc, metronomeColorFunc, updateTransport,
|
||||||
|
currentSection = 1, currentSubsection = 1;
|
||||||
|
|
||||||
buildGenerator = {arg view;
|
buildGenerator = {arg view;
|
||||||
var ranSeed;
|
var ranSeed;
|
||||||
HLayout(
|
HLayout(
|
||||||
ranSeed = TextField(view, Rect(10, 10, 10, 20)).string_("20200525"),
|
ranSeed = TextField(view, Rect(10, 10, 10, 20)).string_("19800725"),
|
||||||
Button(view).states_([["reset seed"]]).action_({ ranSeed.string = "20200525"}.inEnvir),
|
Button(view).states_([["reset seed"]]).action_({ ranSeed.string = "19800725"}.inEnvir),
|
||||||
Button(view).states_([["random seed"]]).action_({ ranSeed.string = 50000000.rand.asString}.inEnvir),
|
Button(view).states_([["random seed"]]).action_({ ranSeed.string = 50000000.rand.asString}.inEnvir),
|
||||||
Button(view).states_([["generate"]]).action_({
|
Button(view).states_([["generate"]]).action_({
|
||||||
{~genAll.value(ranSeed.string.asInteger); ~appStatus.string = "status: ready"}.fork(AppClock);
|
{~genAll.value(ranSeed.string.asInteger); ~appStatus.string = "status: ready"}.fork(AppClock);
|
||||||
|
|
@ -33,7 +34,8 @@ metronomeStringFunc = { arg beat; if(beat == 1,
|
||||||
{[-30, -105, -113].collect({arg int; int.asAscii}).as(String)})};
|
{[-30, -105, -113].collect({arg int; int.asAscii}).as(String)})};
|
||||||
metronomeColorFunc = { arg beat; if(beat == 1, {Color.red},{Color.black})};
|
metronomeColorFunc = { arg beat; if(beat == 1, {Color.red},{Color.black})};
|
||||||
|
|
||||||
updateTransport = {arg clock, metronome, measure, beat;
|
updateTransport = {arg clock, metronome, sectionDisplay, measure, beat, section, subsection;
|
||||||
|
sectionDisplay.string = "section: " ++ section.asInteger ++ "." ++ subsection.asInteger;
|
||||||
clock.string = clockStringFunc.value(measure, beat);
|
clock.string = clockStringFunc.value(measure, beat);
|
||||||
metronome.stringColor = metronomeColorFunc.value(beat);
|
metronome.stringColor = metronomeColorFunc.value(beat);
|
||||||
metronome.string = metronomeStringFunc.value(beat);
|
metronome.string = metronomeStringFunc.value(beat);
|
||||||
|
|
@ -57,15 +59,58 @@ buildMetronome = {arg win;
|
||||||
[clock, metronome, layout]
|
[clock, metronome, layout]
|
||||||
};
|
};
|
||||||
|
|
||||||
buildTransport = {arg win, view, metronome;
|
updateSection = {arg mod, clock, metronome, sectionDisplay, refresh = true;
|
||||||
var layout, sectionDisplay, updateSection, countOff;
|
if(~sectionNavDict[[currentSection + mod, 1]] != nil, {
|
||||||
|
currentSection = currentSection + mod;
|
||||||
|
currentSubsection = 1;
|
||||||
|
if(refresh, {
|
||||||
|
updateTransport.value(clock, metronome, sectionDisplay,
|
||||||
|
~sectionNavDict[[currentSection, currentSubsection]], 1,
|
||||||
|
currentSection, currentSubsection
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
updateSubsection = {arg mod, clock, metronome, sectionDisplay, refresh = true;
|
||||||
|
if(~sectionNavDict[[currentSection, currentSubsection + mod]] != nil, {
|
||||||
|
currentSubsection = currentSubsection + mod;
|
||||||
|
if(refresh, {
|
||||||
|
updateTransport.value(clock, metronome, sectionDisplay,
|
||||||
|
~sectionNavDict[[currentSection, currentSubsection]], 1,
|
||||||
|
currentSection, currentSubsection
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}, {updateSection.value(mod, clock, metronome, sectionDisplay, refresh)})
|
||||||
|
};
|
||||||
|
|
||||||
|
buildTransport = {arg win, view, clock, metronome;
|
||||||
|
var sec, subsec, sectionDisplay, layout, player;
|
||||||
|
|
||||||
|
sectionDisplay = StaticText(win).string_("section: 1.1").font_(Font("Liberation Mono", 70));
|
||||||
|
|
||||||
|
OSCFunc({ arg msg, time;
|
||||||
|
{
|
||||||
|
var measure, beat, section, subsection;
|
||||||
|
# measure, beat, section, subsection = msg[3..];
|
||||||
|
currentSection = sec = section.asInteger;
|
||||||
|
currentSubsection = subsec = subsection.asInteger;
|
||||||
|
//currentSubsection.postln;
|
||||||
|
updateTransport.value(clock, metronome, sectionDisplay, measure, beat, section, subsection);
|
||||||
|
}.inEnvir.defer;
|
||||||
|
},'/measureClock_' ++ ~hash, s.addr);
|
||||||
|
|
||||||
|
//OSCdef(\externalAdvance ++ ~hash, {arg msg, time; {updateSection.value(1, clock, metronome, sectionDisplay, false)}.inEnvir.defer},'/nextSubsection_' ++ ~hash, s.addr);
|
||||||
|
|
||||||
|
|
||||||
layout = HLayout(
|
layout = HLayout(
|
||||||
Button(view).states_([["<<", Color.black]]).action_({arg pState; updateSection.value(-4)}.inEnvir),
|
Button(view).states_([["<<", Color.black]]).action_({arg pState; updateSection.value(-1, clock, metronome, sectionDisplay)}.inEnvir),
|
||||||
Button(view).states_([["<", Color.black]]).action_({arg pState; updateSection.value(-1)}.inEnvir),
|
Button(view).states_([["<", Color.black]]).action_({arg pState; updateSubsection.value(-1, clock, metronome, sectionDisplay)}.inEnvir),
|
||||||
Button(view).states_([["play", Color.black], ["stop", Color.black, Color.grey]]).action_({arg pState;
|
Button(view).states_([["play", Color.black], ["stop", Color.black, Color.grey]]).action_({arg pState;
|
||||||
if(pState.value == 1, {
|
if(pState.value == 1, {
|
||||||
{
|
player = {
|
||||||
~patternProxy.source = Pseq(~patterns);
|
~patternProxy.source = Pseq(~patterns, 1, ~sectionNavDict[[currentSection, currentSubsection]] - 1);
|
||||||
Pbind(\instrument, \click_ ++ ~hash, \beat, Pseq([1, 2, 1, 2]), \dur, 1).play(~tempoClock, quant: 0);
|
Pbind(\instrument, \click_ ++ ~hash, \beat, Pseq([1, 2, 1, 2]), \dur, 1).play(~tempoClock, quant: 0);
|
||||||
[1, 2, 1, 2].do({arg beat;
|
[1, 2, 1, 2].do({arg beat;
|
||||||
{
|
{
|
||||||
|
|
@ -79,12 +124,17 @@ buildTransport = {arg win, view, metronome;
|
||||||
~patternProxy.play(~tempoClock, quant: 0)
|
~patternProxy.play(~tempoClock, quant: 0)
|
||||||
}.fork(~tempoClock, quant: 0)
|
}.fork(~tempoClock, quant: 0)
|
||||||
}, {
|
}, {
|
||||||
~patternProxy.stop
|
//subsec.postln;
|
||||||
|
~patternProxy.pause;
|
||||||
|
//player.stop;
|
||||||
|
updateTransport.value(clock, metronome, sectionDisplay,
|
||||||
|
~sectionNavDict[[currentSection, currentSubsection]], 1,
|
||||||
|
currentSection.postln, currentSubsection.postln);
|
||||||
});
|
});
|
||||||
}.inEnvir),
|
}.inEnvir),
|
||||||
Button(view).states_([[">", Color.black]]).action_({arg pState; updateSection.value(1)}.inEnvir),
|
Button(view).states_([[">", Color.black]]).action_({arg pState; updateSubsection.value(1, clock, metronome, sectionDisplay)}.inEnvir),
|
||||||
Button(view).states_([[">>", Color.black]]).action_({arg pState; updateSection.value(4)}.inEnvir), nil,
|
Button(view).states_([[">>", Color.black]]).action_({arg pState; updateSection.value(1, clock, metronome, sectionDisplay)}.inEnvir), nil,
|
||||||
sectionDisplay = StaticText(win).string_("section: 1.1").font_(Font("Liberation Mono", 70)), nil);
|
sectionDisplay, nil);
|
||||||
[sectionDisplay, layout]
|
[sectionDisplay, layout]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -163,18 +213,9 @@ masterView = {arg win;
|
||||||
view = View(win);
|
view = View(win);
|
||||||
generatorLayout = buildGenerator.value(view);
|
generatorLayout = buildGenerator.value(view);
|
||||||
# clock, metronome, metronomeLayout = buildMetronome.value(win);
|
# clock, metronome, metronomeLayout = buildMetronome.value(win);
|
||||||
# sectionDisplay, transportLayout = buildTransport.value(win, view, metronome);
|
# sectionDisplay, transportLayout = buildTransport.value(win, view, clock, metronome);
|
||||||
auxControlsLayout = buildAuxControls.value(view);
|
auxControlsLayout = buildAuxControls.value(view);
|
||||||
|
|
||||||
OSCFunc({ arg msg, time;
|
|
||||||
{
|
|
||||||
var measure, beat, section, subsection;
|
|
||||||
# measure, beat, section, subsection = msg[3..];
|
|
||||||
updateTransport.value(clock, metronome, measure, beat);
|
|
||||||
sectionDisplay.string = "section: " ++ section.asInteger ++ "." ++ subsection.asInteger;
|
|
||||||
}.inEnvir.defer;
|
|
||||||
},'/measureClock_' ++ ~hash, s.addr);
|
|
||||||
|
|
||||||
view.layout_(
|
view.layout_(
|
||||||
HLayout(
|
HLayout(
|
||||||
[
|
[
|
||||||
|
|
@ -302,34 +343,34 @@ faderView = {arg win;
|
||||||
updateSection = {arg shift, stop = true, manualCall = true;
|
updateSection = {arg shift, stop = true, manualCall = true;
|
||||||
var runThis;
|
var runThis;
|
||||||
runThis = (manualCall || (manualCall.not && ~autoAdvance));
|
runThis = (manualCall || (manualCall.not && ~autoAdvance));
|
||||||
runThis = runThis && ((~currentSection + shift) < ~sectionOrder.size);
|
runThis = runThis && ((currentSection + shift) < ~sectionOrder.size);
|
||||||
runThis = runThis && (((~currentSection % 4) == 3) && ~interludes && manualCall.not).not;
|
runThis = runThis && (((currentSection % 4) == 3) && ~interludes && manualCall.not).not;
|
||||||
if(runThis, {
|
if(runThis, {
|
||||||
var truncOnly, section, subSection;
|
var truncOnly, section, subSection;
|
||||||
if(~isPlaying, {
|
if(~isPlaying, {
|
||||||
if(stop, {
|
if(stop, {
|
||||||
~patterns[~sectionOrder[~currentSection]].stop
|
~patterns[~sectionOrder[currentSection]].stop
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
truncOnly = case
|
truncOnly = case
|
||||||
{(~currentSection + shift) < 0} {true}
|
{(currentSection + shift) < 0} {true}
|
||||||
{(shift < 0) && ~isPlaying} {true}
|
{(shift < 0) && ~isPlaying} {true}
|
||||||
{(shift < -1) && ((~currentSection % 4) > 0)} {true}
|
{(shift < -1) && ((currentSection % 4) > 0)} {true}
|
||||||
{true} {false};
|
{true} {false};
|
||||||
|
|
||||||
if(truncOnly.not, {
|
if(truncOnly.not, {
|
||||||
~currentSection = (~currentSection + shift).trunc(shift.abs);
|
currentSection = (currentSection + shift).trunc(shift.abs);
|
||||||
}, {
|
}, {
|
||||||
~currentSection = ~currentSection.trunc(shift.abs);
|
currentSection = currentSection.trunc(shift.abs);
|
||||||
});
|
});
|
||||||
|
|
||||||
section = ((~sectionOrder[~currentSection] / 4) + 1).asInteger;
|
section = ((~sectionOrder[currentSection] / 4) + 1).asInteger;
|
||||||
subSection = ((~sectionOrder[~currentSection] % 4) + 1).asInteger;
|
subSection = ((~sectionOrder[currentSection] % 4) + 1).asInteger;
|
||||||
sectionDisplay.string = "section: " ++ section.asString ++ "." ++ subSection.asString;
|
sectionDisplay.string = "section: " ++ section.asString ++ "." ++ subSection.asString;
|
||||||
if(~isPlaying, {
|
if(~isPlaying, {
|
||||||
countOff = {
|
countOff = {
|
||||||
if(~interludes && ((~currentSection % 4) == 0), {
|
if(~interludes && ((currentSection % 4) == 0), {
|
||||||
Pbind(
|
Pbind(
|
||||||
\instrument, \click ++ ~hash,
|
\instrument, \click ++ ~hash,
|
||||||
\beat, Pseq([1, 2, 1, 2]),
|
\beat, Pseq([1, 2, 1, 2]),
|
||||||
|
|
@ -345,9 +386,9 @@ faderView = {arg win;
|
||||||
0.25.wait;
|
0.25.wait;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
~play.set(\sel, ~currentSection % 2);
|
~play.set(\sel, currentSection % 2);
|
||||||
~patterns[~sectionOrder[~currentSection]].play(~tempoClock, quant: 0);
|
~patterns[~sectionOrder[currentSection]].play(~tempoClock, quant: 0);
|
||||||
if(~interludes && ((~currentSection % 4) == 3) && (~currentSection != (~sectionOrder.size - 1)), {
|
if(~interludes && ((currentSection % 4) == 3) && (currentSection != (~sectionOrder.size - 1)), {
|
||||||
var center, interval, freq1, freq2, tremRate;
|
var center, interval, freq1, freq2, tremRate;
|
||||||
center = 50 - 12.0.rand;
|
center = 50 - 12.0.rand;
|
||||||
interval = 3.0.rand + 2;
|
interval = 3.0.rand + 2;
|
||||||
|
|
@ -356,16 +397,16 @@ faderView = {arg win;
|
||||||
tremRate = 50 + 4.0.rand2;
|
tremRate = 50 + 4.0.rand2;
|
||||||
~interludeTremelo.set(\gate, 1, \amp, 1, \freq1, freq1, \freq2, freq2, \tremRate, tremRate);
|
~interludeTremelo.set(\gate, 1, \amp, 1, \freq1, freq1, \freq2, freq2, \tremRate, tremRate);
|
||||||
});
|
});
|
||||||
if((~currentSection % 4) == 0, {
|
if((currentSection % 4) == 0, {
|
||||||
~interludeTremelo.set(\gate, 0);
|
~interludeTremelo.set(\gate, 0);
|
||||||
});
|
});
|
||||||
if(((~currentSection % 4)) != 0 && ((~currentSection % 4) != 3), {
|
if(((currentSection % 4)) != 0 && ((currentSection % 4) != 3), {
|
||||||
~interludeTremelo.set(\gate, 0, \amp, 0);
|
~interludeTremelo.set(\gate, 0, \amp, 0);
|
||||||
});
|
});
|
||||||
}.fork(~tempoClock, quant: 0);
|
}.fork(~tempoClock, quant: 0);
|
||||||
}, {
|
}, {
|
||||||
var measure, beat;
|
var measure, beat;
|
||||||
measure = ~sectionStartMeasure[~sectionOrder[~currentSection]];
|
measure = ~sectionStartMeasure[~sectionOrder[currentSection]];
|
||||||
beat = 1;
|
beat = 1;
|
||||||
updateTransport.value(measure, beat);
|
updateTransport.value(measure, beat);
|
||||||
});
|
});
|
||||||
|
|
@ -407,9 +448,9 @@ faderView = {arg win;
|
||||||
var measure, beat;
|
var measure, beat;
|
||||||
countOff.stop;
|
countOff.stop;
|
||||||
~isPlaying = false;
|
~isPlaying = false;
|
||||||
~patterns[~sectionOrder[~currentSection]].stop;
|
~patterns[~sectionOrder[currentSection]].stop;
|
||||||
~interludeTremelo.set(\gate, 0);
|
~interludeTremelo.set(\gate, 0);
|
||||||
measure = ~sectionStartMeasure[~currentSection];
|
measure = ~sectionStartMeasure[currentSection];
|
||||||
beat = 1;
|
beat = 1;
|
||||||
updateTransport.value(measure, beat);
|
updateTransport.value(measure, beat);
|
||||||
~interludeTremelo.set(\gate, 0, \amp, 0);
|
~interludeTremelo.set(\gate, 0, \amp, 0);
|
||||||
|
|
@ -430,9 +471,9 @@ faderView = {arg win;
|
||||||
0.25.wait;
|
0.25.wait;
|
||||||
});
|
});
|
||||||
~isPlaying = true;
|
~isPlaying = true;
|
||||||
~play.set(\sel, ~currentSection % 2);
|
~play.set(\sel, currentSection % 2);
|
||||||
~patterns[~sectionOrder[~currentSection]].play(~tempoClock, quant: 0);
|
~patterns[~sectionOrder[currentSection]].play(~tempoClock, quant: 0);
|
||||||
if(~interludes && ((~currentSection % 4) == 3) && (~currentSection != (~sectionOrder.size - 1)), {
|
if(~interludes && ((currentSection % 4) == 3) && (currentSection != (~sectionOrder.size - 1)), {
|
||||||
var center, interval, freq1, freq2, tremRate;
|
var center, interval, freq1, freq2, tremRate;
|
||||||
center = 50 - 12.0.rand;
|
center = 50 - 12.0.rand;
|
||||||
interval = 3.0.rand + 2;
|
interval = 3.0.rand + 2;
|
||||||
|
|
@ -480,7 +521,7 @@ faderView = {arg win;
|
||||||
HLayout(
|
HLayout(
|
||||||
order = TextField(view).string_("1-16"),
|
order = TextField(view).string_("1-16"),
|
||||||
Button(view).states_([["set order"]]).action_({
|
Button(view).states_([["set order"]]).action_({
|
||||||
~patterns[~sectionOrder[~currentSection]].stop;
|
~patterns[~sectionOrder[currentSection]].stop;
|
||||||
~sectionOrder = order.string.split($,).collect({arg secEntry;
|
~sectionOrder = order.string.split($,).collect({arg secEntry;
|
||||||
var bounds;
|
var bounds;
|
||||||
bounds = secEntry.split($-).collect({arg item; item.asInteger - 1});
|
bounds = secEntry.split($-).collect({arg item; item.asInteger - 1});
|
||||||
|
|
@ -488,7 +529,7 @@ faderView = {arg win;
|
||||||
(sec.asInteger * 4) + [0, 1, 2, 3]
|
(sec.asInteger * 4) + [0, 1, 2, 3]
|
||||||
});
|
});
|
||||||
}).flat;
|
}).flat;
|
||||||
~currentSection = 0;
|
currentSection = 0;
|
||||||
updateSection.value(0);
|
updateSection.value(0);
|
||||||
}.inEnvir),
|
}.inEnvir),
|
||||||
[StaticText(view).string_(" "), stretch: 1]),
|
[StaticText(view).string_(" "), stretch: 1]),
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,9 @@ s.waitForBoot({
|
||||||
~musicData = ~genMusicData.value(seed);
|
~musicData = ~genMusicData.value(seed);
|
||||||
~scoreData = ~genScoreData.value(~musicData[0]);
|
~scoreData = ~genScoreData.value(~musicData[0]);
|
||||||
~sectionData = ~musicData[2];
|
~sectionData = ~musicData[2];
|
||||||
|
~sectionNavDict = ~musicData[3].postln;
|
||||||
~patterns = ~genPatterns.value(~musicData[0], ~musicData[1], ~sectionData);
|
~patterns = ~genPatterns.value(~musicData[0], ~musicData[1], ~sectionData);
|
||||||
|
~isPlaying = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
~patternProxy = EventPatternProxy.new;
|
~patternProxy = EventPatternProxy.new;
|
||||||
|
|
@ -30,7 +32,7 @@ s.waitForBoot({
|
||||||
~tempoClock = TempoClock.new(1);
|
~tempoClock = TempoClock.new(1);
|
||||||
~dir = thisProcess.nowExecutingPath.dirname;
|
~dir = thisProcess.nowExecutingPath.dirname;
|
||||||
"loading app".postln;
|
"loading app".postln;
|
||||||
~genAll.value(20200525);
|
~genAll.value(19800725);
|
||||||
~play = Synth.new(\masterPlayerControl_ ++ ~hash);
|
~play = Synth.new(\masterPlayerControl_ ++ ~hash);
|
||||||
4.collect({arg p; Synth.new(\clip_ ++ ~hash, [\bin, p + 6, \bus, ~busses[4].index])});
|
4.collect({arg p; Synth.new(\clip_ ++ ~hash, [\bin, p + 6, \bus, ~busses[4].index])});
|
||||||
~generateGUI.value;
|
~generateGUI.value;
|
||||||
|
|
|
||||||
|
|
@ -374,7 +374,7 @@ genAccompPart = {arg modeState, temporalData, offset, trans, part;
|
||||||
var totalDur, dUnit, totalLen, curLen,
|
var totalDur, dUnit, totalLen, curLen,
|
||||||
modeState, temporalState, partStates, lastCadenceState,
|
modeState, temporalState, partStates, lastCadenceState,
|
||||||
ensData, accompData, sectionData,
|
ensData, accompData, sectionData,
|
||||||
roots, lastRoots, sectionCount, subsectionCount;
|
roots, lastRoots, sectionCount, subsectionCount, sectionNavDict;
|
||||||
|
|
||||||
thisThread.randSeed = seed;
|
thisThread.randSeed = seed;
|
||||||
|
|
||||||
|
|
@ -390,10 +390,11 @@ genAccompPart = {arg modeState, temporalData, offset, trans, part;
|
||||||
|
|
||||||
ensData = 4.collect({[]});
|
ensData = 4.collect({[]});
|
||||||
accompData = 4.collect({6.collect({[]})});
|
accompData = 4.collect({6.collect({[]})});
|
||||||
sectionData = Dictionary.with(*[0->4]);
|
sectionData = Dictionary.new; //Dictionary.with(*[0->4]);
|
||||||
|
sectionNavDict = Dictionary.new; //Dictionary.with(*[[[1], [1]]->1]);
|
||||||
|
|
||||||
sectionCount = 0;
|
sectionCount = 1;
|
||||||
subsectionCount = 0;
|
subsectionCount = 1;
|
||||||
while({curLen < totalLen}, {
|
while({curLen < totalLen}, {
|
||||||
var temporalData;
|
var temporalData;
|
||||||
# temporalData, temporalState = genTemporalData.value(temporalState, modeState, curLen == 0);
|
# temporalData, temporalState = genTemporalData.value(temporalState, modeState, curLen == 0);
|
||||||
|
|
@ -407,6 +408,7 @@ genAccompPart = {arg modeState, temporalData, offset, trans, part;
|
||||||
|
|
||||||
sectionData.add((curLen / 4).asInteger->[roots, lastRoots.collect({arg fr, part;
|
sectionData.add((curLen / 4).asInteger->[roots, lastRoots.collect({arg fr, part;
|
||||||
[fr, 36.midicps * pow(2, [1, 0, 1, 2][part]) * frToFloat.value(fr)]}), sectionCount, subsectionCount]);
|
[fr, 36.midicps * pow(2, [1, 0, 1, 2][part]) * frToFloat.value(fr)]}), sectionCount, subsectionCount]);
|
||||||
|
sectionNavDict.add([sectionCount, subsectionCount]->(curLen / 16 + 1).asInteger);
|
||||||
|
|
||||||
4.do({arg part;
|
4.do({arg part;
|
||||||
var musicData, partState, noteCountInd;
|
var musicData, partState, noteCountInd;
|
||||||
|
|
@ -421,18 +423,19 @@ genAccompPart = {arg modeState, temporalData, offset, trans, part;
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
subsectionCount = subsectionCount + 1;
|
subsectionCount = subsectionCount + 1;
|
||||||
thisThread.randSeed = (seed + (sectionCount * 100) + subsectionCount);
|
thisThread.randSeed = (seed + (sectionCount * 100) + subsectionCount);
|
||||||
modeState = advanceMode.value(modeState, lastCadenceState);
|
modeState = advanceMode.value(modeState, lastCadenceState);
|
||||||
if(collectRoots.value(modeState).size == 1, {
|
if(collectRoots.value(modeState).size == 1, {
|
||||||
sectionCount = sectionCount + 1;
|
sectionCount = sectionCount + 1;
|
||||||
subsectionCount = 0;
|
subsectionCount = 1;
|
||||||
lastCadenceState = modeState;
|
lastCadenceState = modeState;
|
||||||
});
|
});
|
||||||
curLen = curLen + temporalData[0].size;
|
curLen = curLen + temporalData[0].size;
|
||||||
});
|
});
|
||||||
|
|
||||||
[ensData, accompData, sectionData]
|
[ensData, accompData, sectionData, sectionNavDict]
|
||||||
};
|
};
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ SynthDef(\masterPlayerControl_ ++ ~hash, {
|
||||||
|
|
||||||
SynthDef(\transport_ ++ ~hash, {arg measure = 0, beat = 0, section = 0, subsection = 0, gate = 1, dur = 1;
|
SynthDef(\transport_ ++ ~hash, {arg measure = 0, beat = 0, section = 0, subsection = 0, gate = 1, dur = 1;
|
||||||
SendReply.kr(Impulse.kr(0) * (measure > 0) * (beat > 0),'/measureClock_' ++ ~hash, values: [measure, beat, section, subsection]);
|
SendReply.kr(Impulse.kr(0) * (measure > 0) * (beat > 0),'/measureClock_' ++ ~hash, values: [measure, beat, section, subsection]);
|
||||||
SendReply.kr(Impulse.kr(0) * (measure < 1) * (beat < 1),'/nextSubsection_' ++ ~hash);
|
//SendReply.kr(Impulse.kr(0),'/nextSubsection_' ++ ~hash);
|
||||||
EnvGen.kr(Env.sine(dur), gate, doneAction: 2);
|
EnvGen.kr(Env.sine(dur), gate, doneAction: 2);
|
||||||
}).add;
|
}).add;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue