Uses 911K of libraries. Click here for Pure Java version (10829L/56K).
1 | !7 |
2 | |
3 | cmodule ListenOnNoise > DynPrintLogAndEnabled { |
4 | switchable double threshold = 50; // volume percentage |
5 | switchable double minDurationAfterNoise = 1.5; // seconds |
6 | switchable double maxDuration = 10.0; // seconds |
7 | switchable bool verbose; |
8 | |
9 | transient float lastVolume; |
10 | transient long lastNoise; // in sysNow time |
11 | |
12 | JPanel makeControlArea() { |
13 | ret centerAndEastWithMargin( |
14 | centerAndEastWithMargin( |
15 | dm_calculatedLabel(() -> "Threshold: " + formatDouble(threshold, 1) + "%"), |
16 | jPopDownButton_noText("Set threshold...", r { dm_doubleFieldSetterDialog threshold() })), |
17 | super.makeControlArea()); |
18 | } |
19 | |
20 | start { |
21 | dm_watchField enabled(r { |
22 | if (!enabled) |
23 | dm_call(dm_quickAudioRecordModuleOpt(), 'stopRecording); |
24 | }); |
25 | dm_addAudioListener(voidfunc(short[] data) enter { |
26 | if (!enabled) ret; |
27 | if (verbose) printWithTime("Got audio data"); |
28 | |
29 | // Quickly calculate the volume |
30 | float vol = shortSamplesToPercentVolume(data); |
31 | |
32 | short[] clonedBuf = vol >= threshold && lastVolume < threshold |
33 | ? cloneShortArray(data) : null; |
34 | |
35 | dm_q(r { |
36 | S recorder = dm_quickAudioRecordModuleOpt(); |
37 | long recordingSince = cast dm_call(recorder, 'recordingSince); |
38 | bool noise = vol >= threshold; |
39 | bool isRecording = recordingSince != 0; |
40 | if (noise) lastNoise = sysNow(); |
41 | if (isRecording) { |
42 | // stop if max duration reached or no recent noise |
43 | if (elapsedSeconds(recordingSince) >= maxDuration |
44 | || elapsedSeconds(lastNoise) > minDurationAfterNoise) { |
45 | print("Stopping"); |
46 | dm_call(recorder, 'stopRecording); |
47 | } |
48 | } else { |
49 | // start recording |
50 | if (noise) { |
51 | sleep(10); // avoid audio listener race condition |
52 | print("Starting"); |
53 | dm_call(recorder, 'startRecording, clonedBuf); |
54 | } |
55 | } |
56 | }); |
57 | }); |
58 | } |
59 | } |
Began life as a copy of #1017159
download show line numbers debug dex old transpilations
Travelled to 7 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
Snippet ID: | #1026863 |
Snippet name: | Record On Noise [e.g. for wit.ai recognition with #1019331] |
Eternal ID of this version: | #1026863/19 |
Text MD5: | d0b876ae1715915506ec5e2b99b220ef |
Transpilation MD5: | eaa26b6f1b979f6471890d9ec1a05286 |
Author: | stefan |
Category: | javax / audio |
Type: | JavaX source code (Dynamic Module) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2020-02-15 14:09:25 |
Source code size: | 2020 bytes / 59 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 293 / 13646 |
Version history: | 18 change(s) |
Referenced in: | [show references] |