Uses 911K of libraries. Click here for Pure Java version (6462L/34K).
1 | !7 |
2 | |
3 | cmodule QuickAudioRecord > DynPrintLog { |
4 | transient volatile L<short[]> recording; |
5 | transient long recordingSince; // in sysNow time |
6 | transient JButton btn; |
7 | transient bool stop; |
8 | transient JLabel trayIcon; |
9 | transient File wavFile; |
10 | //transient short[] lastChunk; // for Record On Noise |
11 | switchable bool normalizeRecordings; |
12 | |
13 | visualize { |
14 | btn = jImageAndTextButton(#1101400, "Record [hold button down]"); |
15 | onMouseDownUp(btn, r startRecording, r stopRecording); |
16 | ret northAndCenterWithMargins(btn, super.visualize()); |
17 | } |
18 | |
19 | start { |
20 | preloadImage(#1101417); |
21 | componentFieldsToKeep = initHashSetAndAdd(componentFieldsToKeep, 'trayIcon); |
22 | |
23 | dm_addAudioListener(voidfunc(short[] data) { handleChunk(data) }); |
24 | |
25 | if (trayIcon == null) { |
26 | trayIcon = jimage(#1101416); |
27 | onMouseDownUp(trayIcon, r startRecording, r stopRecording); |
28 | setToolTip(trayIcon, "Click & hold to record audio!"); |
29 | } |
30 | dm_addTrayIcon(trayIcon); |
31 | } |
32 | |
33 | void handleChunk(short[] data) enter { |
34 | final L<short[]> l = recording; |
35 | if (l == null) ret; |
36 | short[] clonedData = cloneShortArray(data); |
37 | l.add(clonedData); |
38 | vmBus_send recordedChunk(clonedData); |
39 | |
40 | if (stop) { |
41 | stop = false; |
42 | recording = null; |
43 | recordingSince = 0; |
44 | vmBus_send doneRecording(); |
45 | thread "Save WAV" { |
46 | temp enter(); |
47 | print("Recording done. Got " + l(l) + " chunks"); |
48 | if (normalizeRecordings) |
49 | print("Normalized recording: " + toIntPercent(normalizeShortArrays(l)) + "%"); |
50 | multiShortArraysToWAVE(l, wavFile, format := dm_audioInputFormat()); |
51 | printFileInfo(wavFile); |
52 | vmBus_send('newRecording, wavFile); |
53 | } |
54 | } |
55 | } |
56 | |
57 | // API |
58 | |
59 | void startRecording() { |
60 | startRecording(null); |
61 | } |
62 | |
63 | void startRecording(short[] initialChunk) { |
64 | if (isRecording()) ret; |
65 | setImage(trayIcon, #1101417); |
66 | stop = false; |
67 | print("Recording!"); |
68 | wavFile = anonymousWAVEFile(); |
69 | recordingSince = sysNow(); |
70 | recording = synchroList(llNonNulls(initialChunk)); |
71 | vmBus_send startedRecording(wavFile); |
72 | if (initialChunk != null) vmBus_send recordedChunk(initialChunk); |
73 | updatePrintLog(); |
74 | } |
75 | |
76 | void stopRecording { setImage(trayIcon, #1101416); set stop; } |
77 | |
78 | bool isRecording() { ret recording != null; } |
79 | |
80 | long recordingSince() { ret recordingSince; } |
81 | } |
Began life as a copy of #1017158
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, hpgrupgrauku, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
Snippet ID: | #1018602 |
Snippet name: | Quick Audio Record [while holding button] |
Eternal ID of this version: | #1018602/35 |
Text MD5: | 07fa96f678384068d9ea7939acc357f7 |
Transpilation MD5: | da00601ace61769d164120e50fcc095b |
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-07 00:02:42 |
Source code size: | 2453 bytes / 81 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 588 / 132496 |
Version history: | 34 change(s) |
Referenced in: | [show references] |