-
Notifications
You must be signed in to change notification settings - Fork 0
/
scratchxrecordextension.js
81 lines (73 loc) · 2.3 KB
/
scratchxrecordextension.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
(function(ext) {
// Cleanup function when the extension is unloaded
ext._shutdown = function() {};
if (!!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)) {
ext._getStatus = function() {
return {status: 2, msg: 'Ready'};
}} else {
ext._getStatus = function() {
return {status: 1, msg: 'Your browser does not support the mediaDevices() API (which is needed). Try a different browser.'};
}};
recordings = []
ext.startrecord = function() {
navigator.mediaDevices.getUserMedia({
audio: true
}).then(function(stream) {
gumStream = stream;
recorder = new MediaRecorder(stream);
recorder.ondataavailable = function(e) {
objurl = URL.createObjectURL(e.data)
recordings.push(objurl)
};
recorder.start();
});
}
ext.stoprecord = function() {
recorder.stop();
gumStream.getAudioTracks()[0].stop();
}
ext.playrecord = function(recordingid) {
elem = document.createElement('audio')
elem.src = recordings[recordingid - 1]
elem.id = "playaudio"
elem.setAttribute("class","recordingaudio")
elem.playbackRate = setplaybackrate
document.getElementsByTagName('body')[0].appendChild(elem)
document.getElementById('playaudio').play()
document.getElementById('playaudio').removeAttribute('id')
}
ext.stopplayrecord = function() {
var paras = document.getElementsByClassName('recordingaudio');
while(paras[0]) {
paras[0].parentNode.removeChild(paras[0]);
}
}
ext.totalrecorded = function() {
return recordings.length
}
ext.playbackspeed = function(input) {
setplaybackrate = input
}
ext._stop = function() {
var paras = document.getElementsByClassName('recordingaudio');
while(paras[0]) {
paras[0].parentNode.removeChild(paras[0]);
}
setplaybackrate = 1
recordings = []
}
// Block and block menu descriptions
var descriptor = {
blocks: [
[" ","start recording audio","startrecord"],
[" ","stop recording audio","stoprecord"],
[" ","play %n of recorded sounds","playrecord"],
[" ","stop recordings","stopplayrecord"],
["r","total sounds recorded","totalrecorded"],
[" ","set playback speed to %n X","playbackspeed"],
],
};
// Register the extension
ScratchExtensions.register('Recording', descriptor, ext);
setplaybackrate = 1
})({});