-
Notifications
You must be signed in to change notification settings - Fork 3
/
audio-spectrum-main.js
87 lines (79 loc) · 2.57 KB
/
audio-spectrum-main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Copyright 2014, 2015, 2016 Kevin Reid <[email protected]>
//
// This file is part of ShinySDR.
//
// ShinySDR is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ShinySDR is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with ShinySDR. If not, see <http://www.gnu.org/licenses/>.
'use strict';
requirejs.config({
baseUrl: 'client/'
});
define([
'audio/analyser',
'audio/client-source',
'coordination',
'events',
'values',
'widget',
'widgets',
], (
import_audio_analyser,
import_audio_client_source,
import_coordination,
import_events,
import_values,
import_widget,
widgets
) => {
const {
AudioAnalyserAdapter,
} = import_audio_analyser;
const {
AudioSourceSelector,
} = import_audio_client_source;
const {
ClientStateObject,
} = import_coordination;
const {
Scheduler,
} = import_events;
const {
ConstantCell,
StorageNamespace,
} = import_values;
const {
Context,
createWidgets,
} = import_widget;
const scheduler = new Scheduler();
const audioContext = new AudioContext({
sampleRate: 96000,
});
const storage = sessionStorage; // TODO persistent and namespaced-from-other-pages
const selector = new AudioSourceSelector(scheduler, audioContext, navigator.mediaDevices,
new StorageNamespace(storage, 'input-selector.'));
const adapter = new AudioAnalyserAdapter(scheduler, audioContext);
adapter.connectFrom(selector.source);
adapter.paused.set(false);
// kludge: stick extra property on adapter so it gets in the options menu UI.
// TODO: Replace this by adding flexibility to the UI system.
adapter.input = new ConstantCell(selector);
const root = new ConstantCell(adapter);
const context = new Context({
widgets: widgets,
// Using sessionStorage because we want default settings and because our storage usage doesn't yet distinguish between different pages.
clientState: new ClientStateObject(sessionStorage, null),
scheduler: scheduler
});
createWidgets(root, context, document);
});