Files
Audio-Classifier/COMMANDES.md
2025-11-27 17:43:52 +01:00

318 lines
6.7 KiB
Markdown

# 📝 Commandes Essentielles - Audio Classifier
## 🚀 Démarrage
### Lancer tous les services
```bash
cd "/Users/benoit/Documents/code/Audio Classifier"
docker-compose -f docker-compose.dev.yml up -d
```
### Vérifier le statut
```bash
docker-compose -f docker-compose.dev.yml ps
docker-compose -f docker-compose.dev.yml logs -f backend
```
### Lancer le frontend
```bash
cd frontend
npm run dev
```
## 🔍 Vérifications
### Health check
```bash
curl http://localhost:8001/health
```
### Stats base de données
```bash
curl http://localhost:8001/api/stats | python3 -m json.tool
```
### Liste des pistes
```bash
curl http://localhost:8001/api/tracks?limit=5 | python3 -m json.tool
```
## 🎵 Analyse audio
### Analyser un dossier
```bash
curl -X POST http://localhost:8001/api/analyze/folder \
-H "Content-Type: application/json" \
-d '{
"path": "/audio",
"recursive": true
}'
```
Retourne un `job_id`
### Vérifier la progression
```bash
# Remplacer JOB_ID par l'ID retourné
curl http://localhost:8001/api/analyze/status/JOB_ID | python3 -m json.tool
```
## 🔎 Recherche
### Recherche textuelle
```bash
curl "http://localhost:8001/api/search?q=jazz&limit=10" | python3 -m json.tool
```
### Filtrer par BPM
```bash
curl "http://localhost:8001/api/tracks?bpm_min=120&bpm_max=140&limit=20" | python3 -m json.tool
```
### Filtrer par genre
```bash
curl "http://localhost:8001/api/tracks?genre=electronic&limit=10" | python3 -m json.tool
```
### Filtrer par énergie
```bash
curl "http://localhost:8001/api/tracks?energy_min=0.7&limit=10" | python3 -m json.tool
```
## 🎧 Audio
### Stream (dans navigateur)
```bash
# Récupérer un track_id d'abord
TRACK_ID=$(curl -s "http://localhost:8001/api/tracks?limit=1" | python3 -c "import sys, json; print(json.load(sys.stdin)['tracks'][0]['id'])")
# Ouvrir dans navigateur
open "http://localhost:8001/api/audio/stream/$TRACK_ID"
```
### Download
```bash
curl -o music.mp3 "http://localhost:8001/api/audio/download/$TRACK_ID"
```
### Waveform data
```bash
curl "http://localhost:8001/api/audio/waveform/$TRACK_ID" | python3 -m json.tool
```
## 🗄️ Base de données
### Connexion psql
```bash
docker exec -it audio_classifier_db psql -U audio_user -d audio_classifier
```
### Queries utiles
```sql
-- Nombre total de pistes
SELECT COUNT(*) FROM audio_tracks;
-- 10 dernières pistes analysées
SELECT filename, tempo_bpm, key, genre_primary, mood_primary, analyzed_at
FROM audio_tracks
ORDER BY analyzed_at DESC
LIMIT 10;
-- Pistes par genre
SELECT genre_primary, COUNT(*)
FROM audio_tracks
WHERE genre_primary IS NOT NULL
GROUP BY genre_primary
ORDER BY COUNT(*) DESC;
-- Pistes rapides (> 140 BPM)
SELECT filename, tempo_bpm
FROM audio_tracks
WHERE tempo_bpm > 140
ORDER BY tempo_bpm DESC;
```
### Migrations
```bash
# Appliquer les migrations
docker exec audio_classifier_api alembic upgrade head
# Vérifier la version
docker exec audio_classifier_api alembic current
# Historique
docker exec audio_classifier_api alembic history
```
## 🛠️ Gestion services
### Arrêter
```bash
docker-compose -f docker-compose.dev.yml stop
```
### Redémarrer
```bash
docker-compose -f docker-compose.dev.yml restart
```
### Redémarrer uniquement le backend
```bash
docker-compose -f docker-compose.dev.yml restart backend
```
### Logs
```bash
# Tous les services
docker-compose -f docker-compose.dev.yml logs -f
# Backend seulement
docker-compose -f docker-compose.dev.yml logs -f backend
# PostgreSQL
docker-compose -f docker-compose.dev.yml logs -f postgres
```
### Rebuild
```bash
docker-compose -f docker-compose.dev.yml build backend
docker-compose -f docker-compose.dev.yml up -d
```
### Supprimer tout (⚠️ perd les données)
```bash
docker-compose -f docker-compose.dev.yml down -v
```
## 🔧 Configuration
### Modifier le dossier audio
```bash
# Éditer .env
nano .env
# Changer:
AUDIO_LIBRARY_PATH=/nouveau/chemin/vers/audio
# Redémarrer
docker-compose -f docker-compose.dev.yml restart backend
```
### Changer le nombre de workers
```bash
# Éditer .env
ANALYSIS_NUM_WORKERS=8
# Redémarrer
docker-compose -f docker-compose.dev.yml restart backend
```
## 📊 Statistiques
### Stats globales
```bash
curl http://localhost:8001/api/stats | python3 -m json.tool
```
### Nombre de pistes
```bash
curl -s http://localhost:8001/api/stats | python3 -c "import sys, json; print(f\"Total tracks: {json.load(sys.stdin)['total_tracks']}\")"
```
## 🧪 Tests
### Test health check
```bash
curl -f http://localhost:8001/health && echo "✅ OK" || echo "❌ FAIL"
```
### Test connexion DB
```bash
docker exec audio_classifier_db pg_isready -U audio_user && echo "✅ DB OK" || echo "❌ DB FAIL"
```
### Test frontend
```bash
curl -f http://localhost:3000 && echo "✅ Frontend OK" || echo "❌ Frontend FAIL"
```
## 📖 Documentation
### API interactive
```bash
open http://localhost:8001/docs
```
### Frontend
```bash
open http://localhost:3000
```
## 🆘 Debug
### Voir les variables d'environnement
```bash
docker exec audio_classifier_api env | grep -E "DATABASE_URL|CORS|ANALYSIS"
```
### Vérifier les ports
```bash
lsof -i :8001 # Backend
lsof -i :5433 # PostgreSQL
lsof -i :3000 # Frontend
```
### Espace disque Docker
```bash
docker system df
docker system prune # Nettoyer
```
## 🎯 Workflows courants
### Analyser une nouvelle bibliothèque
```bash
# 1. Configurer le chemin
echo 'AUDIO_LIBRARY_PATH=/path/to/music' >> .env
# 2. Redémarrer
docker-compose -f docker-compose.dev.yml restart backend
# 3. Lancer l'analyse
curl -X POST http://localhost:8001/api/analyze/folder \
-H "Content-Type: application/json" \
-d '{"path": "/audio", "recursive": true}'
# 4. Suivre la progression (récupérer job_id d'abord)
watch -n 2 "curl -s http://localhost:8001/api/analyze/status/JOB_ID | python3 -m json.tool"
```
### Rechercher et écouter
```bash
# 1. Rechercher
curl "http://localhost:8001/api/search?q=upbeat" | python3 -m json.tool
# 2. Copier un track_id
# 3. Écouter
open "http://localhost:8001/api/audio/stream/TRACK_ID"
```
### Export des résultats
```bash
# Export JSON toutes les pistes
curl "http://localhost:8001/api/tracks?limit=10000" > tracks.json
# Export CSV (simple)
curl -s "http://localhost:8001/api/tracks?limit=10000" | \
python3 -c "import sys, json, csv; data = json.load(sys.stdin)['tracks']; writer = csv.DictWriter(sys.stdout, fieldnames=['filename', 'tempo_bpm', 'key', 'genre_primary']); writer.writeheader(); [writer.writerow({k: track.get(k) or track['features'].get(k) or track['classification']['genre'].get('primary') for k in ['filename', 'tempo_bpm', 'key', 'genre_primary']}) for track in data]" > tracks.csv
```
---
**Rappel des URLs** :
- Backend API : http://localhost:8001
- API Docs : http://localhost:8001/docs
- Frontend : http://localhost:3000
- PostgreSQL : localhost:5433