Introduction à la synthèse vocale par VITS
Les modèles d'intelligence artificielle permettent aujourd'hui de cloner des voix avec une précision remarquable. Cette prouesse repose sur des architectures avancées telles que VITS (Variational Inference with adversarial learning for end-to-end Text-to-Speech). Ce framework combine l'inférence variationnelle, les flux normalisants et l'apprentissage adversarial pour générer une parole hautement expressive.
En reliant le modèle acoustique et le vocodeur via des variables latentes plutôt que par des spectrogrammes, VITS intègre une modélisation stochastique et un prédicteur de durée aléatoire. Cela garantit une grande diversité dans la synthèse, permettant de produire des intonations et des rythmes variés à partir d'un même texte.
Configuration de l'environnement so-vits-svc
Pour déployer cette technologie, nous utiliserons la bibliothèque open-source so-vits-svc sous Python 3.10. Commencez par cloner le dépôt officiel et accéder au répertoire :
git clone https://github.com/svc-develop-team/so-vits-svc.git
cd so-vits-svc
Installez ensuite les dépendances requises. Pour les systèmes Unix (Linux/macOS) :
pip install -r requirements.txt
Pour les environnements Windows, utilisez le fichier de dépendances spécifique :
pip install -r requirements_win.txt
Une fois l'installation terminée, lancez l'interface web locale :
python webUI.py
Le serveur Gradio démarrera et sera accessible via l'adresse locale http://127.0.0.1:7860. Cette interface permettra de charger les modèles et d'effectuer les conversions vocales.
Intégration des modèles pré-entraînés
Pour utiliser une voix spécifique, vous devez disposer de poids pré-entraînés. Téléchargez les fichiers du modèle et placez-les dans la structure de dossiers suivante :
- Les fichiers de poids (ex:
G_27200.pth) et les clusters (ex:kmeans_10000.pt) doivent être placés dans le dossierlogs/44k/. - Le fichier de configuraton (ex:
config.json) doit être déplacé dans le dossierconfigs/.
Une fois les fichiers positionnés, actualisez l'interface web et sélectionnez le modèle correspondant dans le menu déroulant.
Séparation des sources audio avec Spleeter
Avant d'appliquer la conversion vocale, il est impératif d'isoler la voix principale de la piste instrumentale. Les modèles de conversion ne doivent traiter que la voix, car l'accompagnement est considéré comme du bruit parasite. Nous utiliserons Spleeter pour cette tâche de séparation de sources.
Installez l'outil via pip :
pip install spleeter
Exécutez ensuite la commande pour extraire les pistes d'une chanson cible :
spleeter separate -p spleeter:2stems -o ./separated_audio/ input_track.mp3
Lors de la première exécution, les modèles pré-entraînés seront téléchargés. Le processus générera deux fichiers dans le dossier de sortie :
vocals.wav: la piste vocale isolée (acapella).accompaniment.wav: la piste instrumentale.
Inférence et ajustement des paramètres
Dans l'interface web de so-vits-svc, importez le fichier vocals.wav obtenu précédemment. Le processus d'inférence nécessite un ajustement minutieux des paramètres pour éviter deux artefacts courants : l'enrouement de la voix et les fausses notes.
Le paramètre de filtrage moyen F0 (F0 mean filter) joue un rôle crucial :
- Une valeur élevée lisse la voix et réduit l'enrouement, mais augmente le risque de décalage de hauteur (fausses notes).
- Une valeur plus basse préserve mieux la justesse, mais peut introduire des artefacts sonores ou un effet métallique.
Il est nécessaire d'itérer sur ces réglages et d'écouter attentivement le rendu pour trouver le compromis optimal.
Fusion finale des pistes avec FFmpeg
Après l'inférence, vous obtiendrez un nouveau fichier audio contenant la voix convertie. La dernière étape consiste à mélanger cette voix synthétique avec l'instrumentale extraite précédemment. FFmpeg est l'outil idéal pour ce mixage.
Utilisez la commande suivante pour superposer les deux pistes audio et générer le fichier final :
ffmpeg -i converted_vocals.wav -i accompaniment.wav -filter_complex "[0:a][1:a]amix=inputs=2:duration=first:dropout_transition=2" final_mix.wav
Cette commande utilise le filtre amix pour combiner les deux flux audio en un seul fichier final_mix.wav, prêt à être écouté.