Skip to content
Snippets Groups Projects
Commit 168dc2d7 authored by Sofiane Lasri's avatar Sofiane Lasri
Browse files

updated readme

parent 43872c7c
No related branches found
No related tags found
No related merge requests found
Pipeline #1102 canceled
...@@ -4,98 +4,171 @@ Ce projet représente un script Python capable de reproduire fidèlement le comp ...@@ -4,98 +4,171 @@ Ce projet représente un script Python capable de reproduire fidèlement le comp
## Fonctionnalités ## Fonctionnalités
- **Simulation authentique** : Reproduit le comportement réaliste des radios GTA V - **Simulation authentique** : Reproduit le comportement réaliste des radios GTA V avec patterns de diffusion
- **Stations multiples** : Support de plusieurs stations (Non-Stop-Pop, SilverLake, Funk, etc.) - **Interface graphique** : Interface Tkinter avec contrôles en temps réel et suivi de progression
- **Contenu varié** : Musique, publicités, actualités, identifiants de station - **Stations multiples** : Support de plusieurs stations (Non-Stop-Pop, SilverLake, Funk) avec changement dynamique
- **Séquençage intelligent** : Utilise des patterns configurables pour organiser le contenu - **Contenu varié** : Musique, publicités, actualités, identifiants de station, segments DJ
- **Gestion de la répétition** : Évite la répétition du contenu déjà joué - **Séquençage intelligent** : Patterns configurables pour organiser le contenu de manière réaliste
- **Contrôle du volume** : Volume ajustable pour tous les types de contenu - **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 ## Architecture
### Composants principaux ### Composants principaux
- **radio.py** : Point d'entrée principal et implémentation de la classe Radio - **radio.py** : Point d'entrée principal et implémentation de la classe Radio
- Gère la logique de lecture des stations - Gère la logique de lecture avec séquençage basé sur des patterns
- Traite les séquences de contenu basées sur des patterns - Suit le contenu joué avec listes multiples pour éviter les répétitions
- Suit le contenu joué pour éviter les répétitions - Implémente le changement de station avec réinitialisation d'état
- Sélectionne aléatoirement parmi les stations disponibles - 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
- **defs.py** : Gestion des fichiers audio et utilitaires de lecture
- Découverte de fichiers via des patterns regex - **radio_gui.py** : Interface graphique Tkinter
- Lecture audio basée sur VLC avec contrôle du volume - Affichage de progression en temps réel avec formatage temporel
- Fonctionnalité d'overlay intro/musique avec timing différé - Contrôles de changement de station et ajustement de volume
- Filtrage des fichiers audio par extension - Retour visuel pour piste courante, type et pattern
- Suivi de session et statistiques de lecture
- **config.py** : Gestion de la configuration (copier depuis example.config.py) - Mises à jour threadées pour éviter le blocage de l'interface
- Patterns audio et probabilités
- Patterns regex de correspondance de fichiers - **defs.py** : Gestion des fichiers audio et utilitaires de lecture VLC
- Paramètres de lecture (volume, délais, extensions de fichiers) - 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 ## 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 ├── non-stop-pop/ # Station Non-Stop-Pop
├── silverlake/ # Station SilverLake │ ├── id_XX/ # Identifiants de station
├── funk/ # Station Funk │ ├── 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 ├── radio-adverts/ # Publicités partagées
│ └── mono_adXXX_*/ # Publicités numérotées
└── radio-news/ # Actualités partagé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 Le système utilise des patterns configurables définis dans `config.py` :
- **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 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 ## Installation et utilisation
### Prérequis ### Prérequis et installation
```bash ```bash
# Installer les dépendances # Installer les dépendances
pip install -r requirements.txt 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 ```bash
# Copier le fichier de configuration (requis avant la première exécution) # Mode GUI (par défaut) - Interface graphique complète
cp example.config.py config.py 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 : ### Gestion de la configuration
- `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
### Exécution Le système de configuration utilise des patterns regex complexes qui correspondent à la structure des fichiers audio de GTA V :
```bash **Paramètres clés de config.py :**
# Lancer la simulation radio - `debug = True/False` : Active la sortie détaillée en console
python radio.py - `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 - **python-vlc** : Bindings du lecteur média VLC multiplateforme
- Les fichiers audio doivent correspondre à `filesExtension` configuré (défaut : .wav) - **tkinter** : Framework GUI intégré (généralement inclus avec Python)
- La structure des répertoires doit correspondre à l'organisation attendue - **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 ## 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 ## Licence
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment