|
22 | 22 | <script>
|
23 | 23 | // Setup shared variables
|
24 | 24 | var sampleRate = 44100;
|
25 |
| - var bufferSize = 2048; |
| 25 | + var bufferSize = 1024; |
26 | 26 | var bufferTime = Math.floor(1000 / (sampleRate / bufferSize));
|
27 | 27 |
|
28 | 28 | var amplitude = 0.1; // Default amplitude at 70%
|
|
52 | 52 | output.mozSetup(1, sampleRate, 1);
|
53 | 53 | }
|
54 | 54 |
|
55 |
| - var timePerWrite = 0; |
56 | 55 | var programStart;
|
57 |
| - |
| 56 | + var writeCount = 0; |
| 57 | + |
58 | 58 | var s = new Sampler('audio/intergalactic.ogg', bufferSize, sampleRate);
|
59 | 59 | s.envelope = new ADSR(0, 0, 1, Infinity, 0, sampleRate);
|
60 | 60 | s.envelope.disable(); // turn off so it does not auto trigger
|
61 | 61 |
|
62 | 62 | var audioWriter = function() {
|
63 | 63 | if (s.loaded) {
|
64 |
| - var startTime = (new Date()).getTime(); |
65 |
| - |
66 | 64 | if ( programStart === undefined ) {
|
67 | 65 | programStart = new Date();
|
68 | 66 | }
|
69 | 67 |
|
70 |
| - var additiveSignal; |
71 |
| - |
72 |
| - if ( s.envelope.isActive() ) { |
73 |
| - s.generate(); |
74 |
| - additiveSignal = s.applyEnvelope(); |
75 |
| - } |
76 |
| - |
77 |
| - // Set the global osc object |
78 |
| - if ( typeof additiveSignal === 'undefined' ) { |
79 |
| - additiveSignal = silence; |
80 |
| - } |
| 68 | + while ( (new Date() - programStart) / 1000 * sampleRate / bufferSize >= writeCount ) { |
| 69 | + var additiveSignal; |
| 70 | + |
| 71 | + if ( s.envelope.isActive() ) { |
| 72 | + s.generate(); |
| 73 | + additiveSignal = s.applyEnvelope(); |
| 74 | + } |
| 75 | + |
| 76 | + /* |
| 77 | + // This makes it fall out of sync for some reason. |
| 78 | + if ( typeof additiveSignal === 'undefined' ) { |
| 79 | + additiveSignal = silence; |
| 80 | + } |
| 81 | + */ |
81 | 82 |
|
82 |
| - // Flush buffer |
83 |
| - output.mozWriteAudio([]); |
84 |
| - |
85 |
| - // Write next audio frame |
86 |
| - output.mozWriteAudio(additiveSignal); |
| 83 | + // Flush buffer |
| 84 | + output.mozWriteAudio([]); |
| 85 | + |
| 86 | + if (additiveSignal) { |
| 87 | + // Write next audio frame |
| 88 | + output.mozWriteAudio(additiveSignal); |
87 | 89 |
|
88 |
| - var endTime = (new Date()).getTime(); |
89 |
| - |
90 |
| - timePerWrite = endTime - startTime; |
| 90 | + } |
| 91 | + writeCount++; |
| 92 | + } |
91 | 93 | }
|
92 | 94 | }
|
93 | 95 |
|
|
129 | 131 | var step = Math.floor(s.duration * sampleRate / width);
|
130 | 132 |
|
131 | 133 | noStroke();
|
132 |
| - beginShape(); |
133 | 134 | stroke(0, 100);
|
134 | 135 | fill(0, 50);
|
| 136 | + beginShape(); |
135 | 137 | for ( int i = 0; i < Math.floor(s.samples.length/step); i++) {
|
136 | 138 | if (s.samples[i*step] > 0) {
|
137 | 139 | vertex(i + width - s.samples.length/step, height/2 - s.samples[i*step] * 100);
|
|
226 | 228 | }
|
227 | 229 |
|
228 | 230 | void keyPressed() {
|
229 |
| - var semi; |
| 231 | + var semi = undefined; |
230 | 232 |
|
231 | 233 | if ( key == 'z' ) { // C
|
232 | 234 | semi = 0;
|
|
303 | 305 | if (mouseButton == RIGHT) {
|
304 | 306 | s.playEnd = mouseX / width;
|
305 | 307 | }
|
306 |
| - |
307 | 308 | }
|
308 | 309 |
|
309 | 310 | </script>
|
|
0 commit comments