AudioReader
Convertisseur de livres Markdown en audiobooks avec TTS multi-voix (MMS + Kokoro)
Install / Use
/learn @phuetz/AudioReaderREADME
AudioReader
Convertisseur de livres Markdown en audiobooks haute qualite
Propulse par Kokoro-82M - un modele TTS open-source qui rivalise avec ElevenLabs, 100% gratuit et local.
📸 Captures d'écran
Dashboard
Conversion de livre
Gestion des personnages
Clonage vocal
Paramètres
Table des matieres
- Captures d'écran
- Fonctionnalites
- Nouveautes v5.0 - Detection Amelioree et Export Professionnel
- Nouveautes v4.0 - Interface Moderne et Nouveaux Moteurs
- Nouveautes v3.0 - Plateforme Complete
- Nouveautes v2.4 - Outils et Moteurs
- Nouveautes v2.3 - Style ElevenLabs
- Nouveautes v2.2 - Export Multi-Format
- Nouveautes v2.1 - Fonctionnalites Avancees
- Nouveautes v2.0 - Pipeline HQ
- Installation
- Utilisation
- Pipeline Haute Qualite
- Architecture
- Qualite Audio
- Distribution
- Integration IA (Claude / ChatGPT)
- Docker
- References Scientifiques
- Sources et Credits
Fonctionnalites
Synthese Vocale
- Kokoro-82M: Modele a 82 millions de parametres, qualite proche d'ElevenLabs
- Multilingue: Francais, anglais (US/UK), japonais, chinois, et plus
- Voix naturelles: Intonation et prosodie realistes
- Voice Blending: Melange de voix avec ponderation (ex:
af_bella:60,am_adam:40) - Multi-voix automatique: Voix differentes par personnage detecte
- Performance: ~5x temps reel sur CPU
Formats d'entree
- Markdown: Fichier unique avec headers pour chapitres
- Multi-fichiers: Repertoire avec un fichier .md par chapitre
- EPUB: Extraction automatique des chapitres
Traitement du Texte
- Chunking intelligent: Decoupage aux frontieres naturelles (phrases, paragraphes)
- Pauses intelligentes: Pauses configurables entre phrases (0.3s) et paragraphes (0.8s)
- Correction prononciation: Dictionnaire integre pour acronymes et termes techniques
- Normalisation avancee: Nombres, dates, heures, monnaies, chiffres romains
- Tags emotionnels: Support des tags
[laugh],[sigh],[cough], etc.
Post-traitement Audio
- Normalisation loudness: EBU R128, -19 LUFS (standard podcast/audiobook)
- EQ automatique: Presence (3kHz) + Air (12kHz) + Low-cut (80Hz)
- De-essing: Reduction des sibilantes
- Compression: Compression douce pour voix
- Limiteur: True peak a -1.5 dB
Export Professionnel
- Metadonnees ID3: Titre, auteur, narrateur, couverture
- Format M4B: Audiobook avec chapitres navigables (compatible Apple Books)
- Export MP3: Fichiers separes ou combines
Interface
- CLI complete: Scripts en ligne de commande avec options avancees
- Interface Web: Application Gradio intuitive
- Pipeline HQ: Script dedie pour qualite maximale
Nouveautes v5.0 - Detection Amelioree et Export Professionnel
1. Detection de Personnages Amelioree
Le systeme de detection de personnages a ete entierement repense pour eliminer les faux positifs :
Stop words etendus : Expansion de 25 a ~200 mots (participes passes, adverbes, noms communs post-verbe, negatifs).
Scoring de confiance : Chaque personnage detecte recoit un score de confiance (0.0-1.0) base sur :
- Presence dans le dictionnaire de prenoms francais (+0.3)
- Nombre d'occurrences dans le texte (+0.2)
- Contexte syntaxique (apres verbe de parole, majuscule)
Dictionnaire de prenoms francais : ~1000 prenoms INSEE avec detection automatique du genre.
from src.french_names import is_french_name, get_gender_from_name
is_french_name("Marie") # True
get_gender_from_name("Pierre") # "M"
Validation LLM optionnelle : Pour les cas ambigus (confiance 0.3-0.7), le systeme peut valider via Ollama/OpenAI.
2. Support GPU et Streaming Temps Reel
Configuration GPU unifiee :
from src.gpu_config import GPUConfig
config = GPUConfig(
use_gpu=True,
device="auto", # "cuda", "mps", "cpu"
memory_fraction=0.8
)
print(config.get_device()) # Auto-detect CUDA/MPS/CPU
Moteur Kokoro avec GPU :
from src.tts_kokoro_engine import KokoroTTSEngine
from src.gpu_config import GPUConfig
engine = KokoroTTSEngine(gpu_config=GPUConfig(use_gpu=True))
print(f"GPU actif: {engine.is_using_gpu}")
Streaming SSE temps reel :
# Endpoint streaming
curl -N -X POST http://localhost:8000/api/v2/streaming/synthesize-stream \
-H "Content-Type: application/json" \
-d '{"text": "Bonjour, ceci est un test de streaming."}'
Interface async pour integration :
from src.tts_async import AsyncKokoroWrapper
async def stream_audio():
engine = AsyncKokoroWrapper()
async for chunk in engine.synthesize_stream("Texte a synthetiser"):
# chunk.audio contient les samples audio
play_audio(chunk.audio)
3. Lecteur Web Integre
Floating Player global : Le frontend React dispose maintenant d'un lecteur audio flottant visible sur toutes les pages.
Playlist avec queue :
// Zustand store avec persistance
const { queue, addTrack, next, toggleShuffle } = usePlaylistStore()
addTrack({ url: '/output/chapitre1.mp3', title: 'Chapitre 1' })
Streaming playback avec Web Audio API :
const { startStreaming, isBuffering, progress } = useStreamingPlayback()
// Demarre le streaming SSE et joue en temps reel
await startStreaming("Texte a synthetiser", { voice: "ff_siwis" })
4. Effets Sonores Contextuels
Moteur d'effets proceduraux :
from src.soundfx_engine import SoundFXEngine, BUILTIN_EFFECTS
engine = SoundFXEngine()
# 12 effets disponibles
audio = engine.generate('whoosh', intensity=0.5, duration=0.3)
audio = engine.generate('impact', intensity=0.7, duration=0.2)
audio = engine.generate('suspense', intensity=0.4, duration=2.0)
Effets integres :
| Effet | Description | Usage typique |
|-------|-------------|---------------|
| whoosh | Balayage frequentiel | Transitions rapides |
| impact | Burst de bruit | Moments dramatiques |
| suspense | Drone basse frequence | Tension |
| magic | Harmoniques + shimmer | Moments fantastiques |
| page_turn | Bruit de page | Transitions |
| chapter_start | Jingle d'ouverture | Debut de chapitre |
Integration dans le pipeline HQ :
python audio_reader.py livre.md --hq --sound-effects
5. Voix Francaises Additionnelles
21 voix Edge TTS francaises :
| Region | Voix feminines | Voix masculines | |--------|---------------|-----------------| | France | Denise, Eloise, Brigitte, Celeste, Coralie, Jacqueline, Josephine, Yvette | Henri, Alain, Claude, Jerome, Maurice, Remy, Yves | | Canada | Sylvie | Antoine, Jean, Thierry | | Belgique | Charline | Gerard | | Suisse | Ariane | Fabrice |
Voix MMS (Meta) :
# Voix MMS pour le francais
MMS_VOICES = {
"fr": [
{"id": "mms_fr_default", "name": "MMS Francais"},
{"id": "mms_fr_male", "name": "MMS Homme FR"},
{"id": "mms_fr_female", "name": "MMS Femme FR"}
]
}
6. Traitement par Lots et Profils
File d'attente de conversion :
from src.batch_processor import BatchProcessor, JobPriority
processor = BatchProcessor(max_concurrent=2)
# Ajouter des jobs avec priorites
processor.add_job(Path("livre1.md"), {"hq": True}, JobPriority.HIGH)
processor.add_job(Path("livre2.md"), {"hq": False}, JobPriority.NORMAL)
# Traiter tous les jobs
results = processor.process_all(
on_job_progress=lambda job, pct: print(f"{job.id}: {pct}%")
)
7 profils de configuration predefinis :
| Profil | Style | Vitesse | Particularites |
|--------|-------|---------|----------------|
| podcast | conversational | 1.05x | -16 LUFS, decontracte |
| audiobook | storytelling | 1.0x | Multi-voix, jingles chapitres |
| dramatic | dramatic | 0.92x | Effets sonores, intense |
| fast | conversational | 1.2x | Sans post-processing |
| documentary | documentary | 0.95x | Neutre, informatif |
| intimate | intimate | 0.9x | Proche, confidentiel |
| energetic | energetic | 1.12x | Dynamique, enthousiaste |
Utilisation CLI :
# Utiliser un profil
python audio_reader.py livre.md --profile audiobook
# Lister les profils
python audio_reader.py --list-profiles
# Batch processing depuis fichier
python audio_reader.py --batch jobs.json
7. Export Multi-Plateformes
Export vers Spotify, YouTube, Podcast et ACX :
from src.platform_exporter import PlatformExporter, ExportMetadata
exporter = PlatformExporter()
metadata = ExportMetadata(
title="Mon Audiobook",
