Warning: session_start(): open(/var/lib/php/sessions/sess_4g7tm4jjkhbjmaiumptvr8k1sa, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
cmodule QuickAudioRecord > DynPrintLog {
transient volatile L recording;
transient long recordingSince; // in sysNow time
transient JButton btn;
transient bool stop;
transient JLabel trayIcon;
transient File wavFile;
//transient short[] lastChunk; // for Record On Noise
visualize {
btn = jImageAndTextButton(#1101400, "Record [hold button down]");
onMouseDownUp(btn, r startRecording, r stopRecording);
ret northAndCenterWithMargins(btn, super.visualize());
}
start {
preloadImage(#1101417);
componentFieldsToKeep = initHashSetAndAdd(componentFieldsToKeep, 'trayIcon);
dm_addAudioListener(voidfunc(short[] data) { handleChunk(data) });
if (trayIcon == null) {
trayIcon = jimage(#1101416);
onMouseDownUp(trayIcon, r startRecording, r stopRecording);
setToolTip(trayIcon, "Click & hold to record audio!");
}
dm_addTrayIcon(trayIcon);
}
void handleChunk(short[] data) enter {
final L l = recording;
if (l == null) ret;
short[] clonedData = cloneShortArray(data);
l.add(clonedData);
vmBus_send recordedChunk(clonedData);
if (stop) {
stop = false;
recording = null;
recordingSince = 0;
vmBus_send doneRecording();
thread "Save WAV" {
temp enter();
print("Recording done. Got " + l(l) + " chunks");
multiShortArraysToWAVE(l, wavFile, format := dm_audioInputFormat());
printFileInfo(wavFile);
vmBus_send('newRecording, wavFile);
}
}
}
// API
void startRecording() {
startRecording(null);
}
void startRecording(short[] initialChunk) {
if (isRecording()) ret;
setImage(trayIcon, #1101417);
stop = false;
print("Recording!");
wavFile = anonymousWAVEFile();
recordingSince = sysNow();
recording = synchroList(llNonNulls(initialChunk));
vmBus_send startedRecording(wavFile);
if (initialChunk != null) vmBus_send recordedChunk(initialChunk);
updatePrintLog();
}
void stopRecording { setImage(trayIcon, #1101416); set stop; }
bool isRecording() { ret recording != null; }
long recordingSince() { ret recordingSince; }
}