SCSoundFileView
(
w = SCWindow.new("soundfile test", Rect(200, 200, 800, 400));
a = SCSoundFileView.new(w, Rect(20,20, 700, 60));
f = SoundFile.new;
f.openRead("sounds/a11wlk01.wav");
f.inspect;
a.soundfile = f;
a.read(0, f.numFrames);
a.elasticMode = true;
a.timeCursorOn = true;
a.timeCursorColor = Color.red;
a.timeCursorPosition = 2050;
a.drawsWaveForm = true;
a.gridOn = true;
a.gridResolution = 0.2;
w.front;
)
// step by step examples:
( // make a simple SCSoundFileView
w = SCWindow.new("soundfile test", Rect(10, 700, 750, 100));
w.front;
a = SCSoundFileView.new(w, Rect(20,20, 700, 60));
f = SoundFile.new;
f.openRead("sounds/a11wlk01.wav");
// f.inspect;
a.soundfile = f; // set soundfile
a.read(0, f.numFrames); // read in the entire file.
a.refresh; // refresh to display the file.
)
// reading file
a.read(0, f.numFrames / 2).refresh; // read first half
a.read.refresh; // read entire file by default
a.read(f.numFrames / 2).refresh; // read second half
a.read(0, -1).refresh; // -1 also reads entire file, like buffer.
// block sets visual resolution of waveform, default is 64.
// i.e. the view keeps peak values for each block of e.g. 64 samples
// rather than the entire waveform.
a.read(0, -1, block: 32).refresh;
a.read(0, -1, block: 24).refresh;
a.read(0, -1, block: 16).refresh;
// for longer files, you can use:
a.readWithTask;
// zoom is relative: < 0 zooms in, > 0 zooms out.
a.zoom(0.2).refresh;
a.zoom(2).refresh;
a.zoom(2).refresh;
a.zoomToFrac(0.5); // zoom to half file size
a.zoomAllOut;
a.gridOn = true; // time grid, 1 second by default,
a.gridResolution = 0.2; // or set resolution in seconds
a.gridColor = Color.green; // color is changeable.
a.gridOffset_(0.1); // not sure if this is working?
a.timeCursorOn = true; // a settable cursor
a.timeCursorPosition = 2050; // position is in frames.
a.timeCursorColor = Color.white;
// toggle drawing on/off
a.drawsWaveForm = false;
a.drawsWaveForm = true;
// these methods should return view properties (not done yet):
a.gridOn
a.gridResolution
a.gridColor
a.timeCursorOn
a.timeCursorPosition
a.timeCursorColor
// Selections: multiple selections are supported.
// e.g. use selection 0:
a.setSelectionColor(0, Color.red); // set...( index, value )
a.selectionStart(0); // at index
a.setSelectionStart(0, 12345);
a.setSelectionSize(0, 12345);
a.setSelectionStart(0, 1234);
a.selectionStart(0); //
// now selection 1
a.setSelectionColor(1, Color.white);
a.setSelectionStart(1, 1234).setSelectionSize(1, 1234 * 2);
a.selectionStart(1); //
a.setSelectionStart(0, 12345); //
// the current selection gets changed when click/dragging in view.
a.currentSelection; // index of current selection;
a.currentSelection_(1); // switch current selection - try click/drag white now.
a.currentSelection;
a.selections.size; // 64 selections
a.selections[0];
a.selections[1];
a.selections;
// setSelection (index, selection);
a.setSelection(0, [234, 2345]);
a.selection(1); // returns [start, size].
a.elasticMode = true; // not sure if this is working yet?
( // mouseUpAction
a.mouseUpAction = {
("mouseUp, current selection is now:"
+ a.selections[a.currentSelection]).postln;
};
)
// lock selection 0:
a.currentSelection_(0);
a.setEditableSelectionStart(0, false);
a.setEditableSelectionSize(0, false);
// unlock selection 0:
a.setEditableSelectionStart(0, true);
a.setEditableSelectionSize(0, true);
a.selectionStartTime(0);
a.selectionDuration(0);
a.setSelectionStart(0, 12345);
a.setSelectionSize(0, 12345);
a.readSelection.refresh;
a.readSelection(16).refresh; // in higher resolution
a.read.refresh; // go back to entire file.
a.dataNumSamples; // visual data have this many points
a.data.plot; //
a.setData(a.data.reverse);
a.zoom(0.25); // scrolling is normalized
a.scrollTo(0.5); //
a.scrollTo(0.6); //
a.scroll(12); // scroll is in viewFrames.
a.zoom(4);
w.close;