From f236665829c52615fbe672868bdd2ef5512fe801 Mon Sep 17 00:00:00 2001 From: el-yazide mohamed Date: Sat, 7 Jun 2025 20:20:14 +0200 Subject: [PATCH] mpg123 --- node-server/assets/muddy_files.html | 4 +- node-server/assets/script.js | 64 ++++++++++++++++++++++++++++- node-server/server.js | 55 ++++++++++++++++++++++++- 3 files changed, 118 insertions(+), 5 deletions(-) diff --git a/node-server/assets/muddy_files.html b/node-server/assets/muddy_files.html index 2c5bf7f..f89b770 100644 --- a/node-server/assets/muddy_files.html +++ b/node-server/assets/muddy_files.html @@ -43,9 +43,9 @@ - + data-reverse-src="muddy_files_reverse.mp3"> --> diff --git a/node-server/assets/script.js b/node-server/assets/script.js index be921a6..aba1a24 100644 --- a/node-server/assets/script.js +++ b/node-server/assets/script.js @@ -19,7 +19,8 @@ const rotationsPerTrack = 3; // tours complets du vinyle sur toute la durée let currentRotation = 0; // rotation en degrés actuelle du vinyle // 3. Connexion Socket.io -const socket = io(); + +/* const socket = io(); socket.on('position', (position) => { const now = Date.now(); @@ -147,4 +148,65 @@ audio.addEventListener('ended', () => { } else { isPlaying = false; } +}); */ + +const socket = io(); + +let isPlaying = false; + +const rotationsPerTrack = 3; +let currentRotation = 0; + +// Valeurs fictives pour durée, car tu ne peux plus récupérer la durée côté client +const DURATION = 96; // durée en secondes (1:36) + +// Simulation simple du temps qui passe côté client pour la rotation du vinyle +let currentTime = 0; +let animationFrameId; + +function playTrack() { + socket.emit('play-sound', 'muddy_files.mp3'); + isPlaying = true; + startVinylRotation(); +} + +function stopTrack() { + socket.emit('stop-sound'); + isPlaying = false; + stopVinylRotation(); + currentTime = 0; + updateVinylRotation(); +} + +function startVinylRotation() { + function update() { + if (isPlaying) { + currentTime += 0.1; // avance temps fictif + if (currentTime > DURATION) { + currentTime = 0; // boucle simple + } + updateVinylRotation(); + animationFrameId = requestAnimationFrame(update); + } + } + update(); +} + +function stopVinylRotation() { + cancelAnimationFrame(animationFrameId); +} + +function updateVinylRotation() { + currentRotation = (currentTime / DURATION) * 360 * rotationsPerTrack; + vinyl.style.transform = `rotate(${currentRotation}deg)`; +} + +// Exemple : lancer / arrêter à chaque clic +vinyl.addEventListener('click', () => { + if (isPlaying) { + stopTrack(); + } else { + playTrack(); + } }); + diff --git a/node-server/server.js b/node-server/server.js index 4f13c82..9126705 100644 --- a/node-server/server.js +++ b/node-server/server.js @@ -1,4 +1,4 @@ -const express = require('express'); +/* const express = require('express'); const { createServer } = require('node:http'); // socket const { Server } = require('socket.io'); @@ -69,4 +69,55 @@ io.on('connection', (socket) => { server.listen(port, () => { console.log(`Example app listening on port ${port}`) -}) \ No newline at end of file +}) */ + +const express = require('express'); +const http = require('http'); +const socketIo = require('socket.io'); +const player = require('play-sound')({ player: 'mpg123' }); // forcer mpg123 + +const app = express(); +const server = http.createServer(app); +const io = socketIo(server); + +app.use(express.static('public')); // dossier public pour fichiers front + +let currentAudioProcess = null; + +io.on('connection', (socket) => { + console.log('Client connecté'); + + socket.on('play-sound', (filename) => { + console.log('Lecture demandée:', filename); + + // Stopper si un son est déjà joué + if (currentAudioProcess) { + currentAudioProcess.kill(); + currentAudioProcess = null; + } + + // Lancer la lecture avec mpg123 + currentAudioProcess = player.play(`public/sounds/${filename}`, (err) => { + if (err && !err.killed) { + console.error('Erreur lecture audio:', err); + } + currentAudioProcess = null; + }); + }); + + socket.on('stop-sound', () => { + if (currentAudioProcess) { + currentAudioProcess.kill(); + currentAudioProcess = null; + console.log('Lecture arrêtée'); + } + }); + + socket.on('disconnect', () => { + console.log('Client déconnecté'); + }); +}); + +server.listen(3000, () => { + console.log('Serveur démarré sur http://localhost:3000'); +});