Utiliser l’API Text to Speech d’OpenAI avec Python

Découvrez l’API Text to Speech d’OpenAI avec Python et générez de façon automatisée des fichiers audios
Table des matières

Text to Speech d’OpenAI est un outil d’intelligence artificiel permettant de synthétiser un fichier audio à partir d’une chaine de texte. Dans cet article nous allons créer un script Python pour automatiser la conversion de plusieurs textes en fichier audio.

Pré-requis

Python

Si ce n’est déjà fait, il faudra au préalable installer Python sur votre poste de travail. Je vous invite à vous référer à la documentation officielle très complète.

Clé d’API OpenAI

Sur la plateforme OpenAI, allez dans la rubrique de gestion des clés d’API. Créez une clé et nommez là spécifiquement pour le Text to Speech.

Votre compte OpenAI doit être alimenté avec quelques crédits. D’ailleurs, je vous conseille dans un premier temps d’investir un petit montant, juste suffisant pour les tests. En effet, la durée de validité des crédits est assez courte.

Pour un usage en production, il conviendra plus tard d’adapter les modalités de renouvellement des crédits en fonction du volume d’appel aux APIs.

Description de l’API Text to Speech (TTS)

Les paramètres

Les paramètres « model » et « voice » dans l’API Text-to-Speech d’OpenAI déterminent respectivement le modèle de synthèse vocale utilisé et la voix spécifique pour la sortie audio. Ces paramètres permettent de personnaliser l’expérience audio en choisissant parmi différentes options de voix et de modèles pour obtenir le résultat souhaité.

Valeurs pour model

  • tts-1 : idéal si vous utilisez l’API dans le cadre d’application où le rendu doit être fait en temps réel ;
  • tts-1-hd : modèle utilisé pour obtenir un rendu de meilleure qualité.

Valeurs pour voice

  • alloy ;
  • echo ;
  • fable ;
  • onyx ;
  • nova ;
  • et shimmer.

Formats de sortie

Le format par défaut est le MP3, mais il est possible d’obtenir d’autres format de fichiers :

  • Opus : Pour le streaming et la communication sur Internet, avec une faible latence ;
  • AAC : Pour la compression audio numérique, privilégié par YouTube, Android, iOS ;
  • FLAC : Pour la compression audio sans perte, apprécié par les audiophiles pour l’archivage ;
  • WAV : Audio WAV non compressé, adapté aux applications à faible latence pour éviter le surcoût du décodage ;
  • PCM : Similaire au WAV mais contient les échantillons bruts en 24 kHz (16 bits signés, little-endian), sans l’en-tête.

Support des langues

Plus de cinquante langues sont supportées et le français est bien sûr pris en charge, d’ailleurs, nous allons le mettre à contribution dans le cadre de cet article.

Installation

Environnement virtuel Python

Un environnement virtuel avec Python permet d’isoler le projet et d’y installer seulement les dépendances nécessaires.

Allez à la racine du dossier qui contiendra le sous-dossier de votre projet et pour créer l’environnement virtuel pour notre test, utilisez l’instruction suivante pour créer le projet openai-env :

python -m venv openai-env

Activez ensuite l’environnement. Sous Windows, voici l’instruction :

openai-env\Scripts\activate 

Référez vous à la documentation pour en savoir plus sur les environnements virtuels et leur activation.

Installation de la librairie Python OpenAI

Par défaut, le gestionnaire de packages pip est disponible dans votre environnement.

cd .\openai-env\  
pip install --upgrade openai

Installation de Dotenv

Pour éviter de mettre en clair notre clé API dans le code, nous allons utiliser Dotenv. Cette solution permet d’accéder à des variables d’environnements stockées dans un fichier .env. C’est une bonne pratique qui permet de ne pas laisser en clair des variables sensibles et de configurer les environnements de travails indépendamment du code et du contrôle de version.

Toujours dans votre dossier openai-env :

pip install python-dotenv

Le fichier .env

Créez un fichier .env avec la commande suivante :

echo 'OPENAI_KEY="{OPENAI-API-KEY}"' > .env

Remplacez {OPENAI-API-KEY} par la valeur de votre clé API.

Le dossier de téléchargement

Nous allons avoir besoin d’un dossier pour sauvegarder les fichiers obtenus.

mkdir Download

Synthèse d’un fichier vocal

Script de base

Ouvrez votre éditeur, et créez le fichier tts.py avec le code suivant :

import os
from pathlib import Path
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv() 
OPENAI_KEY = os.getenv("OPENAI_KEY")

client = OpenAI(api_key=OPENAI_KEY)
speech_file_path = Path(__file__).parent / "Download/speech.mp3"
with client.audio.speech.with_streaming_response.create(
  model="tts-1",
  voice="alloy",
  input="Aujourd'hui, nous allons tester Text to Speech d'OPENAI!"
) as response:response.stream_to_file(speech_file_path)

Lancement du script

Pour solliciter l’API, il suffit de lancer le script :

python tts.py

Voici le résultat obtenu avec le modèle tts-1 et la voix d’Alloy, le fichier est au format mp3 :

Automatisation

L’objectif consiste à faire évoluer le code de base afin de lui demander de générer plusieurs fichiers à partir d’une série de textes que nous allons lui confier.

Dialogue vocal à générer

Pour notre exercice, j’ai demandé à ChatGPT de me suggérer un très bref dialogue entre deux personnes qui échangent autour de l’éco-conception de site Internet. Les voix echo et nova sont mises à contribution pour représenter les protagonistes.

Voici le résultat dans un tableau Python :

dialogue = [
    ['echo', 'Bonjour, je veux rendre mon site plus éco-responsable. Des conseils ?'],
    ['nova', 'Bonjour ! Superbe initiative. Commencez par optimiser les images et le code pour réduire la consommation d\'énergie.'],
    ['echo', 'Et pour l\'hébergement ?'],
    ['nova', 'Choisissez un hébergeur vert, utilisant des énergies renouvelables.'],
    ['echo', 'Ça aide vraiment ?'],
    ['nova', 'Oui, chaque petit geste compte. Pensez aussi à l\'accessibilité et à la durabilité du design.']
]

Je ne me suis pas attardé sur les prompts pour optimiser le dialogue, et le résultat n’est là que pour alimenter notre test 🙂

Adaptation du code

Nous allons modifier le script précédent afin de solliciter l’API pour chaque ligne du dialogue. Et pour chaque phrase, nous aurons un fichier indexé avec le nom de la voix associée.

Créez un fichier mtts.py :

import os
from pathlib import Path
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv() 
OPENAI_KEY = os.getenv("OPENAI_KEY")

client = OpenAI(api_key=OPENAI_KEY)

dialogue = [
    ['echo', 'Bonjour, je veux rendre mon site plus éco-responsable. Des conseils ?'],
    ['nova', 'Bonjour ! Superbe initiative. Commencez par optimiser les images et le code pour réduire la consommation d\'énergie.'],
    ['echo', 'Et pour l\'hébergement ?'],
    ['nova', 'Choisissez un hébergeur vert, utilisant des énergies renouvelables.'],
    ['echo', 'Ça aide vraiment ?'],
    ['nova', 'Oui, chaque petit geste compte. Pensez aussi à l\'accessibilité et à la durabilité du design.']
]

index = 1
for dialogue_entry in dialogue:
    voice, text = dialogue_entry  # Extraction de la voix et du texte
    file_name = f"{index}-{voice}.mp3"  # Nom du fichier
    file_path = Path(__file__).parent / f"Download/{file_name}"  # Chemin du fichier

    # Génération du fichier vocal
    with client.audio.speech.with_streaming_response.create(
        model="tts-1",
        voice=voice,
        input=text
    ) as response:
        response.stream_to_file(file_path)
    
    index += 1  # Incrémentation de l'index

Lancement du script

Lancez manuellement le script :

python mtts.py

Vous devriez voir apparaitre dans le dossier Download l’ensemble des fichiers MP3 correspondants aux lignes du dialogue.

Et voici le dialogue vocal :

1. Echo

2. Nova

3. Echo

4. Nova

5. Echo

6. Nova

Conclusion

Selon le workflow dans lequel vous l’utiliserez, l’automatisation des appels pourra se faire autrement. On peut par exemple imaginer une tâche planifiée qui irait chercher des fichiers de textes à traiter dans un dossier source.

Dans un prochain article, nous reviendrons sur l’API Text to Speech et nous verrons comment mettre en place une interface web pour générer et télécharger les fichiers audios.

Je suis Thanh Nguyen, artisan du Web depuis 1998 et le doublé de Zidane en finale de coupe du monde.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ces articles pourraient aussi vous intéresser

Rechercher sur le site