4.2 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project
TranscribeStation est une application de bureau PyQt6 pour la gestion de fichiers audio à transcrire, avec support natif des pédales Olympus (RS27H/N, RS28H/N, RS31H/N). Interface entièrement en français.
Commandes essentielles
Développement (mode venv)
python3 -m venv .venv
source .venv/bin/activate
pip install PySide6>=6.5.0 numpy>=1.24.0 soundfile>=0.12.0 hid>=1.0.5
python transcribe_station.py
Installation automatique (Debian 12/13)
chmod +x install.sh && ./install.sh
./launch.sh
Compilation en binaire standalone
pip install pyinstaller Pillow
python build.py # auto-détection OS
python build.py --linux # binaire Linux + raccourci GNOME
python build.py --windows # binaire Windows + raccourci Menu Démarrer (via Wine)
python build.py --both # les deux plateformes
python build.py --clean # nettoyer dist/ et build/
python build.py --install-only # installer raccourcis sans recompiler
Les binaires sont produits dans dist/linux/TranscribeStation et dist/windows/TranscribeStation.exe.
Dépendances système (Debian)
sudo apt-get install -y libhidapi-dev libhidapi-hidraw0 libusb-1.0-0 \
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly gstreamer1.0-libav
Permissions pédales USB (udev)
# Ajouter à /etc/udev/rules.d/99-olympus-pedal.rules
# SUBSYSTEM=="hidraw", ATTRS{idVendor}=="07b4", MODE="0666"
sudo udevadm control --reload-rules && sudo udevadm trigger
Architecture
L'application est monolithique : toute la logique métier et UI réside dans transcribe_station.py (~2 150 lignes). Le fichier build.py (~567 lignes) gère la compilation PyInstaller et les raccourcis OS.
Classes principales (transcribe_station.py)
| Classe | Rôle |
|---|---|
AppSettings |
Persistance des préférences (Linux: ~/.config/TranscribeStation/settings.json, Windows: %APPDATA%\TranscribeStation\settings.json) |
DictationStatus |
Enum : TODO / IN_PROGRESS / SUSPENDED / DONE |
DictationFile |
Dataclass représentant un fichier audio + métadonnées + statut |
FootPedalWorker |
QThread : lecture HID non-bloquante, reconnexion auto (retry 2s) |
WaveformWidget |
QWidget : rendu de la forme d'onde via QPainter, seek à la souris |
PlayerPanel |
QWidget : QMediaPlayer + WaveformWidget + contrôles transport |
DictationTable |
QTableWidget : liste des fichiers, source de vérité _files |
FolderTree |
QTreeWidget : sidebar gauche, filtres par statut + navigation dossiers |
SettingsDialog |
QDialog : onglets Pédalier + Général |
MainWindow |
QMainWindow : orchestration principale |
Flux de données clé
- Ouverture dossier → scan audio (
.wav .mp3 .flac .ogg .mp4 .m4a .dss .ds2) → lecture.transcribe_station.json→DictationTable - Double-clic fichier → statut passe à
IN_PROGRESS→PlayerPanel.set_file()→ chargement waveform (numpy/soundfile) - Pédales →
FootPedalWorker(thread HID) → signaux Qt → actions player (rewind 0x04,play 0x02,forward 0x08) - Changement statut → clic droit
DictationTable→ mise à jourDictationFile→ sauvegarde.transcribe_station.json
Persistance
- Par dossier :
.transcribe_station.json(JSON, DictationFile sérialisés viato_dict()/from_dict()) - Préférences globales :
~/.config/TranscribeStation/settings.json
Thèmes
Deux thèmes (light/dark) définis par des palettes de couleurs hardcodées dans MainWindow. Pas de fichiers externes. Sélection via AppSettings.theme.
Backend audio
QMediaPlayer + QAudioOutput (GStreamer sur Linux). Les formats .dss/.ds2 nécessitent des plugins GStreamer spéciaux (non garantis).
Constantes importantes
VIDpédales Olympus :0x07B4PIDRS27H/N :0x0110, RS28H/N :0x0111, RS31H/N :0x0112- Skip par défaut :
3000 ms - Formats audio supportés :
.wav .mp3 .flac .ogg .mp4 .m4a .dss .ds2 - Raccourcis clavier : 15 définis dans
MainWindow._build_toolbar()etkeyPressEvent()