← ← ← 8/24/2023, 12:17:24 AM | Posted by: Felippe Regazio
O código abaixo transforma seu teclado em um Piano. Vá no ALT da imagem, copie o código, cole no seu console, clique num lugar vazio da pagina, e só apertar as teclinhas rs. Se travar em um som, aperte "n" pra mutar. As teclas sonoras serão A...L
e Q...P
.
const getKeyFrequency = n => Math.pow(2, (n - 49) / 12) * 440;
const audioCtx = new AudioContext();
const playing = {};
window.addEventListener('keydown', e => {
'qawsedrftgyhujikolp'.split('').forEach((k, i) => {
if (e.key === k && !playing[k]) {
const frequency = getKeyFrequency(30 + i);
const oscillator = audioCtx.createOscillator();
playing[k] = oscillator;
oscillator?.frequency.setValueAtTime(frequency, audioCtx.currentTime);
oscillator.connect(audioCtx.destination);
oscillator?.frequency.setValueAtTime(frequency, audioCtx.currentTime);
oscillator.type = "triangle";
oscillator.start();
}
});
});
window.addEventListener('keyup', e => {
const k = e.key;
const stop = x => {
try {
playing[x].stop();
playing[x].disconnect;
playing[x] = false;
}catch{}
}
if (e.key === 'n') {
Object.keys(playing).forEach(x => stop(x));
}
stop(k);
});
getKeyFrequency define a frequencia de cada tecla com n = 30+x. faça a conta e vc tera a frequencia da primeira tecla, agora só ver a que nota ela pertence. adicione +1 na equação pra cada prox. tecla e vc saberá as notas. mude o 30 e vc muda a escala, assim que "afina" isso rs.
Se preferir, clique no botão abaixo: