Notes played upon each choice
This commit is contained in:
parent
ee9275256b
commit
b849e7d884
@ -0,0 +1 @@
|
||||
/1er-quiz/start
|
60
themes/acoeur/assets/js/notes.js
Normal file
60
themes/acoeur/assets/js/notes.js
Normal file
@ -0,0 +1,60 @@
|
||||
// let freq = 440
|
||||
|
||||
const tons = [264, 275, 297, 316.8, 330, 352, 371.25, 396, 412.5, 440, 475.2, 495]
|
||||
// const tons = [396, 417, 528. 639, 741, 852, 963]
|
||||
|
||||
/*
|
||||
* Play one note
|
||||
*/
|
||||
note = (context, freq, counter) => {
|
||||
console.log("Note n°", counter, freq)
|
||||
|
||||
const oscil = context.createOscillator()
|
||||
oscil.type = 'triangle'
|
||||
oscil.frequency.value = freq
|
||||
|
||||
const gainNode = context.createGain()
|
||||
oscil.connect(gainNode)
|
||||
gainNode.connect(context.destination)
|
||||
|
||||
const notesPerSecond = 5 // In Hertz
|
||||
// All are in seconds
|
||||
const start = counter / notesPerSecond
|
||||
const duration = 1.2 / notesPerSecond
|
||||
const ramp = .2 / notesPerSecond / 3 // Exponential increase
|
||||
|
||||
// Increase volume
|
||||
gainNode.gain.setTargetAtTime(1, start, ramp)
|
||||
// Decrease volume
|
||||
gainNode.gain.setTargetAtTime(0, start + duration - ramp * 3, ramp)
|
||||
|
||||
oscil.start(start)
|
||||
oscil.stop(start + duration)
|
||||
}
|
||||
|
||||
/*
|
||||
* From the current URL generate an UUID
|
||||
*/
|
||||
getUuidFromUrl = () =>
|
||||
document.location.pathname
|
||||
.split('')
|
||||
.reverse()
|
||||
.filter(l => l.match(/[0-9a-f]/))
|
||||
.join('')
|
||||
|
||||
/*
|
||||
* Launch notes based on the current URL
|
||||
*/
|
||||
launchNotes = (event, counter = 0, uuid = getUuidFromUrl()) => {
|
||||
if (counter >= uuid.length || counter >= 5) return
|
||||
|
||||
const context = new AudioContext()
|
||||
|
||||
const freq = tons[parseInt(uuid[counter], 16) % tons.length] / 2
|
||||
// freq *= Math.max(1, parseInt(uuid[counter], 16)) / Math.max(1, parseInt(uuid[counter + 1], 16))
|
||||
// freq = Math.min(2000, Math.round(freq))
|
||||
|
||||
note(context, freq, counter)
|
||||
|
||||
launchNotes(event, counter + 1, uuid)
|
||||
}
|
Loading…
Reference in New Issue
Block a user