import io from mutagen import File as MutagenFile # Demande explicite : un son importé dans "Mes assets" ne doit jamais # dépasser 3 minutes (durée d'un effet sonore/d'une courte musique # d'ambiance — pas un morceau entier, voir l'action "son", # screens/rendering/collision_rules.py). MAX_AUDIO_SECONDS = 180 def validate_audio_duration(content: bytes, max_seconds: int = MAX_AUDIO_SECONDS) -> str | None: """Lit la durée d'un fichier audio (mp3/wav/ogg/m4a/... — mutagen détecte le format lui-même, pas besoin de le lui préciser) et renvoie un message d'erreur (français, prêt à afficher) si elle dépasse `max_seconds`, ou si le format n'a pas pu être reconnu du tout (repli prudent : un fichier illisible n'est jamais accepté silencieusement). Renvoie None si la durée est correcte.""" audio = MutagenFile(io.BytesIO(content)) if audio is None or audio.info is None or not getattr(audio.info, "length", None): return "Format audio non reconnu." duration = audio.info.length if duration > max_seconds: return f"Ce son dépasse {max_seconds // 60} minutes (durée : {int(duration)} secondes)." return None