bis
This commit is contained in:
parent
9033c8ad20
commit
4eadf7dc7e
@ -1,6 +1,5 @@
|
|||||||
// 1. Sélection des éléments du DOM
|
// 1. Sélection des éléments du DOM
|
||||||
const vinyl = document.getElementById('vinyl');
|
const vinyl = document.getElementById('vinyl');
|
||||||
const originalSrc = audio.getAttribute('src');
|
|
||||||
const audio = document.getElementById('audio');
|
const audio = document.getElementById('audio');
|
||||||
const progress = document.getElementById('progress');
|
const progress = document.getElementById('progress');
|
||||||
const currentTimeEl = document.getElementById('currentTime');
|
const currentTimeEl = document.getElementById('currentTime');
|
||||||
@ -15,25 +14,26 @@ let isLooping = false;
|
|||||||
let idleTimeout = null;
|
let idleTimeout = null;
|
||||||
let reverseInterval = null;
|
let reverseInterval = null;
|
||||||
let reverseAudioLoaded = false;
|
let reverseAudioLoaded = false;
|
||||||
const reverseSrc = audio.dataset.reverseSrc;
|
|
||||||
|
|
||||||
|
// 3. Variables pour vitesse
|
||||||
// 3. Variables pour calculer la vitesse de rotation
|
|
||||||
let lastPosition = null;
|
let lastPosition = null;
|
||||||
let lastTime = null;
|
let lastTime = null;
|
||||||
|
|
||||||
// 4. Connexion Socket.io
|
// 4. Connexion socket
|
||||||
const socket = io();
|
const socket = io();
|
||||||
|
|
||||||
|
// 5. Sauvegarder les sources
|
||||||
|
const originalSrc = audio.getAttribute('src');
|
||||||
|
const reverseSrc = audio.dataset.reverseSrc || null;
|
||||||
|
|
||||||
|
// 6. SOCKET – gestion de la position envoyée
|
||||||
socket.on('position', (position) => {
|
socket.on('position', (position) => {
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
|
|
||||||
if (lastPosition !== null && lastTime !== null) {
|
if (lastPosition !== null && lastTime !== null) {
|
||||||
const deltaPos = position - lastPosition;
|
const deltaPos = position - lastPosition;
|
||||||
const deltaTime = (now - lastTime) / 1000;
|
const deltaTime = (now - lastTime) / 1000;
|
||||||
|
|
||||||
const speed = deltaPos / deltaTime;
|
const speed = deltaPos / deltaTime;
|
||||||
console.log('instant speed:', speed);
|
|
||||||
|
|
||||||
clearTimeout(idleTimeout);
|
clearTimeout(idleTimeout);
|
||||||
|
|
||||||
@ -42,30 +42,27 @@ socket.on('position', (position) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const isReverse = speed < 0;
|
const isReverse = speed < 0;
|
||||||
|
|
||||||
// Simuler reverse
|
if (isReverse) {
|
||||||
if (isReverse) {
|
simulateReverse(Math.abs(speed));
|
||||||
simulateReverse(Math.abs(speed));
|
} else {
|
||||||
} else {
|
stopReverse();
|
||||||
stopReverse();
|
let playbackSpeed = 1 + speed * 0.0003;
|
||||||
let playbackSpeed = 1 + speed * 0.0003;
|
playbackSpeed = Math.max(0.5, Math.min(1.5, playbackSpeed));
|
||||||
playbackSpeed = Math.max(0.5, Math.min(1.5, playbackSpeed));
|
controlPlayback(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(() => {
|
idleTimeout = setTimeout(() => {
|
||||||
stopPlayback();
|
stopPlayback();
|
||||||
}, 300);
|
}, 300);
|
||||||
});
|
});
|
||||||
|
|
||||||
// 5. Fonctions
|
// 7. Fonctions
|
||||||
|
|
||||||
function togglePlay() {
|
function togglePlay() {
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
@ -97,10 +94,8 @@ function setProgress(e) {
|
|||||||
audio.currentTime = (clickX / width) * duration;
|
audio.currentTime = (clickX / width) * duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fonction pour régler la lecture selon la vitesse
|
|
||||||
|
|
||||||
function controlPlayback(speed) {
|
function controlPlayback(speed) {
|
||||||
stopReverse(); // On stoppe le reverse si actif
|
stopReverse();
|
||||||
if (speed > 0) {
|
if (speed > 0) {
|
||||||
if (!isPlaying) {
|
if (!isPlaying) {
|
||||||
audio.play();
|
audio.play();
|
||||||
@ -117,18 +112,11 @@ function stopPlayback() {
|
|||||||
isPlaying = false;
|
isPlaying = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Simule la lecture en reverse via décrémentation du currentTime
|
||||||
function simulateReverse(speed) {
|
function simulateReverse(speed) {
|
||||||
const reverseSpeed = Math.min(speed * 0.01, 2); // seconds per step
|
const reverseSpeed = Math.min(speed * 0.01, 2);
|
||||||
|
|
||||||
if (!reverseAudioLoaded && reverseSrc) {
|
if (!reverseSrc) return;
|
||||||
audio.src = reverseSrc;
|
|
||||||
audio.load();
|
|
||||||
reverseAudioLoaded = true;
|
|
||||||
audio.addEventListener('loadedmetadata', () => {
|
|
||||||
audio.currentTime = audio.duration - 0.1; // start from the end
|
|
||||||
}, { once: true });
|
|
||||||
return; // attend que le fichier soit chargé
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reverseInterval) {
|
if (!reverseInterval) {
|
||||||
reverseInterval = setInterval(() => {
|
reverseInterval = setInterval(() => {
|
||||||
@ -140,12 +128,20 @@ function simulateReverse(speed) {
|
|||||||
}
|
}
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
||||||
if (!isPlaying) {
|
if (!reverseAudioLoaded) {
|
||||||
isPlaying = true;
|
const currentTime = audio.currentTime;
|
||||||
|
audio.src = reverseSrc;
|
||||||
|
audio.load();
|
||||||
|
audio.addEventListener('loadedmetadata', () => {
|
||||||
|
const newTime = Math.min(currentTime, audio.duration - 0.1);
|
||||||
|
audio.currentTime = newTime;
|
||||||
|
}, { once: true });
|
||||||
|
reverseAudioLoaded = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
audio.pause(); // on met en pause le vrai son pour éviter conflit
|
isPlaying = true;
|
||||||
|
audio.pause();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function stopReverse() {
|
function stopReverse() {
|
||||||
@ -165,9 +161,7 @@ function stopReverse() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 8. Événements utilisateur
|
||||||
|
|
||||||
// 6. Événements
|
|
||||||
|
|
||||||
vinyl.addEventListener('click', togglePlay);
|
vinyl.addEventListener('click', togglePlay);
|
||||||
audio.addEventListener('timeupdate', updateProgress);
|
audio.addEventListener('timeupdate', updateProgress);
|
||||||
@ -198,4 +192,4 @@ audio.addEventListener('ended', () => {
|
|||||||
vinyl.style.animationPlayState = 'paused';
|
vinyl.style.animationPlayState = 'paused';
|
||||||
isPlaying = false;
|
isPlaying = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user