!7 import static x30_pkg.x30_util.VF1; sclass QuickAudioRecord > DynPrintLog { transient volatile L recording; transient JButton btn; visualize { //btn = jbutton("Record [hold button down]"); btn = jImageAndTextButton(#1101400, "Record [hold button down]"); onMouseDown(btn, r { print("Recording!"); recording = synchroList(); }); onMouseUp(btn, r { if (recording == null) ret with print("Huh?"); final L l = recording; recording = null; print("Recording done. Got " + l(l) + " chunks"); thread "Save WAV" { temp enter(); File wavFile = anonymousWAVEFile(); multiShortArraysToWAVE(l, wavFile); printFileInfo(wavFile); vmBus_send('newRecording, wavFile); } }); ret northAndCenterWithMargins(btn, super.visualize()); } start { dm_addAudioListener(voidfunc(short[] data) { temp enter(); L l = recording; if (l == null) ret; l.add(cloneShortArray(data)); }); } }