Player full fonctionnel !

This commit is contained in:
2025-12-23 09:27:01 +01:00
parent 051d0431ce
commit e567a2c5ab

View File

@@ -49,19 +49,30 @@ export default function AudioPlayer({ track }: AudioPlayerProps) {
if (!audio) return
const updateTime = () => setCurrentTime(audio.currentTime)
const updateDuration = () => setDuration(audio.duration)
const updateDuration = () => {
if (audio.duration && isFinite(audio.duration)) {
setDuration(audio.duration)
}
}
const handleEnded = () => setIsPlaying(false)
audio.addEventListener("timeupdate", updateTime)
audio.addEventListener("loadedmetadata", updateDuration)
audio.addEventListener("durationchange", updateDuration)
audio.addEventListener("ended", handleEnded)
// Initialize duration if already loaded
if (audio.duration && isFinite(audio.duration)) {
setDuration(audio.duration)
}
return () => {
audio.removeEventListener("timeupdate", updateTime)
audio.removeEventListener("loadedmetadata", updateDuration)
audio.removeEventListener("durationchange", updateDuration)
audio.removeEventListener("ended", handleEnded)
}
}, [])
}, [track?.id])
const loadWaveform = async (trackId: string) => {
setIsLoadingWaveform(true)
@@ -195,24 +206,26 @@ export default function AudioPlayer({ track }: AudioPlayerProps) {
</div>
) : waveformPeaks.length > 0 ? (
<div className="flex items-center h-full w-full gap-[1px] px-1">
{waveformPeaks.map((peak: number, index: number) => {
const isPlayed = (index / waveformPeaks.length) * 100 <= progress
{waveformPeaks
.filter((_: number, index: number) => index % 4 === 0) // Take every 4th peak to reduce from 800 to 200
.map((peak: number, index: number) => {
const originalIndex = index * 4
const isPlayed = (originalIndex / waveformPeaks.length) * 100 <= progress
return (
<div
key={index}
className="flex items-center justify-center"
className="flex-1 flex items-center justify-center"
style={{
width: "2px",
minWidth: "1px",
maxWidth: "4px",
height: "100%",
flexShrink: 0
}}
>
<div
className={`rounded-sm transition-colors ${
className={`w-full rounded-sm transition-colors ${
isPlayed ? "bg-orange-500" : "bg-gray-400"
}`}
style={{
width: "2px",
height: `${Math.max(peak * 70, 4)}%`,
}}
/>