Código para el documento ICML 2024 Generación creativa de texto a audio mediante programación de sintetizador . CTAG es un método para generar sonidos a partir de indicaciones de texto mediante el uso de un sintetizador modular virtual. CTAG depende de SynthAX, un sintetizador modular rápido en JAX.
Puedes escuchar muchos ejemplos en el sitio web. El código para obtener los resultados del artículo se encontrará en un repositorio diferente (próximamente).
Puedes crear el entorno de la siguiente manera.
conda create -n ctag python=3.9
conda activate ctag
pip install -r requirements.txt
De forma predeterminada, instalamos JAX para CPU. Puede encontrar más detalles en la documentación de JAX sobre el uso de JAX con sus aceleradores.
También tienes que descargar los puntos de control de LAION-CLAP de la siguiente manera:
mkdir -p ctag/checkpoints && wget -i checkpoints.txt -P ctag/checkpoints
ctag/
¡Generar sonidos es muy sencillo! De forma predeterminada, ctag
se ejecuta en una CPU con un tamaño de población menor, pero puedes cambiar eso con los valores de configuración.
cd ctag
python text2synth.py system.device=cuda general.popsize=100
Generará directorios que contienen registros, resultados y experimentos. La versión final de cada sonido se puede encontrar en experiments
y results
contienen todas las iteraciones.
De forma predeterminada, esto utiliza las indicaciones en ctag/data/esc50-sounds.txt
. Para cambiar esto, apunte este campo a un archivo diferente o pase una cadena con múltiples indicaciones separadas por punto y coma. También puedes anular esto desde la línea de comando:
# 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" '
Tenga en cuenta que actualmente debe proporcionar
Usamos Hydra para configurar ctag
. La configuración se puede encontrar en ctag/conf/config.yaml
, con subconfiguraciones específicas en los subdirectorios de ctag/conf/
.
Las configuraciones definen todos los parámetros (por ejemplo, algoritmo de estrategia, sintetizador, iteraciones, indicaciones). Por defecto, estos son los que se utilizan para el papel. Puedes elegir el model
según los checkpoints
CLAP descargados, una estrategia evosax
disponible en la configuración, una arquitectura synth
y un synthconfig
. Aquí también es donde eliges los prompts
, la duration
de los sonidos, el número de iterations
, el popsize
(tamaño de la población), el número de ejecuciones independientes por aviso n_runs
(no confundir con las iteraciones) y la seed
aleatoria inicial.
Usamos AX para barrer los hiperparámetros de un algoritmo con solo un campo de configuración. Primero, necesita actualizar la versión de ax-platform
debido a algunos problemas de dependencia con otros paquetes.
pip install ax-platform==0.2.8
Entonces puedes ejecutar el barrido de la siguiente manera.
python text2synth.py --multirun
Si utiliza ctag
en su investigación, cite el siguiente artículo:
@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 }
}
Para el componente del sintetizador en sí, cite 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 }
}
Agradecemos el apoyo financiero parcial de Fulbright España. También agradecemos al MIT SuperCloud y al Lincoln Laboratory Supercomputing Center por proporcionar recursos de HPC que han contribuido a los resultados de la investigación informados en estos artículos.