reverse
This commit is contained in:
parent
3b7b46f25b
commit
533cd1052e
@ -11,6 +11,8 @@ const loopBtn = document.getElementById('loop');
|
|||||||
// 2. Variables utiles
|
// 2. Variables utiles
|
||||||
let isPlaying = false;
|
let isPlaying = false;
|
||||||
let isLooping = false;
|
let isLooping = false;
|
||||||
|
let idleTimeout = null;
|
||||||
|
let reverseInterval = null;
|
||||||
|
|
||||||
// 3. Variables pour calculer la vitesse de rotation
|
// 3. Variables pour calculer la vitesse de rotation
|
||||||
let lastPosition = null;
|
let lastPosition = null;
|
||||||
@ -24,24 +26,37 @@ socket.on('position', (position) => {
|
|||||||
|
|
||||||
if (lastPosition !== null && lastTime !== null) {
|
if (lastPosition !== null && lastTime !== null) {
|
||||||
const deltaPos = position - lastPosition;
|
const deltaPos = position - lastPosition;
|
||||||
const deltaTime = (now - lastTime) / 1000; // en secondes
|
const deltaTime = (now - lastTime) / 1000;
|
||||||
|
|
||||||
const speed = deltaPos / deltaTime; // ticks par seconde
|
const speed = deltaPos / deltaTime;
|
||||||
console.log('instant speed:', speed);
|
console.log('instant speed:', speed);
|
||||||
|
|
||||||
// Seuil minimal pour stopper la lecture si la balle ne tourne plus
|
clearTimeout(idleTimeout);
|
||||||
|
|
||||||
if (Math.abs(speed) < 2) {
|
if (Math.abs(speed) < 2) {
|
||||||
controlPlayback(0); // stop
|
stopPlayback();
|
||||||
} else {
|
} else {
|
||||||
// Mappe la vitesse vers une valeur de lecture entre 0.5 et 2
|
const isReverse = speed < 0;
|
||||||
let playbackSpeed = 1 + speed * 0.01; // facteur à ajuster selon ton encoder
|
|
||||||
playbackSpeed = Math.max(0.5, Math.min(2, playbackSpeed));
|
// Simuler reverse
|
||||||
controlPlayback(playbackSpeed);
|
if (isReverse) {
|
||||||
|
simulateReverse(Math.abs(speed));
|
||||||
|
} else {
|
||||||
|
stopReverse();
|
||||||
|
let playbackSpeed = 1 + speed * 0.01;
|
||||||
|
playbackSpeed = Math.max(0.5, Math.min(2, playbackSpeed));
|
||||||
|
controlPlayback(playbackSpeed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lastPosition = position;
|
lastPosition = position;
|
||||||
lastTime = now;
|
lastTime = now;
|
||||||
|
|
||||||
|
// Détecter l'inactivité : si pas de mise à jour pendant 300ms → stop
|
||||||
|
idleTimeout = setTimeout(() => {
|
||||||
|
stopPlayback();
|
||||||
|
}, 300);
|
||||||
});
|
});
|
||||||
|
|
||||||
// 5. Fonctions
|
// 5. Fonctions
|
||||||
@ -77,7 +92,9 @@ function setProgress(e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fonction pour régler la lecture selon la vitesse
|
// Fonction pour régler la lecture selon la vitesse
|
||||||
|
|
||||||
function controlPlayback(speed) {
|
function controlPlayback(speed) {
|
||||||
|
stopReverse(); // On stoppe le reverse si actif
|
||||||
if (speed > 0) {
|
if (speed > 0) {
|
||||||
if (!isPlaying) {
|
if (!isPlaying) {
|
||||||
audio.play();
|
audio.play();
|
||||||
@ -85,13 +102,42 @@ function controlPlayback(speed) {
|
|||||||
isPlaying = true;
|
isPlaying = true;
|
||||||
}
|
}
|
||||||
audio.playbackRate = speed;
|
audio.playbackRate = speed;
|
||||||
} else {
|
}
|
||||||
if (isPlaying) {
|
}
|
||||||
audio.pause();
|
|
||||||
vinyl.style.animationPlayState = 'paused';
|
function stopPlayback() {
|
||||||
isPlaying = false;
|
audio.pause();
|
||||||
|
vinyl.style.animationPlayState = 'paused';
|
||||||
|
isPlaying = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function simulateReverse(speed) {
|
||||||
|
// vitesse = ticks/sec → convertir en vitesse de recul
|
||||||
|
const reverseSpeed = Math.min(speed * 0.01, 2); // seconds per step
|
||||||
|
|
||||||
|
if (!reverseInterval) {
|
||||||
|
reverseInterval = setInterval(() => {
|
||||||
|
if (audio.currentTime > 0.05) {
|
||||||
|
audio.currentTime -= reverseSpeed * 0.1;
|
||||||
|
vinyl.style.animationPlayState = 'running';
|
||||||
|
} else {
|
||||||
|
stopPlayback();
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
|
|
||||||
|
if (!isPlaying) {
|
||||||
|
isPlaying = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
audio.pause(); // on met en pause le vrai son pour éviter conflit
|
||||||
|
}
|
||||||
|
|
||||||
|
function stopReverse() {
|
||||||
|
if (reverseInterval) {
|
||||||
|
clearInterval(reverseInterval);
|
||||||
|
reverseInterval = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Événements
|
// 6. Événements
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user