You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
3.5 KiB
Plaintext
149 lines
3.5 KiB
Plaintext
(
|
|
var server;
|
|
var win, soundFileView,loadButton, processButton;
|
|
var fwSlider, bwSlider, debounceSlider;
|
|
var soundFile, audioBuffer, slicesBuffer, slicesArray;
|
|
var addSelections, playFunc, stopFunc;
|
|
var synthDef, synth;
|
|
|
|
var playing, currentSelection, colors, prevColor;
|
|
var qwerty = "1234567890qwertyuiopasdfghjklzxcvbnm";
|
|
|
|
playing = false;
|
|
server = Server.default;
|
|
Font.default = Font("Monaco", 16);
|
|
|
|
audioBuffer = Buffer.new;
|
|
slicesBuffer = Buffer.new;
|
|
|
|
colors = Array.fill(64, {Color.rand});
|
|
|
|
synthDef = SynthDef(\transientSegDemo,{|buf, start, end|
|
|
Out.ar(0, BufRd.ar(1, buf, Phasor.ar(1, 1, start, end)));
|
|
}).add;
|
|
|
|
playFunc = {|index|
|
|
var dur;
|
|
currentSelection = index;
|
|
if(playing.not){
|
|
synth = Synth(\transientSegDemo,
|
|
[\buf, audioBuffer.bufnum,
|
|
\start, slicesArray[index],
|
|
\end, slicesArray[index+1]
|
|
]);
|
|
playing = true;
|
|
};
|
|
soundFileView.setSelectionColor(currentSelection, Color.white);
|
|
};
|
|
|
|
stopFunc = {synth.free; playing = false;
|
|
soundFileView.setSelectionColor(currentSelection, colors[currentSelection]);
|
|
|
|
};
|
|
|
|
|
|
win = Window.new("TransientSegmentation",
|
|
Rect(200,200,800,450)).background_(Color.gray);
|
|
|
|
win.view.keyDownAction_{|view, char, modifiers, unicode, keycode, key|
|
|
var num = qwerty.indexOf(char);
|
|
if(num.notNil && slicesArray.notNil){
|
|
playFunc.value(num);
|
|
}
|
|
};
|
|
|
|
win.view.keyUpAction_{stopFunc.value;};
|
|
|
|
|
|
|
|
soundFileView = SoundFileView.new(win)
|
|
.gridOn_(false)
|
|
.waveColors_([Color.white]);
|
|
|
|
loadButton = Button(win, Rect(0, 0, 100, 100))
|
|
.minHeight_(150)
|
|
.states_([["Load", Color.grey, Color.grey(0.8)]]);
|
|
|
|
processButton = Button(win, Rect(0, 0, 100, 100))
|
|
.minHeight_(150)
|
|
.states_(
|
|
[["Process", Color.grey, Color.grey(0.8)],
|
|
["Wait", Color.grey, Color.grey(0.2)]]
|
|
);
|
|
|
|
fwSlider = Slider(win, Rect(0, 0, 100, 10)).value_(0.5);
|
|
bwSlider = Slider(win, Rect(0, 0, 100, 10)).value_(0.5);
|
|
debounceSlider = Slider(win, Rect(0, 0, 100, 10)).value_(0.5);
|
|
|
|
loadButton.action_{
|
|
FileDialog({ |path|
|
|
soundFile = SoundFile.new;
|
|
soundFile.openRead(path[0]);
|
|
audioBuffer = Buffer.read(server, path[0]);
|
|
soundFileView.soundfile = soundFile;
|
|
soundFileView.read(0, soundFile.numFrames);
|
|
});
|
|
};
|
|
|
|
processButton.action_{|but|
|
|
var fw = ControlSpec(0.0001, 3, \exp).map(fwSlider.value);
|
|
var bw = ControlSpec(0.0001, 3, \exp).map(bwSlider.value);
|
|
var db = ControlSpec(1, 4410).map(debounceSlider.value);
|
|
if(but.value == 1, {
|
|
Routine{
|
|
FluidBufTransientSlice.process(
|
|
server,
|
|
source:audioBuffer.bufnum,
|
|
indices:slicesBuffer.bufnum,
|
|
threshFwd: fw,
|
|
threshBack: bw,
|
|
clumpLength:db
|
|
);
|
|
server.sync;
|
|
slicesBuffer.loadToFloatArray(action:{|arr|
|
|
slicesArray = arr;
|
|
{ processButton.value_(0);
|
|
addSelections.value(slicesArray)
|
|
}.defer;
|
|
|
|
});
|
|
}.play;
|
|
});
|
|
};
|
|
|
|
|
|
|
|
addSelections = {|array|
|
|
var nSegments = min(array.size, soundFileView.selections.size) - 1;
|
|
soundFileView.selections.do({|sel, i| soundFileView.selectNone(i)});
|
|
nSegments.do({|i|
|
|
soundFileView.setSelectionStart(i, array[i]);
|
|
soundFileView.setSelectionSize(i, array[i+1] - array[i]);
|
|
soundFileView.setSelectionColor(i, colors[i]);
|
|
});
|
|
};
|
|
|
|
win.layout_(
|
|
VLayout(
|
|
[
|
|
HLayout(
|
|
[loadButton, stretch:1],
|
|
[soundFileView, stretch:5]
|
|
), stretch:2
|
|
],
|
|
[
|
|
HLayout(
|
|
[processButton, stretch:1],
|
|
[VLayout(
|
|
HLayout(StaticText(win).string_("Forward Th ").minWidth_(100), fwSlider),
|
|
HLayout(StaticText(win).string_("Backward Th").minWidth_(100), bwSlider),
|
|
HLayout(StaticText(win).string_("Debounce").minWidth_(100), debounceSlider)
|
|
), stretch:5]
|
|
), stretch:2
|
|
]
|
|
)
|
|
);
|
|
|
|
win.front;
|
|
)
|