Código para o artigo ICML 2024 Geração criativa de texto para áudio via programação de sintetizador . CTAG é um método para gerar sons a partir de prompts de texto usando um sintetizador modular virtual. CTAG depende do SynthAX, um sintetizador modular rápido em JAX.
Você pode ouvir muitos exemplos no site. O código para obter os resultados do artigo estará em outro repositório (em breve).
Você pode criar o ambiente da seguinte maneira
conda create -n ctag python=3.9
conda activate ctag
pip install -r requirements.txt
Por padrão, instalamos JAX para CPU. Você pode encontrar mais detalhes na documentação do JAX sobre como usar o JAX com seus aceleradores.
Você também deve baixar os pontos de verificação para LAION-CLAP da seguinte forma:
mkdir -p ctag/checkpoints && wget -i checkpoints.txt -P ctag/checkpoints
ctag/
Gerar sons é muito simples! Por padrão, ctag
é executado na CPU com um tamanho de população menor, mas você pode alterar isso com valores de configuração
cd ctag
python text2synth.py system.device=cuda general.popsize=100
Ele irá gerar diretórios contendo logs, resultados e experimentos. A versão final de cada som pode ser encontrada em experiments
e results
contêm todas as iterações.
Por padrão, isso usa os prompts em ctag/data/esc50-sounds.txt
. Para alterar isso, aponte este campo para um arquivo diferente ou passe uma string com vários prompts separados por ponto e vírgula. Você também pode substituir isso na linha 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" '
Observe que atualmente você deve fornecer
Usamos Hydra para configurar ctag
. A configuração pode ser encontrada em ctag/conf/config.yaml
, com subconfigs específicas em subdiretórios de ctag/conf/
.
As configurações definem todos os parâmetros (por exemplo, algoritmo de estratégia, sintetizador, iterações, prompts). Por padrão, estes são os usados para o papel. Você pode escolher o model
de acordo com os checkpoints
CLAP baixados, uma estratégia evosax
disponível na configuração, uma arquitetura synth
e um synthconfig
. É aqui também que você escolhe os prompts
, a duration
dos sons, o número de iterations
, o popsize
(tamanho da população), o número de execuções independentes por prompt n_runs
(não confundir com as iterações) e a seed
aleatória inicial.
Usamos AX para varrer os hiperparâmetros de um algoritmo com apenas um campo de configuração. Primeiro, você precisa atualizar a versão do ax-platform
devido a alguns problemas de dependência com outros pacotes
pip install ax-platform==0.2.8
Então você pode executar a varredura da seguinte maneira
python text2synth.py --multirun
Se você usar ctag
em sua pesquisa, cite o seguinte artigo:
@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 o componente do sintetizador em si, 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 }
}
Reconhecemos o apoio financeiro parcial da Fulbright Espanha. Também reconhecemos o MIT SuperCloud e o Lincoln Laboratory Supercomputing Center por fornecerem recursos de HPC que contribuíram para os resultados da pesquisa relatados nestes artigos.