diff --git a/README.md b/README.md index 97168c9e8ebd16b9e3e2b73dbdfaaf9e901dd493..df005081c419e9be5ccc1d0b87f1c2a212195e04 100644 --- a/README.md +++ b/README.md @@ -4,98 +4,171 @@ Ce projet représente un script Python capable de reproduire fidèlement le comp ## Fonctionnalités -- **Simulation authentique** : Reproduit le comportement réaliste des radios GTA V -- **Stations multiples** : Support de plusieurs stations (Non-Stop-Pop, SilverLake, Funk, etc.) -- **Contenu varié** : Musique, publicités, actualités, identifiants de station -- **Séquençage intelligent** : Utilise des patterns configurables pour organiser le contenu -- **Gestion de la répétition** : Évite la répétition du contenu déjà joué -- **Contrôle du volume** : Volume ajustable pour tous les types de contenu +- **Simulation authentique** : Reproduit le comportement réaliste des radios GTA V avec patterns de diffusion +- **Interface graphique** : Interface Tkinter avec contrôles en temps réel et suivi de progression +- **Stations multiples** : Support de plusieurs stations (Non-Stop-Pop, SilverLake, Funk) avec changement dynamique +- **Contenu varié** : Musique, publicités, actualités, identifiants de station, segments DJ +- **Séquençage intelligent** : Patterns configurables pour organiser le contenu de manière réaliste +- **Gestion de la répétition** : Évite la répétition avec système de listes recyclables +- **Système d'intros** : Overlays d'introduction sur les musiques avec timing aléatoire +- **Contrôle du volume** : Volume ajustable avec intégration VLC +- **Multi-threading** : Interface non-bloquante avec lecture audio en arrière-plan ## Architecture ### Composants principaux - **radio.py** : Point d'entrée principal et implémentation de la classe Radio - - Gère la logique de lecture des stations - - Traite les séquences de contenu basées sur des patterns - - Suit le contenu joué pour éviter les répétitions - - Sélectionne aléatoirement parmi les stations disponibles - -- **defs.py** : Gestion des fichiers audio et utilitaires de lecture - - Découverte de fichiers via des patterns regex - - Lecture audio basée sur VLC avec contrôle du volume - - Fonctionnalité d'overlay intro/musique avec timing différé - - Filtrage des fichiers audio par extension - -- **config.py** : Gestion de la configuration (copier depuis example.config.py) - - Patterns audio et probabilités - - Patterns regex de correspondance de fichiers - - Paramètres de lecture (volume, délais, extensions de fichiers) + - Gère la logique de lecture avec séquençage basé sur des patterns + - Suit le contenu joué avec listes multiples pour éviter les répétitions + - Implémente le changement de station avec réinitialisation d'état + - Intégration GUI pour mises à jour temps réel et contrôles + - Exécution en thread séparé quand l'interface graphique est présente + +- **radio_gui.py** : Interface graphique Tkinter + - Affichage de progression en temps réel avec formatage temporel + - Contrôles de changement de station et ajustement de volume + - Retour visuel pour piste courante, type et pattern + - Suivi de session et statistiques de lecture + - Mises à jour threadées pour éviter le blocage de l'interface + +- **defs.py** : Gestion des fichiers audio et utilitaires de lecture VLC + - Découverte de fichiers via patterns regex configurables + - Intégration du lecteur média VLC avec contrôle du volume + - Overlay intro/musique avec délais de timing aléatoires + - Suivi de progression et gestion d'état pour intégration GUI + - Système double lecteur pour superposition intro et piste principale + +- **config.py** : Gestion de la configuration + - Patterns regex complexes pour correspondance de types de contenu + - Patterns de lecture configurables pour musique et pubs/actualités + - Paramètres de volume, timing et probabilités + - Définitions d'extensions de fichiers et structure de répertoires ## Organisation des fichiers audio -Le projet attend une structure de répertoires spécifique avec les fichiers audio organisés par station de radio : +Le projet attend une structure de répertoires stricte avec des sous-répertoires catégorisés : ``` ├── non-stop-pop/ # Station Non-Stop-Pop -├── silverlake/ # Station SilverLake -├── funk/ # Station Funk +│ ├── id_XX/ # Identifiants de station +│ ├── general/ # Contenu général/commentaires DJ +│ ├── mono_solo_XX/ # Segments solo +│ ├── intro/ # Fichiers d'introduction pour musiques +│ ├── time/ # Segments temporels (matin/soir) +│ ├── to/ # Transitions vers pubs/actualités +│ └── [musiques]/ # Dossiers individuels pour chaque chanson +├── silverlake/ # Station SilverLake (même structure) +├── funk/ # Station Funk (même structure) ├── radio-adverts/ # Publicités partagées +│ └── mono_adXXX_*/ # Publicités numérotées └── radio-news/ # Actualités partagées + └── mono_news_XX/ # Actualités numérotées ``` -Chaque station contient des sous-répertoires catégorisés pour différents types de contenu. +### Système d'intros +Chaque station possède un dossier `intro/` contenant des fichiers d'introduction spécifiques aux chansons, nommés selon le pattern `NOM_CHANSON_01.wav`, `NOM_CHANSON_02.wav`. -## Types de contenu et patterns +## Séquençage basé sur des patterns -- **IDs** : Clips d'identification de station -- **General** : Contenu général de station/commentaires DJ -- **Mono Solos** : Courts segments solo -- **Music** : Chansons complètes avec overlays d'intro optionnels -- **Ads** : Publicités depuis le pool partagé -- **News** : Segments d'actualités depuis le pool partagé +Le système utilise des patterns configurables définis dans `config.py` : -Le système utilise des patterns configurables pour séquencer le contenu de manière réaliste (ex: "ID, GENERAL, MUSIC" ou "AD, AD, NEWS"). +- **Patterns musicaux** : Séquences comme "ID, GENERAL, MUSIC" ou "ID, MUSIC" +- **Patterns pubs/actualités** : Séquences comme "AD, AD, NEWS" ou "MONO_SOLO, AD" +- **Types de contenu** : IDs, General, Mono Solos, Music, Ads, News +- **Correspondance regex** : Patterns complexes pour catégoriser automatiquement les fichiers + +### Architecture de gestion d'état + +- **Suivi de lecture** : Listes séparées pour musiques, pubs, actualités, mono solos joués +- **Recyclage des listes** : Quand tout le contenu est joué, les listes se réinitialisent +- **Changement de station** : Préserve l'état global pubs/actualités mais réinitialise le contenu spécifique à la station +- **Threading** : Mises à jour GUI et lecture audio dans des threads séparés ## Installation et utilisation -### Prérequis +### Prérequis et installation ```bash # Installer les dépendances pip install -r requirements.txt ``` -### Configuration +**Dépendances système :** +- **Lecteur VLC** : Doit être installé sur le système pour que python-vlc fonctionne +- **Python 3.x** avec tkinter (généralement inclus) + +### Modes d'exécution ```bash -# Copier le fichier de configuration (requis avant la première exécution) -cp example.config.py config.py +# Mode GUI (par défaut) - Interface graphique complète +python radio.py + +# Mode console (modifier la section main dans radio.py) +python -c " +import random +from radio import Radio +radios = ['non-stop-pop', 'silverlake', 'funk'] +radio = Radio(random.choice(radios)) +radio.startRadio() +" ``` -Éditez `config.py` pour personnaliser : -- `debug` : Activer/désactiver la sortie de débogage -- `volume` : Volume audio par défaut (0-100) -- `adsProbability` : Chance de jouer des pubs/actualités entre les musiques -- `musicPatterns` : Patterns de séquence pour les segments musicaux -- `adsAndNewsPatterns` : Patterns de séquence pour les pubs/actualités +### Gestion de la configuration -### Exécution +Le système de configuration utilise des patterns regex complexes qui correspondent à la structure des fichiers audio de GTA V : -```bash -# Lancer la simulation radio -python radio.py -``` +**Paramètres clés de config.py :** +- `debug = True/False` : Active la sortie détaillée en console +- `volume = 75` : Volume audio (0-100) +- `adsProbability = 0.25` : Probabilité de pubs/actualités entre les blocs musicaux +- `musicMinIntroDelay/musicMaxIntroDelay` : Timing pour overlays d'intro (5-15 secondes) +- `filesExtension = ".wav"` : Format des fichiers audio + +**Patterns regex critiques :** +- `idPattern` : Correspond aux fichiers ID de station (ID_01, ID_02, etc.) +- `monoSoloPattern` : Correspond aux segments DJ solo +- `generalPattern` : Correspond au contenu général de station +- `musicPatten` : Pattern d'exclusion complexe pour les fichiers musicaux +- `musicIntro` : Pattern pour les fichiers d'intro correspondant aux chansons spécifiques + +### Architecture threading et GUI + +- **Thread principal** : Exécute la boucle d'événements Tkinter GUI +- **Thread radio** : Exécute `radio.startRadio()` avec `daemon=True` +- **Thread de mise à jour** : Mises à jour GUI toutes les 100ms pour suivi de progression +- **Intégration VLC** : Utilise `python-vlc` pour lecture audio multiplateforme + +## Exigences de structure des fichiers + +Les fichiers audio doivent suivre les conventions de nommage de GTA V : +- **Dossiers de station** : minuscules avec tirets (`non-stop-pop`) +- **Dossiers de contenu** : basés sur les catégories (`id_01/`, `general/`, `mono_solo_XX/`) +- **Fichiers audio** : majuscules avec underscores (`NOM_PISTE.wav`) +- **Fichiers d'intro** : `NOM_CHANSON_01.wav`, `NOM_CHANSON_02.wav` dans le dossier `intro/` + +## Débogage et développement + +Activez le mode debug dans `config.py` pour voir : +- Patterns sélectionnés pour chaque séquence de lecture +- Chemins des fichiers en cours de lecture +- Timing et délais des overlays d'intro +- Événements de changement de station -## Exigences des fichiers +### Dépendances et prérequis -- Python avec le module `vlc` pour la lecture audio -- Les fichiers audio doivent correspondre à `filesExtension` configuré (défaut : .wav) -- La structure des répertoires doit correspondre à l'organisation attendue +- **python-vlc** : Bindings du lecteur média VLC multiplateforme +- **tkinter** : Framework GUI intégré (généralement inclus avec Python) +- **threading** : Module intégré pour exécution concurrente +- **Lecteur média VLC** : Doit être installé sur le système pour que python-vlc fonctionne ## Développement -Le projet suit une architecture modulaire permettant une extension facile avec de nouvelles stations et types de contenu. Les patterns de configuration permettent un contrôle fin du comportement de diffusion. +Le projet suit une architecture modulaire avec threading permettant : +- Extension facile avec de nouvelles stations et types de contenu +- Patterns de configuration pour contrôle fin du comportement de diffusion +- Interface non-bloquante avec lecture audio en arrière-plan +- Système de state management sophistiqué pour éviter les répétitions ## Licence