#!/usr/bin/env python3 """ Script sans dépendances externes (bibliothèque standard uniquement). Nécessite que la commande `sox` (ou `soxi`) soit installée sur le système. Fonctionnement : - Liste tous les fichiers .wav / .WAV du répertoire courant, triés par ordre alphabétique. - Pour chacun, récupère la durée en millisecondes via sox. - Écrit dans un fichier texte, une ligne par fichier : {chemin/nom_de_fichier_complet} {durée_en_millisecondes}; Utilisation : - à utiliser avec un patch pure data et l'objet [text] - placer ce script dans le répertoire du patch pure data - indiquer le chemin dans la variable chemin ci-dessous - copier le contenu de la liste créée dans l'objet [text define -k liste] """ import os import subprocess import sys # Chemin du dossier à traiter (à adapter si besoin) chemin = "./sons" # Nom du fichier texte de sortie fichier_sortie = "listesons.txt" def get_duree_ms(chemin_fichier): """ Récupère la durée d'un fichier wav en millisecondes en utilisant sox (soxi). Retourne un int (ms) ou None en cas d'erreur. """ try: # soxi -D renvoie la durée en secondes (float) sur stdout resultat = subprocess.run( ["soxi", "-D", chemin_fichier], capture_output=True, text=True, check=True, ) duree_secondes = float(resultat.stdout.strip()) return round(duree_secondes * 1000) except (subprocess.CalledProcessError, FileNotFoundError, ValueError) as e: print(f"Erreur lors du traitement de {chemin_fichier}: {e}", file=sys.stderr) return None def main(): # Liste des fichiers .wav / .WAV dans le répertoire "chemin" fichiers = [ f for f in os.listdir(chemin) if f.lower().endswith(".wav") and os.path.isfile(os.path.join(chemin, f)) ] # Tri par ordre alphabétique fichiers.sort() with open(fichier_sortie, "w", encoding="utf-8") as sortie: for nom_fichier in fichiers: chemin_complet = os.path.join(chemin, nom_fichier) duree_ms = get_duree_ms(chemin_complet) if duree_ms is not None: sortie.write(f"{chemin_complet} {duree_ms};\n") print(f"Terminé. Résultats écrits dans {fichier_sortie}") if __name__ == "__main__": main()