Retour au blog

Pourquoi le FLAC est le format audio idéal pour les applications de parole basées sur l'IA

2026-01-184 min read

J'ai récemment créé Prosody Coach, un outil CLI Python qui aide les personnes dont l'anglais n'est pas la langue maternelle à améliorer leur prononciation. L'application enregistre votre voix, l'analyse à l'aide d'algorithmes scientifiques (Praat), et fournit un coaching basé sur l'IA via l'API Gemini de Google.

Une décision que j'ai dû prendre très tôt était de choisir le format audio à utiliser. J'avais déjà travaillé avec MP3 et WAV, mais aucun ne semblait adapté à ce cas d'utilisation. Après quelques recherches, j'ai opté pour FLAC, et cela s'est avéré être le choix parfait.

Le problème avec les formats audio courants

Laissez-moi vous expliquer pourquoi les suspects habituels n'ont pas fonctionné.

MP3 est omniprésent. Il est petit, compatible avec tout, et convient pour écouter de la musique dans votre voiture. Mais le MP3 est un format avec perte. Il supprime des données audio pour obtenir une compression. Pour l'analyse de la parole, c'est un problème. Lorsque vous mesurez les variations de hauteur (pitch) jusqu'à des fréquences spécifiques en Hz ou que vous analysez des schémas de synchronisation syllabique, vous avez besoin que chaque bit de donnée soit intact.

WAV est l'extrême opposé. Il est totalement non compressé, ce qui signifie une qualité parfaite. Mais la taille des fichiers est énorme. Un enregistrement de 30 secondes à 16 kHz mono représente environ 1 Mo au format WAV. Cela s'accumule rapidement lorsque vous stockez plusieurs enregistrements pour suivre les progrès, et c'est inefficace pour l'envoi aux API cloud.

Pourquoi FLAC fonctionne pour les applications vocales

FLAC (Free Lossless Audio Codec) trouve le juste milieu. Il est sans perte comme WAV, ce qui signifie que vous obtenez une fidélité audio parfaite. Mais il utilise des algorithmes de compression qui réduisent la taille des fichiers de 50 à 60 % sans supprimer aucune donnée.

Voici comment cela fonctionne : FLAC utilise la codification prédictive. Il analyse les motifs dans la forme d'onde audio et stocke les différences par rapport aux valeurs prédites plutôt que les échantillons bruts. Lorsque vous décompressez un fichier FLAC, vous retrouvez exactement l'audio d'origine. Bit par bit.

Pour Prosody Coach, cela signifie :

  • Analyse de hauteur précise : Les algorithmes Praat mesurant la hauteur (gamme de 75 à 500 Hz) obtiennent des données propres et non compressées
  • Mesures de synchronisation précises : La détection des syllabes et l'analyse du rythme (calculs nPVI) dépendent de données de forme d'onde exactes
  • Stockage réduit : Les enregistrements des utilisateurs occupent environ la moitié de l'espace par rapport au WAV
  • Compatibilité API : L'API Gemini de Google accepte nativement le FLAC avec le type MIME audio/flac

Implémentation dans Prosody Coach

Le pipeline audio dans Prosody Coach fonctionne comme suit :

  1. Enregistrement depuis le microphone à une fréquence d'échantillonnage de 16 kHz (optimale pour la parole)
  2. Capture au format float32 pour une flexibilité de traitement
  3. Suppression des silences au début et à la fin
  4. Sauvegarde au format FLAC pour le stockage
  5. Pour l'analyse par IA, conversion en FLAC encodé en base64 et envoi à Gemini

Le code pour sauvegarder un enregistrement ressemble à ceci :

import soundfile as sf

def save_recording(audio_data, sample_rate, filepath):
sf.write(filepath, audio_data, sample_rate, format='FLAC')

Et pour l'envoi à l'API Gemini :

import base64
import io

def prepare_audio_for_api(audio_data, sample_rate):
buffer = io.BytesIO()
sf.write(buffer, audio_data, sample_rate, format='FLAC')
buffer.seek(0)
return base64.b64encode(buffer.read()).decode('utf-8')

La bibliothèque soundfile gère l'encodage FLAC, et la chaîne base64 résultante est envoyée directement à Gemini avec le type MIME audio/flac.

Streaming en temps réel : une histoire différente

Une exception intéressante : pour les sessions de feedback en temps réel utilisant l'API Live de Gemini, j'utilise du PCM brut au lieu de FLAC. Le streaming en temps réel nécessite une latence minimale, et l'encodage/décodage FLAC pour chaque bloc audio de 100 ms ajouterait une surcharge inutile.

Pour le streaming, l'audio est converti en PCM 16 bits :

import numpy as np

def convert_to_pcm(audio_float32):
# Convertit float32 [-1.0, 1.0] en int16 [-32768, 32767]
return (audio_float32 * 32767).astype(np.int16).tobytes()

Le choix du format dépend donc du contexte : FLAC pour le stockage et l'analyse par lots, PCM pour le streaming en temps réel.

Quand utiliser FLAC

D'après mon expérience de création de Prosody Coach, FLAC est pertinent lorsque :

  • Vous devez préserver la qualité audio pour l'analyse ou le traitement
  • L'espace de stockage est important mais vous ne pouvez pas sacrifier la fidélité
  • Vous envoyez de l'audio à des API qui prennent en charge FLAC (les services d'IA de Google le font)
  • Vous souhaitez un format ouvert et sans brevet

FLAC pourrait ne pas être le meilleur choix si la taille du fichier est la principale préoccupation (utilisez un format avec perte) ou si vous avez besoin d'un encodage en temps réel avec une latence minimale (utilisez PCM).

Restez Informé

Recevez les derniers articles et insights dans votre boîte mail.

Unsubscribe anytime. No spam, ever.