Change audio approach.
This commit is contained in:
@ -729,34 +729,35 @@ JSWORD: release { handle }
|
|||||||
~
|
~
|
||||||
|
|
||||||
r~
|
r~
|
||||||
context.audio_contexts = [];
|
context.audio_context = null;
|
||||||
context.newAudio = function() {
|
context.audio_channels = [];
|
||||||
if (context.audio_contexts.length < 30) {
|
context.initAudio = function() {
|
||||||
var ctx = new AudioContext();
|
if (context.audio_context !== null) {
|
||||||
context.audio_contexts.push(ctx);
|
return;
|
||||||
return ctx;
|
}
|
||||||
|
context.audio_context = new AudioContext();
|
||||||
|
var master = context.audio_context.createGain();
|
||||||
|
master.connect(context.audio_context.destination);
|
||||||
|
master.gain.value = 1/8;
|
||||||
|
for (var i = 0; i < 8; ++i) {
|
||||||
|
var oscillator = context.audio_context.createOscillator();
|
||||||
|
oscillator.type = 'sine';
|
||||||
|
var gain = context.audio_context.createGain();
|
||||||
|
gain.gain.value = 0;
|
||||||
|
oscillator.connect(gain);
|
||||||
|
gain.connect(master);
|
||||||
|
oscillator.start();
|
||||||
|
context.audio_channels.push([gain, oscillator]);
|
||||||
}
|
}
|
||||||
var ctx = context.audio_contexts[0];
|
|
||||||
context.audio_contexts.splice(0, 1);
|
|
||||||
context.audio_contexts.push(ctx);
|
|
||||||
return ctx;
|
|
||||||
};
|
};
|
||||||
~ jseval
|
~ jseval
|
||||||
|
|
||||||
JSWORD: tone { pitch duration volume -- }
|
JSWORD: tone { pitch volume channel -- }
|
||||||
var audio = context.newAudio();
|
context.initAudio();
|
||||||
var oscillator = audio.createOscillator();
|
context.audio_channels[channel][0].gain.value = volume / 100;
|
||||||
oscillator.type = 'sine';
|
context.audio_channels[channel][1].frequency.value = 27.5 * Math.pow(2, (pitch - 21) / 12);
|
||||||
oscillator.frequency.setValueAtTime(27.5 * Math.pow(2, (pitch - 21) / 12), audio.currentTime);
|
|
||||||
var gain = audio.createGain();
|
|
||||||
gain.gain.setValueAtTime(0, audio.currentTime);
|
|
||||||
gain.gain.linearRampToValueAtTime(volume / 100, audio.currentTime + duration / 1000 * 0.1);
|
|
||||||
gain.gain.linearRampToValueAtTime(volume / 100, audio.currentTime + duration / 1000 * 0.9);
|
|
||||||
gain.gain.linearRampToValueAtTime(0, audio.currentTime + duration / 1000);
|
|
||||||
oscillator.connect(gain);
|
|
||||||
gain.connect(audio.destination);
|
|
||||||
oscillator.start();
|
|
||||||
~
|
~
|
||||||
|
: silence 8 0 do 0 0 i tone loop ;
|
||||||
|
|
||||||
JSWORD: ms-ticks { -- ms }
|
JSWORD: ms-ticks { -- ms }
|
||||||
return Date.now();
|
return Date.now();
|
||||||
|
|||||||
Reference in New Issue
Block a user