UNPKG

strumming-metronome

Version:

A simple JavaScript metronome for strumming practice.

40 lines (33 loc) 12.3 kB
const context = new (window.AudioContext || window.webkitAudioContext)(); const downStrumBase64 = "data:audio/mp3;base64,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"; const upStrumBase64 = "data:audio/mp3;base64,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VVGthxuDtGkZWaMoQq+ZK6zUmtMToYJcuCmquLUJMCwVtmIRFhY2KC+GKx4zuwoOlBHP4TKPorVcX1ZN0h6tQUiX2BySLbLeP7G78cUB820uBJ1p2lYvrMDJF7tonEqnovdFK3EjEgNqsz2SA7h+1IZeVbdJaDzqBbMflFVXfbMctj3sdtff/Ub7POSqNg5+x7jddzoz/1wou8TCECaRRUpzJkb5sF2xUY1yDNdHgAqgLIihoIGMUcHECRT1IPPspBISlRWEYSr98RKIxihE6GKkMV4jJ5c0Y5XDpt3HvxtIWmk5itx8mpONREkD0LMJkEjUZavzlnU8XGz2JblU8m1TzFkQCNZ4JHhPmaqiWzjHZXeZzzracWYnJto84lZy4mmJbRsCQotGgVCu0U6J1o87AriWWGm6AAB9B8l8P9SKc7DZM42DnRiWZXz5VGnAZiY0kaXDtebNFXlPlESxZdRdAbJQsISpRGgbc0hLHEbD3NISIQjJAjYbc/1i3/WKiooaf9YpTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uUxNyAFTWJJ8ww04JxL6U9lhnxVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//skxO8DyjydAyeZLUAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"; let downStrumBuffer, upStrumBuffer; export async function loadStrumSounds() { const loadSound = async (url) => { const res = await fetch(url); const arrayBuffer = await res.arrayBuffer(); return await context.decodeAudioData(arrayBuffer); }; downStrumBuffer = await loadSound(downStrumBase64); upStrumBuffer = await loadSound(upStrumBase64); } export function playBuffer(buffer) { const source = context.createBufferSource(); source.buffer = buffer; source.connect(context.destination); source.start(); } export function getDownStrumBuffer() { return downStrumBuffer; } export function getUpStrumBuffer() { return upStrumBuffer; } export function unlockAudio() { const buffer = context.createBuffer(1, 1, 22050); const source = context.createBufferSource(); source.buffer = buffer; source.connect(context.destination); source.start(0); document.removeEventListener('touchstart', unlockAudio); }