Warning: session_start(): open(/var/lib/php/sessions/sess_1cq2md83aq58a6e25jimalgpf3, 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 AudioInput > DynPrintLog {
switchable float sampleRate = 16000;
switchable int channels = 1;
int bufSize = 40960;
transient recordToAudioListeners_AudioLoop loop;
transient SimpleLiveValue lvVolume = floatLiveValue(); // in percent
transient L> audioListeners = synchroList();
visualize {
ret centerAndSouthWithMargins(super.visualize(),
jCenteredLine(jLiveValueLabel(mapLiveValue(func(float volume) -> S { "Volume: " + iround(volume) + " %" }, S, lvVolume))));
}
start {
ownTimer(loop = recordToAudioListeners(audioListeners, bufSize, lvVolume, getAudioFormat()));
loop.start();
JComponent trayIcon = jMinWidth(16, jVerticalGreenBar(lvVolume, max := 100));
componentPopupMenuItem(trayIcon, "Audio Input", r { dm_showModule(module()) });
dm_setTrayIcon(trayIcon);
}
// hold audio listeners during reload
O _getReloadData() { ret audioListeners; }
void _setReloadData(L> listeners) { addAll(audioListeners, listeners); }
// API
void addAudioListener(VF1 l) { audioListeners.add(l); }
void removeAudioListener(VF1 l) { audioListeners.remove(l); }
AudioFormat getAudioFormat() { ret new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, sampleRate, 16, channels, channels*2, sampleRate, false); }
float getVolume() { ret lvVolume!; }
}