rkeys
Version:
A platform for creating tablet/HTML5 virtual-keyboard apps to send keystrokes to remote X11
116 lines (115 loc) • 3.05 kB
JavaScript
// Generated by LiveScript 1.3.0
(function(){
var Noise, CACHESIZE, MONO, SAMPLERATE;
Noise = require('./noise');
CACHESIZE = 3;
MONO = 1;
SAMPLERATE = 44100;
module.exports = {
createBeep: createBeep,
createNoise: createNoise,
beep: createBeep(),
blip: createBeep({
type: 'square',
freq: 9000
}),
blop: createBeep({
type: 'square',
freq: 100
}),
drop: createBeep({
toFreq: 0
}),
rise: createBeep({
toFreq: 2000
}),
noise: {
brown: createNoise({
type: 'brown'
}),
pink: createNoise({
type: 'pink'
}),
white: createNoise({
type: 'white'
})
}
};
function createBeep(arg$){
var ref$, freq, ref1$, dur, toFreq, type;
ref$ = arg$ != null
? arg$
: {}, freq = (ref1$ = ref$.freq) != null ? ref1$ : 1000, dur = (ref1$ = ref$.dur) != null ? ref1$ : 0.025, toFreq = ref$.toFreq, type = ref$.type;
return renderCacheOffline(dur, function(ctx){
var x$;
x$ = ctx.createOscillator();
x$.frequency.value = freq;
if (toFreq != null) {
x$.frequency.setTargetAtTime(toFreq, 0, dur);
}
if (type != null) {
x$.type = type;
}
return x$;
});
}
function createNoise(arg$){
var ref$, dur, ref1$, type, GENS;
ref$ = arg$ != null
? arg$
: {}, dur = (ref1$ = ref$.dur) != null ? ref1$ : 0.025, type = (ref1$ = ref$.type) != null ? ref1$ : 'white';
GENS = {
brown: Noise.createBrownNoise,
pink: Noise.createPinkNoise,
white: Noise.createWhiteNoise
};
return renderCacheOffline(dur, function(ctx, size){
var b, samples, data, i$, to$, i, x$;
b = ctx.createBuffer(MONO, size, SAMPLERATE);
samples = GENS[type](size);
data = b.getChannelData(0);
for (i$ = 0, to$ = size - 1; i$ <= to$; ++i$) {
i = i$;
data[i] = samples[i];
}
x$ = ctx.createBufferSource();
x$.buffer = b;
return x$;
});
}
function createCache(){
var audio, p;
audio = [];
p = 0;
return {
init: function(samples){
var data, i$, to$, i, results$ = [];
data = WavEncoder.encode(samples);
for (i$ = 0, to$ = CACHESIZE - 1; i$ <= to$; ++i$) {
i = i$;
results$.push(audio[i] = new Audio(data));
}
return results$;
},
play: function(){
var ref$;
return (ref$ = audio[p++ % CACHESIZE]) != null ? ref$.play() : void 8;
}
};
}
function renderCacheOffline(dur, createGenerator){
var size, c, x$, generator, cache;
size = SAMPLERATE * dur;
c = new OfflineAudioContext(MONO, size, SAMPLERATE);
x$ = generator = createGenerator(c, size);
x$.connect(c.destination);
x$.start();
x$.stop(dur);
cache = createCache();
c.oncomplete = function(it){
return cache.init(it.renderedBuffer.getChannelData(0));
};
c.startRendering();
return cache.play;
}
}).call(this);