Code pour l'article ICML 2024 Génération créative de texte en audio via la programmation d'un synthétiseur . CTAG est une méthode permettant de générer des sons à partir d'invites textuelles à l'aide d'un synthétiseur modulaire virtuel. CTAG dépend de SynthAX, un synthétiseur modulaire rapide en JAX.
Vous pouvez entendre de nombreux exemples sur le site Web. Le code permettant d'obtenir les résultats de l'article se trouvera dans un autre référentiel (à venir).
Vous pouvez créer l'environnement comme suit
conda create -n ctag python=3.9
conda activate ctag
pip install -r requirements.txt
Par défaut, nous installons JAX pour CPU. Vous pouvez trouver plus de détails dans la documentation JAX sur l'utilisation de JAX avec vos accélérateurs.
Vous devez également télécharger les points de contrôle pour LAION-CLAP comme suit :
mkdir -p ctag/checkpoints && wget -i checkpoints.txt -P ctag/checkpoints
ctag/
Générer des sons est très simple ! Par défaut, ctag
s'exécute sur un processeur avec une taille de population inférieure, mais vous pouvez modifier cela avec les valeurs de configuration
cd ctag
python text2synth.py system.device=cuda general.popsize=100
Il générera des répertoires contenant des journaux, des résultats et des expériences. La version finale de chaque son peut être trouvée dans experiments
, et results
contiennent toutes les itérations.
Par défaut, cela utilise les invites dans ctag/data/esc50-sounds.txt
. Pour modifier cela, pointez ce champ vers un autre fichier ou transmettez une chaîne avec plusieurs invites séparées par des points-virgules. Vous pouvez également remplacer cela depuis la ligne de commande :
# From a prompts.txt file
python text2synth.py general.prompts=/path/to/prompts.txt
# From strings
python text2synth.py general.prompts= ' "a bird tweeting;walking on leaves" '
Notez qu'actuellement, vous devez fournir
Nous utilisons Hydra pour configurer ctag
. La configuration peut être trouvée dans ctag/conf/config.yaml
, avec des sous-configurations spécifiques dans les sous-répertoires de ctag/conf/
.
Les configurations définissent tous les paramètres (par exemple algorithme de stratégie, synthétiseur, itérations, invites). Par défaut, ce sont ceux utilisés pour le papier. Vous pouvez choisir le model
en fonction des checkpoints
CLAP téléchargés, d'une stratégie evosax
disponible dans la configuration, d'une architecture synth
et d'un synthconfig
. C'est également ici que vous choisissez les prompts
, la duration
des sons, le nombre d' iterations
, la popsize
(taille de la population), le nombre d'exécutions indépendantes par invite n_runs
(à ne pas confondre avec les itérations) et la seed
aléatoire initiale.
Nous utilisons AX pour balayer les hyperparamètres d'un algorithme avec juste un champ de configuration. Tout d'abord, vous devez mettre à jour la version d' ax-platform
en raison de certains problèmes de dépendance avec d'autres packages.
pip install ax-platform==0.2.8
Ensuite, vous pouvez exécuter le balayage comme suit
python text2synth.py --multirun
Si vous utilisez ctag
dans votre recherche, veuillez citer l'article suivant :
@inproceedings { cherep2024creative ,
title = { Creative Text-to-Audio Generation via Synthesizer Programming } ,
author = { Cherep, Manuel and Singh, Nikhil and Shand, Jessica } ,
booktitle = { Forty-first International Conference on Machine Learning } ,
year = { 2024 }
}
Pour le composant synthétiseur lui-même, veuillez citer SynthAX :
@conference { cherep2023synthax ,
title = { SynthAX: A Fast Modular Synthesizer in JAX } ,
author = { Cherep*, Manuel and Singh*, Nikhil } ,
booktitle = { Audio Engineering Society Convention 155 } ,
month = { May } ,
year = { 2023 } ,
url = { http://www.aes.org/e-lib/browse.cfm?elib=22261 }
}
Nous reconnaissons le soutien financier partiel de Fulbright Espagne. Nous remercions également le MIT SuperCloud et le Lincoln Laboratory Supercomputing Center pour avoir fourni des ressources HPC qui ont contribué aux résultats de recherche rapportés dans ces articles.