Bonjour,
pour les besoins d'un projet j'ai dû utiliser web audio API, qui est une API que je ne maitrise pas vraiment et dont je n'ai pas le temps d'apprendre rigoureusement le fonctionnement. Je me tourne donc vers vous pour savoir si vous pourriez m'aider à résoudre mon problème.
J'essaie de faire un métronome tout simple qui marque tous les temps d'une mesure. La solution que j'ai trouvé pour y "arriver" me limite à un certain nombre de mesure avant de devoir faire cesser le métronome.
Voici le code :
J'ai essayer d'ajouter un SetTimeout dans le for() autour des playSound(), mais ca ne change rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 //---Variables globales---------------------- var bpm = 90; var quarterNote = 60 / bpm; var startTime; var metroBuffer = []; //------------------------------------------- function initMetronome(i){ var request = new XMLHttpRequest(); request.open("GET","Samples/metro"+(i+1)+".mp3",true); request.responseType = "arraybuffer"; request.onload = function() { context.decodeAudioData(request.response, function(buffer) { metroBuffer[i] = buffer; }); }; request.send(); } function metronome(){ startTime = context.currentTime; console.log(startTime); var tap1 = metroBuffer[0]; var tap2 = metroBuffer[1]; for(var i = 4; i<100; i+=4){ playSound(tap1, startTime + (i-4)*quarterNote); playSound(tap2, startTime + (i-3)*quarterNote); playSound(tap2, startTime + (i-2)*quarterNote); playSound(tap2, startTime + (i-1)*quarterNote); } } function playSound(buffer, time) { var source = context.createBufferSource(); source.buffer = buffer; source.connect(context.destination); source.start(time); }
Je ne vois définitivement pas comment je peux faire...
Merci d'avance pour vos conseils
Partager