-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsplitAudioBuffer.js
45 lines (34 loc) · 1.06 KB
/
splitAudioBuffer.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
var getAudioContext = require("./getAudioContext");
module.exports = function(audioBuffer, n, audioContext) {
var numberOfChannels, channelData;
var result, length, start, end, startIndex, endIndex;
var subLength, subBuffer;
var i, j;
n |= 0;
if (n <= 0) {
return [];
}
audioContext = audioContext || getAudioContext();
numberOfChannels = audioBuffer.numberOfChannels;
channelData = new Array(numberOfChannels);
for (i = 0; i < numberOfChannels; i++) {
channelData[i] = audioBuffer.getChannelData(i);
}
result = new Array(n);
length = audioBuffer.length / n;
start = 0;
end = 0;
for (i = 0; i < n; i++) {
end = start + length;
startIndex = start|0;
endIndex = end|0;
subLength = endIndex - startIndex;
subBuffer = audioContext.createBuffer(audioBuffer.numberOfChannels, subLength, audioBuffer.sampleRate);
for (j = 0; j < numberOfChannels; j++) {
subBuffer.getChannelData(j).set(channelData[j].subarray(startIndex, endIndex));
}
result[i] = subBuffer;
start = end;
}
return result;
};