WIP towards a 'rasterBuffer' approach, waiting on interface decisions and scaling decisions

nix
Ted Moore 4 years ago
parent ee18bdda02
commit 2d4c89ba77

@ -17,8 +17,8 @@ FluidWaveform : FluidViewer {
var <win;
*new {
arg audioBuffer, slicesBuffer, featureBuffer, parent, bounds, lineWidth = 1, waveformColor, stackFeatures = false, showSpectrogram = false, spectrogramColorScheme = 0, spectrogramAlpha = 1, showWaveform = true, normalizeFeaturesIndependently = true;
^super.new.init(audioBuffer,slicesBuffer, featureBuffer, parent, bounds, lineWidth, waveformColor,stackFeatures,showSpectrogram,spectrogramColorScheme,spectrogramAlpha,showWaveform,normalizeFeaturesIndependently);
arg audioBuffer, indicesBuffer, featureBuffer, parent, bounds, lineWidth = 1, waveformColor, stackFeatures = false, rasterBuffer, rasterColorScheme = 0, rasterAlpha = 1, showWaveform = true, normalizeFeaturesIndependently = true;
^super.new.init(audioBuffer,indicesBuffer, featureBuffer, parent, bounds, lineWidth, waveformColor,stackFeatures,rasterBuffer,rasterColorScheme,rasterAlpha,showWaveform,normalizeFeaturesIndependently);
}
close {
@ -34,11 +34,11 @@ FluidWaveform : FluidViewer {
}
init {
arg audio_buf, slices_buf, feature_buf, parent_, bounds, lineWidth, waveformColor,stackFeatures = false, showSpectrogram = false, spectrogramColorScheme = 0, spectrogramAlpha = 1, showWaveform = true,normalizeFeaturesIndependently = true;
arg audio_buf, slices_buf, feature_buf, parent_, bounds, lineWidth, waveformColor,stackFeatures = false, rasterBuffer, rasterColorScheme = 0, rasterAlpha = 1, showWaveform = true,normalizeFeaturesIndependently = true;
Task{
var sfv, categoryCounter = 0, xpos, ypos;
waveformColor = waveformColor ? Color(*0.dup(3));
waveformColor = waveformColor ? Color(*0.6.dup(3));
this.createCatColors;
@ -61,14 +61,12 @@ FluidWaveform : FluidViewer {
};
});
if(audio_buf.notNil,{
if(showSpectrogram,{
var magsbuf = Buffer(audio_buf.server);
if(rasterBuffer.notNil,{
var condition = Condition.new;
var colors;
// TODO: no need for this to be a switch statement.
spectrogramColorScheme.switch(
rasterColorScheme.switch(
0,{
colors = this.loadColorFile("CET-L02");
},
@ -85,33 +83,30 @@ FluidWaveform : FluidViewer {
colors = this.loadColorFile("CET-L04");
},
{
"% spectrogramColorScheme: % is not valid.".format(thisMethod,spectrogramColorScheme).warn;
"% spectrogramColorScheme: % is not valid.".format(thisMethod,rasterColorScheme).warn;
}
);
FluidBufSTFT.processBlocking(audio_buf.server,audio_buf,magnitude:magsbuf,action:{
magsbuf.loadToFloatArray(action:{
arg mags;
rasterBuffer.loadToFloatArray(action:{
arg vals;
fork({
var img = Image(magsbuf.numFrames,magsbuf.numChannels);
mags = (mags / mags.maxItem).ampdb.linlin(-120.0,0.0,0,255).asInteger;
var img = Image(rasterBuffer.numFrames,rasterBuffer.numChannels);
vals = (vals - vals.minItem) / (vals.maxItem - vals.minItem);
vals = (vals * 255).asInteger;
mags.do{
arg mag, index;
// colors[mag].postln;
img.setColor(colors[mag], index.div(magsbuf.numChannels), magsbuf.numChannels - 1 - index.mod(magsbuf.numChannels));
vals.do{
arg val, index;
img.setColor(colors[val], index.div(rasterBuffer.numChannels), rasterBuffer.numChannels - 1 - index.mod(rasterBuffer.numChannels));
};
UserView(win,Rect(xpos,ypos,bounds.width,bounds.height))
.drawFunc_{
img.drawInRect(Rect(0,0,bounds.width,bounds.height),fraction:spectrogramAlpha);
img.drawInRect(Rect(0,0,bounds.width,bounds.height),fraction:rasterAlpha);
};
condition.unhang;
magsbuf.free;
},AppClock)
});
});
condition.hang;
});
@ -134,7 +129,6 @@ FluidWaveform : FluidViewer {
File.delete(path);
});
});
if(slices_buf.notNil,{
slices_buf.numChannels.switch(

@ -0,0 +1,48 @@
(
~raster = {
arg rasterBuffer;
var colors;
colors = CSVFileReader.readInterpret(FluidFilesPath("../Resources/color-schemes/%.csv".format("CET-L16"))).collect{
arg row;
Color.fromArray(row);
};
rasterBuffer.loadToFloatArray(action:{
arg vals;
"n vals in raster buffer: %".format(vals.size).postln;
fork({
var img = Image(rasterBuffer.numFrames,rasterBuffer.numChannels);
var min = vals.minItem;
var max = vals.maxItem;
var range = max - min;
"min: %".format(min).postln;
"max: %".format(max).postln;
"range: %".format(range).postln;
vals = (vals - min) / range;
vals = (vals * 255).asInteger;
vals.do{
arg val, index;
img.setColor(colors[val], index.div(rasterBuffer.numChannels), rasterBuffer.numChannels - 1 - index.mod(rasterBuffer.numChannels));
};
img.plot;
},AppClock);
});
};
)
// show mels
~drums = Buffer.read(s,FluidFilesPath("Nicol-LoopE-M.wav"));
~rasterBuffer = Buffer(s);
FluidBufMelBands.processBlocking(s,~drums,features:~rasterBuffer,numBands:512,windowSize:1024,action:{"done".postln});
FluidBufSTFT.processBlocking(s,~drums,magnitude:~rasterBuffer,windowSize:1024,action:{"done".postln});
FluidBufMFCC.processBlocking(s,~drums,features:~rasterBuffer,windowSize:1024,action:{"done".postln});
FluidBufChroma.processBlocking(s,~drums,features:~rasterBuffer,action:{"done".postln});
~rasterBuffer.postln;
~raster.(~rasterBuffer);
Loading…
Cancel
Save