-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathservo.js
56 lines (46 loc) · 1.37 KB
/
servo.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
ServoJs = function() {
var ns = {};
var sampleRate = 44100;
var channels = 1;
var min = .5;
var max = 2.5;
var refreshRate = 60;
var amplitude = 255;
var center = 127;
var count = 20;
ns.moveTo = moveTo;
var audio = null;
function moveTo(channel, positionPercentage){
var riffwav = new RIFFWAVE();
riffwav.header.sampleRate = sampleRate;
riffwav.header.numChannels = 1;
riffwav.header.bitsPerSample = 8;
riffwav.Make(pulses(positionPercentage, count));
var audio = new Audio(riffwav.dataURI);
audio.play();
}
function pulses(position, count){
var samples = [];
var currentSample = 0;
var currentTime = 0;
var period = 1.0/refreshRate;
var pulseWidth = position / 100.0 * (max - min) + min;
var perSample = 1.0 / sampleRate;
while(currentTime <= pulseWidth / 1000.0){
samples[currentSample] = amplitude;
currentSample++;
currentTime+=perSample;
}
while(currentTime < period){
samples[currentSample] = center;
currentSample++;
currentTime+=perSample;
}
var allSamples = [];
for(i=0;i<=count;i++){
allSamples = allSamples.concat(samples);
}
return allSamples;
}
return ns;
}();