From 051d0431ce034f999c7e591576a17a4e7a611d58 Mon Sep 17 00:00:00 2001 From: Benoit Date: Tue, 23 Dec 2025 09:04:27 +0100 Subject: [PATCH] WIP Player waveform ok, autoplay, download --- frontend/app/page.tsx | 12 +-- frontend/components/AudioPlayer.tsx | 141 +++++++++++++++------------- 2 files changed, 82 insertions(+), 71 deletions(-) diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx index 6c90903..d719847 100644 --- a/frontend/app/page.tsx +++ b/frontend/app/page.tsx @@ -89,7 +89,7 @@ export default function Home() { {/* Main Content */} -
+
{/* Stats */} {stats && (
@@ -283,12 +283,10 @@ export default function Home() {
- {/* Fixed Audio Player at bottom */} - {currentTrack && ( -
- setCurrentTrack(null)} /> -
- )} + {/* Fixed Audio Player at bottom - always visible */} +
+ +
) } diff --git a/frontend/components/AudioPlayer.tsx b/frontend/components/AudioPlayer.tsx index 44390ff..92edb60 100644 --- a/frontend/components/AudioPlayer.tsx +++ b/frontend/components/AudioPlayer.tsx @@ -5,10 +5,9 @@ import type { Track } from "@/lib/types" interface AudioPlayerProps { track: Track | null - onClose?: () => void } -export default function AudioPlayer({ track, onClose }: AudioPlayerProps) { +export default function AudioPlayer({ track }: AudioPlayerProps) { const [isPlaying, setIsPlaying] = useState(false) const [currentTime, setCurrentTime] = useState(0) const [duration, setDuration] = useState(0) @@ -16,7 +15,6 @@ export default function AudioPlayer({ track, onClose }: AudioPlayerProps) { const [isMuted, setIsMuted] = useState(false) const [waveformPeaks, setWaveformPeaks] = useState([]) const [isLoadingWaveform, setIsLoadingWaveform] = useState(false) - const [showVolumeSlider, setShowVolumeSlider] = useState(false) const audioRef = useRef(null) const progressRef = useRef(null) @@ -30,12 +28,18 @@ export default function AudioPlayer({ track, onClose }: AudioPlayerProps) { return } - setIsPlaying(false) setCurrentTime(0) loadWaveform(track.id) if (audioRef.current) { audioRef.current.load() + // Autoplay when track loads + audioRef.current.play().then(() => { + setIsPlaying(true) + }).catch((error: unknown) => { + console.error("Autoplay failed:", error) + setIsPlaying(false) + }) } }, [track?.id]) @@ -77,7 +81,7 @@ export default function AudioPlayer({ track, onClose }: AudioPlayerProps) { } const togglePlay = () => { - if (!audioRef.current) return + if (!audioRef.current || !track) return if (isPlaying) { audioRef.current.pause() @@ -113,7 +117,7 @@ export default function AudioPlayer({ track, onClose }: AudioPlayerProps) { } const handleWaveformClick = (e: React.MouseEvent) => { - if (!audioRef.current || !progressRef.current) return + if (!audioRef.current || !progressRef.current || !track) return const rect = progressRef.current.getBoundingClientRect() const x = e.clientX - rect.left @@ -131,28 +135,19 @@ export default function AudioPlayer({ track, onClose }: AudioPlayerProps) { return `${mins}:${secs.toString().padStart(2, "0")}` } - const getVolumeIcon = () => { - if (isMuted || volume === 0) return "🔇" - if (volume < 0.5) return "🔉" - return "🔊" - } - - if (!track) { - return null - } - const progress = duration > 0 ? (currentTime / duration) * 100 : 0 return ( -
+
{/* Hidden audio element */} -