texto-para-música
Duas formas de criar uma música com vocais + acompanhamento, salva como MP3. Cada solicitação produz duas variantes.
- Gerar — uma nova música a partir de uma descrição musical mais letra.
- Cover — recantar uma música existente em um novo estilo, mantendo sua melodia. A letra pode ser a original (reconhecida automaticamente) ou nova.
Gatilhos
- criar uma música / gerar música / texto para música / compor
- transforme estas letras em música / cantar isto / jingle / tema musical / música de aniversário
- fazer um cover desta música / fazer uma versão jazz / refazer em outro estilo
- 写歌 / 生成音乐 / 作曲 / 唱首歌 / 歌词谱曲 / 翻唱 / 改编 / 换个风格唱
Gerar — nova música a partir de texto
Uma solicitação precisa de um prompt (a descrição musical) e exatamente uma fonte de letra:
# Deixe o servidor escrever a letra a partir de um tema
python3 skills/text-to-music/scripts/t2m.py "indie pop animado, guitarras brilhantes, 120 BPM" \
--lyrics-prompt "uma música sobre viagens de verão com amigos"
# Use sua própria letra (inline ou de um arquivo)
python3 skills/text-to-music/scripts/t2m.py "balada mandopop, piano e cordas" \
--lyrics $'[Verso]\nA chuva lá fora parou\n[Refrão]\nEu ainda estou esperando por você' --vocal-gender Female --title "A chuva parou"
python3 skills/text-to-music/scripts/t2m.py "lo-fi hip hop, suave, estalo de vinil" \
--lyrics-file song.txt --duration 120 -o chill.mp3
# Modele o vocal/estilo a partir de uma música de referência (arquivo local ≤20 MB ou URL pública)
python3 skills/text-to-music/scripts/t2m.py "synth-pop sonhador" --lyrics-file song.txt --ref-audio ./ref.mp3
Saída: song_v1.mp3 e song_v2.mp3 (ou <prefixo>_v1.mp3 / <prefixo>_v2.mp3 com -o). Quando a letra foi escrita pelo servidor, ela também é salva em <prefixo>_lyrics.txt.
| Argumento | Padrão | Descrição |
|---|---|---|
prompt | obrigatório | Descrição musical: gênero, clima, instrumentos, andamento (≤1500 caracteres) |
--lyrics / -l | — | Texto da letra; marcadores [Verso], [Refrão], [Ponte] ajudam na estruturação |
--lyrics-file | — | Arquivo .txt UTF-8 com a letra (≤64 KB) |
--lyrics-prompt | — | Tema para escrita da letra pelo servidor |
--tags | — | Tags de estilo, separadas por vírgula (≤50 caracteres) |
--negative-tags | — | Estilos a evitar |
--duration / -d | auto | Sugestão de duração alvo: 60, 120 ou 180 segundos. Uma sugestão, não uma garantia. |
--ref-audio | — | Música de referência, caminho local ou URL pública |
--lyrics, --lyrics-file e --lyrics-prompt são mutuamente exclusivos; um é obrigatório.
Cover — recantar uma música existente
Requer a música fonte, a letra, e uma descrição do novo som (--style e/ou --prompt):
# Mesma letra, novo estilo: reconhece a letra da original e depois faz o cover
python3 skills/text-to-music/scripts/t2m.py cover original.mp3 \
--style "jazz, vocal feminino defumado" --recognize-lyrics -o jazz_cover.mp3
# Nova letra sobre a melodia original, arranjo mais livre
python3 skills/text-to-music/scripts/t2m.py cover https://exemplo.com/musica.mp3 \
--prompt "folk acústico, viola dedilhada, intimista" --lyrics-file nova_letra.txt \
--adherence main_melody --vocal-gender Male
# Apenas reconhecer a letra (para revisar ou editar antes do cover)
python3 skills/text-to-music/scripts/t2m.py lyrics original.mp3 -o letra.txt
Fluxo recomendado quando o usuário quer ajustar a letra: execute lyrics → edite o arquivo → cover --lyrics-file.
| Argumento | Padrão | Descrição |
|---|---|---|
source | obrigatório | Música original: arquivo local (≤100 MB; mp3/wav/m4a/aac/flac/ogg) ou URL pública |
--style / -s | — | Tags curtas de estilo, ex.: "rock, vocal masculino" (≤50 caracteres) |
--prompt / -p | — | Descrição mais longa do som do cover (≤1500 caracteres) |
--adherence | high | high = seguir o arranjo original de perto; main_melody = manter apenas a melodia principal, mais liberdade |
--lyrics / -l | — | Letra a ser cantada |
--lyrics-file | — | Arquivo .txt UTF-8 com a letra (≤64 KB) |
--recognize-lyrics | desligado | Transcrever a letra da fonte primeiro e usá-la |
--output / -o | cover.mp3 | Caminho de saída; as variantes recebem os sufixos _v1 / _v2 |
Pelo menos um de --style / --prompt é obrigatório; exatamente uma fonte de letra é obrigatória.
Argumentos Compartilhados
| Argumento | Padrão | Descrição |
|---|---|---|
--title | — | Título da música (≤80 caracteres) |
--vocal-gender | — | Male ou Female |
--vocal-timbre | — | Descrição livre da voz, ex.: "contralto quente e encorpado" (≤50 caracteres) |
--output / -o | song.mp3 (cover.mp3 para covers) | Caminho de saída; as variantes recebem os sufixos _v1 / _v2 |
--no-wait | desligado | Enviar, imprimir o(s) ID(s) do job e sair |
--poll-interval | 10 | Segundos entre verificações de status |
--timeout | 1800 | Máximo de segundos para aguardar (o job continua rodando no servidor) |
--api-key | de env/config | Chave da API Noiz (substitui a chave armazenada) |
Retomando / Verificando Jobs
A geração imprime dois gen_product_ids; um cover imprime um task_id. Se o tempo limite expirar ou você usou --no-wait, retome com:
python3 skills/text-to-music/scripts/t2m.py status <id_v1> <id_v2> -o song.mp3
python3 skills/text-to-music/scripts/t2m.py status --cover <task_id> -o cover.mp3
python3 skills/text-to-music/scripts/t2m.py status --cover <task_id> --no-wait # apenas imprime o status
O status passa por submitted → running → succeeded / failed. Covers também relatam um stage (a análise ocorre antes do canto, então covers demoram mais). URLs de download expiram após ~24h; execute status novamente para obter novas.
Escrevendo Bons Prompts
- Prompt / estilo = o som: gênero + clima + instrumentação + andamento.
"pop orquestral cinematográfico, cordas crescentes, 90 BPM, esperançoso". - Letra: mantenha as seções curtas e rotuladas. Letras em chinês, inglês e misturadas funcionam.
- Músicas curtas: para jingles ou saudações, use
-d 60e escreva apenas um verso + refrão. - Covers: escolha
highpara manter o cover reconhecível; escolhamain_melodypara uma mudança maior de gênero. - Não satisfeito? Execute novamente — cada execução dá duas novas variantes.
Custo
- Músicas e covers são cobrados uma vez por job (não por variante):
ceil(segundos da variante mais longa) × 15créditos, cobrados após ambas as variantes terem sucesso. Uma música de 2 minutos custa cerca de 1.800 créditos. Se os créditos da assinatura não cobrirem o job inteiro, ele é cobrado como pay-as-you-go a $0,00015/s. O script imprime o valor cobrado ao finalizar. - Reconhecimento de letra (
lyrics/--recognize-lyrics): 100 créditos (ou $0,001 pay-as-you-go), cobrado apenas quando vocais são detectados.
Limite de taxa: 5 submissões por minuto por chave por endpoint; polling de status 60 por minuto.
Limitações
- Música puramente instrumental não é suportada — letras são sempre obrigatórias.
--durationé apenas uma sugestão; a duração real pode diferir. Covers seguem a duração da fonte.- Prompts ou letras contendo conteúdo sensível são rejeitados (
code=400).
Configuração
python3 skills/text-to-music/scripts/t2m.py config --set-api-key SUA_CHAVE
# ou
export NOIZ_API_KEY=SUA_CHAVE
Obtenha sua chave de API em developers.noiz.ai.
Requisitos
- Python 3.6+
- Pacote
requests:uv pip install requests - Chave de API Noiz de developers.noiz.ai
Segurança e Divulgação de Dados
- Chave de API: Armazenada em
~/.config/noiz/api_key(permissões0600) ou via variável de ambienteNOIZ_API_KEY. - Rede: Prompts, letras e qualquer áudio de referência/fonte (upload de arquivo ou URL) são enviados para
https://noiz.ai/v1/text-to-musicehttps://noiz.ai/v1/text-to-music/cover*; o status do job é consultado nos mesmos endpoints. Nenhum outro dado é transmitido. - Saída: Os MP3s gerados (e arquivos de texto de letra) são baixados de URLs assinadas do armazenamento Noiz e salvos no caminho de saída. Nenhum outro arquivo é modificado.