-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathaudioTransmitter.js
65 lines (51 loc) · 1.46 KB
/
audioTransmitter.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
var audioTransmitter = (function () {
var audioRecorder
new AudioStream().getRecorder().then(recorder => {
audioRecorder = recorder;
});
function start() {
audioRecorder.start();
}
function stop() {
audioRecorder.stop();
}
function transmitAudioData(data) {
var base64String = btoa(
new Uint8Array(data)
.reduce((onData, byte) => onData + String.fromCharCode(byte), ''));
var dataToSend = constructData('binary', base64String)
audioBridge.send(dataToSend);
}
function transmitMetadata(metadata) {
var dataToSend = constructData('metadata', metadata);
audioBridge.send(dataToSend);
}
function transmitStartData() {
var dataToSend = constructData('started', 'started')
audioBridge.send(dataToSend);
}
function transmitStopData() {
var dataToSend = constructData('stopped', 'stopped')
audioBridge.send(dataToSend);
}
function constructData(event, data) {
dataToSend = {}
dataToSend.user = gunDB._.opt.pid
dataToSend.event = event
dataToSend.timestamp = new Date().getTime();
if (event == 'metadata') {
dataToSend.data = JSON.stringify(data);
} else if (event == 'binary') {
dataToSend.data = data;
}
return dataToSend;
}
return {
start: start,
stop: stop,
transmitStartData: transmitStartData,
transmitStopData: transmitStopData,
transmitMetadata: transmitMetadata,
transmitAudioData: transmitAudioData
};
})();