!7 import javax.sound.sampled.*; static TargetDataLine currentLine; p-substance { final L devices = inputAudioDevices(); L deviceNames = map(func(Mixer m) { audioDeviceName(m) + " [" + n(m.getTargetLineInfo(), "line") + "]" }, devices); ButtonGroup buttons = showUnselectedRadioButtons("Input Audio Devices", deviceNames); JFrame frame = minFrameWidth(300, packFrame(buttons)); final JLabel lblLevel = jcenteredBoldLabel("Level: "); addToWindowAndPack(frame, lblLevel); awtEvery(lblLevel, 100, r { S text = "Level: "; if (currentLine != null) try { text += currentLine.getLevel(); } catch e { text += str(e); printStackTrace(e); } lblLevel.setText(text); }); onRadioButtonChange(buttons, voidfunc(int i) { if (i < 0) ret; Mixer m = devices.get(i); Line.Info[] lines = m.getTargetLineInfo(); print("Device " + i + ": " + audioDeviceName(m)); print("Have " + n(lines, "line")); currentLine = (TargetDataLine) m.getLine(first(lines)); }); }