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

6.7 KiB

📝 Commandes Essentielles - Audio Classifier

🚀 Démarrage

Lancer tous les services

cd "/Users/benoit/Documents/code/Audio Classifier"
docker-compose -f docker-compose.dev.yml up -d

Vérifier le statut

docker-compose -f docker-compose.dev.yml ps
docker-compose -f docker-compose.dev.yml logs -f backend

Lancer le frontend

cd frontend
npm run dev

🔍 Vérifications

Health check

curl http://localhost:8001/health

Stats base de données

curl http://localhost:8001/api/stats | python3 -m json.tool

Liste des pistes

curl http://localhost:8001/api/tracks?limit=5 | python3 -m json.tool

🎵 Analyse audio

Analyser un dossier

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

# Remplacer JOB_ID par l'ID retourné
curl http://localhost:8001/api/analyze/status/JOB_ID | python3 -m json.tool

🔎 Recherche

Recherche textuelle

curl "http://localhost:8001/api/search?q=jazz&limit=10" | python3 -m json.tool

Filtrer par BPM

curl "http://localhost:8001/api/tracks?bpm_min=120&bpm_max=140&limit=20" | python3 -m json.tool

Filtrer par genre

curl "http://localhost:8001/api/tracks?genre=electronic&limit=10" | python3 -m json.tool

Filtrer par énergie

curl "http://localhost:8001/api/tracks?energy_min=0.7&limit=10" | python3 -m json.tool

🎧 Audio

Stream (dans navigateur)

# 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

curl -o music.mp3 "http://localhost:8001/api/audio/download/$TRACK_ID"

Waveform data

curl "http://localhost:8001/api/audio/waveform/$TRACK_ID" | python3 -m json.tool

🗄️ Base de données

Connexion psql

docker exec -it audio_classifier_db psql -U audio_user -d audio_classifier

Queries utiles

-- 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

# 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

docker-compose -f docker-compose.dev.yml stop

Redémarrer

docker-compose -f docker-compose.dev.yml restart

Redémarrer uniquement le backend

docker-compose -f docker-compose.dev.yml restart backend

Logs

# 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

docker-compose -f docker-compose.dev.yml build backend
docker-compose -f docker-compose.dev.yml up -d

Supprimer tout (⚠️ perd les données)

docker-compose -f docker-compose.dev.yml down -v

🔧 Configuration

Modifier le dossier audio

# É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

# Éditer .env
ANALYSIS_NUM_WORKERS=8

# Redémarrer
docker-compose -f docker-compose.dev.yml restart backend

📊 Statistiques

Stats globales

curl http://localhost:8001/api/stats | python3 -m json.tool

Nombre de pistes

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

curl -f http://localhost:8001/health && echo "✅ OK" || echo "❌ FAIL"

Test connexion DB

docker exec audio_classifier_db pg_isready -U audio_user && echo "✅ DB OK" || echo "❌ DB FAIL"

Test frontend

curl -f http://localhost:3000 && echo "✅ Frontend OK" || echo "❌ Frontend FAIL"

📖 Documentation

API interactive

open http://localhost:8001/docs

Frontend

open http://localhost:3000

🆘 Debug

Voir les variables d'environnement

docker exec audio_classifier_api env | grep -E "DATABASE_URL|CORS|ANALYSIS"

Vérifier les ports

lsof -i :8001  # Backend
lsof -i :5433  # PostgreSQL
lsof -i :3000  # Frontend

Espace disque Docker

docker system df
docker system prune  # Nettoyer

🎯 Workflows courants

Analyser une nouvelle bibliothèque

# 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

# 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

# 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 :