-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
executable file
·107 lines (80 loc) · 2.6 KB
/
index.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
var fs = require('fs');
var SamplePlayer = require('openmusic-sample-player');
var setterGetterify = require('setter-getterify');
var Promise = require('es6-promise').Promise;
module.exports = function(context) {
var node = context.createGain();
// Set up setters & getters
var nodeProperties = {
propertyA: 'default value for A',
propertyB: 0.123456,
propertyC: 0x123456,
propertyD: { 'also': 'objects are ok too' }
};
setterGetterify(node, nodeProperties);
// Set up samples
var samplePlayers = [];
var bassDrum = fs.readFileSync(__dirname + '/samples/bassdrum.wav');
var clap = fs.readFileSync(__dirname + '/samples/clap.wav');
var cowbell = fs.readFileSync(__dirname + '/samples/cowbell.wav');
var claves = fs.readFileSync(__dirname + '/samples/claves.wav');
var maracas = fs.readFileSync(__dirname + '/samples/maracas.wav');
var hiHatOpen = fs.readFileSync(__dirname + '/samples/hihat_open.wav');
var hiHatClosed = fs.readFileSync(__dirname + '/samples/hihat_closed.wav');
var rimshot = fs.readFileSync(__dirname + '/samples/rimshot.wav');
var snareDrum = fs.readFileSync(__dirname + '/samples/snaredrum.wav');
var tom = fs.readFileSync(__dirname + '/samples/tom_low.wav');
var samples = [
bassDrum,
clap,
cowbell,
claves,
maracas,
hiHatClosed,
hiHatOpen,
rimshot,
snareDrum,
tom
];
node.start = function(when, offset, duration) {
console.log('start', 'when', when, 'offset', offset, 'duration', duration);
when = when !== undefined ? when : 0;
offset = offset !== undefined ? offset : 0;
};
node.ready = function() {
var samplesLoaded = [];
// disconnect existing samplers just in case
samplePlayers.forEach(function(s) {
s.disconnect();
});
// dump them, and let's start again
samplePlayers = [];
samples.forEach(function(sample, index) {
var samplePlayer = new SamplePlayer(context);
var arrayBuffer = sample.toArrayBuffer();
samplePlayers.push(samplePlayer);
samplePlayer.connect(node);
var sampleLoaded = new Promise(function(resolve, reject) {
context.decodeAudioData(arrayBuffer, function(buffer) {
samplePlayer.buffer = buffer;
resolve(buffer);
}, function(err) {
reject(err);
});
});
samplesLoaded.push(sampleLoaded);
});
return Promise.all(samplesLoaded);
};
node.stop = function(when) {
};
node.cancelScheduledEvents = function(when) {
};
node.playSample = function(sampleIndex, willLoop) {
willLoop = willLoop !== undefined ? willLoop : false;
var samplePlayer = samplePlayers[sampleIndex];
samplePlayer.loop = willLoop;
samplePlayer.start();
};
return node;
};