
Ícone por Mori-P
Resampler vocal com síntese WORLD para UTAU e OpenUtau.
O Tainah transforma gravações de voicebanks em notas cantadas, ajustando a altura e a duração. No Windows, funciona com UTAU clássico e OpenUtau. No macOS e Linux, use o pacote com OpenUtau.
Os pacotes prontos para uso ficam na página Versões:
- Windows x64:
Tainah-LTS-windows-x64.zip - macOS Apple Silicon:
Tainah-LTS-macos-arm64.zip - Linux x64:
Tainah-LTS-linux-x64.zip
Extraia o ZIP do seu sistema e mantenha o executável e a biblioteca na mesma pasta.
No Windows, selecione Tainah.exe nas configurações de resampler do UTAU ou do
OpenUtau. No macOS e Linux, coloque Tainah na pasta de resamplers do OpenUtau e
selecione-o no modo CLASSIC. O arquivo Tainah.yaml apresenta as flags do
motor no editor de expressões do OpenUtau.
O macOS pode pedir autorização na primeira abertura, pois os pacotes não são assinados pela Apple. Se isso acontecer, abra Ajustes do Sistema → Privacidade e Segurança e permita a execução do Tainah.
LTS significa Long Term Support (suporte de longo prazo). O Tainah alcançou estabilidade e esta edição terá atualizações no repositório oficial até 2035. O nome Tainah-LTS identifica essa linha estável de manutenção; os pacotes continuam compatíveis com UTAU e OpenUtau conforme descrito neste README.
- Analisa a amostra e ressintetiza a voz com WORLD.
- Usa
offset,consonantecutoffrecebidos do projeto para respeitar os dados deoto.ini. - Mantém o tamanho de saída pedido pelo aplicativo.
- Lê a curva de pitch enviada pelo OpenUtau.
- Oferece 22 flags para ajustar timbre, pitch, sopro, formantes, articulação e
outros aspectos acústicos. Consulte o manifesto
Tainah.yamlno pacote para ver os controles disponíveis no OpenUtau. - No OpenUtau, o manifesto usa
Qpara corte de agudos eFpara formantes, evitando conflito com as flagsH(lowpass) eP(normalize) do projeto. No UTAU clássico,HePcontinuam aceitos. - A flag
Pno UTAU clássico eFno OpenUtau deslocam os formantes sem alterar a nota: valores positivos elevam a posição dos formantes e valores negativos a reduzem. - A flag
Cajusta o tamanho da região consonantal fixa dooto.ini:C0mantém o valor original,C-100desativa essa região eC100a duplica. Uma região fixa maior reserva mais tempo da nota para o ataque e deixa menos tempo elástico para a vogal. Marcadores de loop válidos definem a região fixa e prevalecem sobreC. - Mostra um diagnóstico no terminal quando não consegue abrir, analisar ou sintetizar a amostra.
Se a análise WORLD falhar, o Tainah retorna um erro.
O Tainah usa análise e ressíntese WORLD. Primeiro, analisa o trecho selecionado do WAV e estima a frequência fundamental com Harvest ou DIO, o envelope espectral com CheapTrick e a aperiodicidade com D4C. Depois, remapeia esses dados para a duração pedida, aplica a nota e a curva de pitch, e sintetiza um novo áudio.
O tempo é tratado em regiões. Com espaço suficiente, o ataque e a cauda mantêm
suas durações, e o ajuste de duração se concentra na região sustentada. Se a nota
for curta demais para acomodar essas regiões, ataque e cauda são comprimidos para
caber. Marcadores de loop definem a região sustentada e o marcador de cauda
orienta a parte final. Os valores de offset, consonant e cutoff de oto.ini
afetam quais partes da gravação são usadas. O argumento clássico de velocidade é
aceito para compatibilidade, mas atualmente não altera o áudio.
Outros resamplers podem trabalhar diretamente com trechos da onda, alinhando e sobrepondo segmentos, usar processamento síncrono com o pitch ou combinar métodos. Essas abordagens e o WORLD têm características diferentes, sem uma técnica que seja melhor para todos os bancos e frases.
| Aspecto | Tainah com WORLD | Métodos de sobreposição ou síncronos com o pitch |
|---|---|---|
| Operação | Analisa pitch, envelope espectral e aperiodicidade, depois ressintetiza o áudio | Seleciona, alinha, sobrepõe ou repete partes da onda original; o comportamento depende do motor |
| Pitch e duração | Ajustados nos dados da análise antes da síntese | Normalmente tratados pela seleção e sobreposição de segmentos ou pelo alinhamento ao pitch |
| Consoantes | Usa a região fixa de consoante e marcadores opcionais de loop e cauda | Dependem das regras de segmentação e dos dados oto.ini |
| Característica | Permite remodelar pitch e duração pelo modelo acústico, mas a análise e a síntese também podem alterar a textura da gravação | Pode manter mais características da onda original; mudanças grandes ou segmentos mal alinhados podem evidenciar repetição e artefatos de transição |
Esta comparação descreve famílias de técnicas, não uma classificação de qualidade.
O resultado depende da gravação, do oto.ini, dos ajustes de pitch e duração e
da implementação de cada motor. WORLD não garante naturalidade, assim como os
métodos que trabalham com a onda original não são automaticamente mais precisos.
As letras diferenciam maiúsculas de minúsculas. Os valores são limitados à faixa
aceita pelo motor. As expressões correspondentes no OpenUtau constam em Tainah.yaml.
| Flag | Expressão OpenUtau | Faixa | Efeito |
|---|---|---|---|
g |
gen |
−100 a +100 | Altera o timbre sem mudar a nota. Valores negativos tendem a clarear; positivos, a escurecer. |
t |
pit |
−100 a +100 | Desloca a curva de pitch em 10 cents por unidade. |
B |
bre |
0 a 100 | Aumenta a componente geral de sopro (ruído aperiódico amplo). |
H |
hfc |
0 a 99 | Reduz progressivamente as frequências acima do corte. |
P |
formant |
−100 a +100 | Desloca a posição global dos formantes sem mudar o pitch fundamental. |
C |
consonant |
−100 a +100 | Ajusta a região consonantal fixa do oto.ini; 0 preserva o valor original. |
N |
nas |
0 a 100 | Acoplamento de nasalidade acústica (polo em 270 Hz, anti-formante e amortecimento de F1). |
S |
sig |
−100 a +100 | Formante do cantor: reforço de projeção em ~3000 Hz (+ ring/brilho; - voz aveludada). |
R |
rho |
0 a 100 | Rótico / retroflexo: aproxima F3 de F2 com anti-ressonância sublingual (R caipira / er inglês). |
V |
vop |
−100 a +100 | Abertura vocálica (F1 / mandíbula): positivo abre a vogal; negativo fecha a vogal. |
D |
vfr |
−100 a +100 | Anterioridade vocálica (F2 / língua): positivo anterioriza/brilha; negativo escurece. |
T |
tns |
−100 a +100 | Tensão vocal e adução glótica: balanço H1-H2 (+ canto tenso/belting; - fonação laxa/suave). |
A |
air |
0 a 100 | Arezamento (Air): difusão aperiódica aveludada seletiva acima de 3,5 kHz (estilo pop/condensador). |
W |
wrm |
−100 a +100 | Calor acústico: ressonância corporal de peito em ~220 Hz (+ corpo/peso; - atenua embolamento). |
E |
edg |
−100 a +100 | Punch de ataque da consoante: modela a micro-dinâmica inicial de plosivas e transientes. |
M |
mod |
0 a 100 | Modulação de vibrato: percentual de preservação do vibrato/flutuação natural da gravação original. |
d |
f0m |
0 ou 1 | Método de F0: d0 para Harvest (máxima precisão); d1 para DIO (alternativa rápida). |
s |
ses |
0 a 100 | De-Esser inteligente: suprime dinamicamente frequências sibilantes ásperas (5–9,5 kHz) em consoantes. |
G |
gwl |
0 a 100 | Growl e Vocal Fry: modulação caótica de sub-harmônicos (F0/2) para canto gutural e rock. |
U |
sat |
−100 a +100 | Saturação glotal / Drive: modelagem analógica tanh (+ calor harmônico; - linearidade suave). |
J |
jit |
0 a 100 | Humanização (Jitter/Shimmer): micro-flutuações fisiológicas involuntárias de afinação e dinâmica. |
K |
kee |
−100 a +100 | Escala laringeal adaptativa: compensação anatômica biológica de formantes em saltos de oitava. |
Exemplo: g10T25A30S20W15N40s35G20U15J25K10 combina tensão de belting, arezamento aveludado, de-esser, growl leve, saturação analógica e humanização fisiológica. Flags fora da lista são ignoradas.
O executável recebe os caminhos dos WAVs, a nota, duração, parâmetros temporais, flags e curva de pitch no formato clássico de resampler. Ele lê WAV PCM de 8, 16, 24 ou 32 bits e WAV IEEE float de 32 bits, converte a entrada para mono e grava a saída em PCM de 16 bits. O editor fornece os argumentos durante a renderização.
O Tainah aplica nota, curva de pitch, duração, tempos de oto.ini, volume e as
flags listadas acima. Os campos clássicos de velocidade, modulação e andamento são
aceitos para manter a chamada compatível, mas ainda não alteram o áudio.
O editor escolhe o alias e a amostra em oto.ini e envia os tempos ao Tainah. O
programa não instala nem modifica voicebanks. Se a amostra não tiver cobertura
suficiente ou a análise falhar, o Tainah retorna um erro em vez de criar silêncio.
- Git com suporte a submódulos;
- Python 3.9 ou posterior;
- CMake 3.16 ou posterior;
- compilador C++17.
Na raiz do repositório, execute:
python3 build.pyO script compila o executável e a biblioteca, executa o teste de ABI e prepara os
arquivos em build/package/. Para rodar novamente o teste:
ctest --test-dir build/engine-build -R tainah_abi --output-on-failureAlém do executável, cada pacote inclui uma biblioteca compartilhada com ABI C
versionada. O cabeçalho público está em src/Tainah/tainah.h. A chamada principal
é lt_render: ela recebe PCM mono f32, taxa de amostragem, duração, tempos de
oto.ini, flags e pontos de pitch; devolve PCM ou um diagnóstico. Consulte o
cabeçalho para o contrato completo.
O Tainah guarda análises WORLD em cache para evitar repetir esse processamento
quando a mesma amostra e as mesmas configurações de análise forem usadas de novo.
Esses arquivos são dados temporários de análise, não arquivos .frq, não alteram
o WAV de origem nem o voicebank e podem ser regenerados se estiverem ausentes ou
inválidos.
Por padrão, o cache fica nestes diretórios:
- Windows:
%LOCALAPPDATA%\Kamafeu\tainah-analysis - macOS:
~/Library/Caches/Kamafeu/tainah-analysis - Linux:
$XDG_CACHE_HOME/kamafeu/tainah-analysisou~/.cache/kamafeu/tainah-analysis
Defina TAINAH_ANALYSIS_CACHE_DIR para usar outro diretório.
O nome do programa é Tainah. A forma Tainá é geralmente associada a “estrela” ou “estrela da manhã”. O linguista Eduardo de Almeida Navarro, da USP, apresenta outra origem: Taína, palavra do Nheengatu, com o sentido de “criança”. Escolhemos a grafia Tainah para o projeto.
O projeto é distribuído sob a licença LGPL-3.0-or-later. Consulte LICENSE
e NOTICE.md para os termos e avisos de autoria.
O adaptador preserva o limite de consoante do oto.ini e ajusta sua duração na saída pela velocidade. O mapa de vogais segue AudioProcess::TimeStretch do lessampler-ng: notas curtas usam apenas a parte necessária da gravação. O WORLD analisa o WAV completo para preservar o contexto dos cortes. A CLI usa o andamento recebido para posicionar a curva de pitch em intervalos de cinco ticks musicais.
A ABI continua na versão 2. Os campos opcionais target_consonant_ms e has_target_consonant, acrescentados ao final da estrutura, permitem controlar o tempo sem alterar os campos anteriores. lt_render_options_size() permite ao host verificar esse suporte. A flag C ajusta a duração de saída, sem mover o limite original da consoante.
O build executa testes de ABI, casos matemáticos comparados às equações do lessampler e 16 comparações de áudio entre CLI e biblioteca. A aprovação auditiva e a validação de cada host devem ser registradas separadamente.
O Tainah 3.0.2 corrige o manifesto de expressões do OpenUtau: as abreviações
respeitam o limite de quatro caracteres e as flags Q (corte de agudos) e F
(formantes) evitam colisões com H (lowpass) e P (normalize). O executável
continua aceitando H e P para projetos do UTAU clássico.
A versão reúne os controles de formantes introduzidos na 2.3.0 e os 16 novos controles acústicos adicionados na 3.0.1. A ABI permanece na versão 2, com os novos campos adicionados ao final da estrutura para manter a compatibilidade com hosts existentes.
-
Distorção e mapeamento de formantes (
$F_1, F_2, F_3$ ): suporte a razões de frequência independentes (f1_ratio,f2_ratio,f3_ratio) relativas aos formantes intrínsecos analisados na vogal de origem. O espectro WORLD é deformado suavemente ao longo de 6 âncoras no eixo de frequência, mantendo harmônicos acima de$F_4$ ancorados. -
Transição em Curva-S Antecipada: glissando contínuo de formantes baseado em cosseno elevado (raised-cosine) iniciado antecipadamente dentro da zona de coarticulação consoante-vogal (
$0{,}35 \cdot C$ ), eliminando estalos e degraus tímbricos. -
Acoplamento de Nasalidade Acústica: modelagem de vogais nasais (como no padrão BRAPA) com polo nasal de baixa frequência em ~270 Hz, notch anti-formante em
$1{,}38 \cdot F_1$ e amortecimento da largura de banda de$F_1$ . -
R Rótico / Retroflexo (
[ɚ]do inglês e R caipira): atenuação e aproximação de$F_3$ em direção a$F_2$ (~1650–1750 Hz,f3_ratio < 0.88), simulação de cavidade sublingual com anti-ressonância logo acima de$F_3$ e reforço do cluster$F_2\text{--}F_3$ . -
Formante do Cantor: reforço harmônico na faixa de projeção acústica (~3000 Hz,
$\pm 250$ Hz). -
API
lt_analyze_formants: nova função exportada para análise rápida e detecção precisa de$F_0$ ,$F_1$ ,$F_2$ ,$F_3$ via interpolação quadrática e extração do envelope espectral logarítmico em 128 pontos (LT_FORMANT_ENVELOPE_POINTS).
Os novos controles incluem abertura e anterioridade vocálica, tensão, arejamento,
calor acústico, punch do ataque, modulação de vibrato, seleção do método de F0,
de-esser dinâmico, growl, saturação glotal, humanização e escala laríngea
adaptativa. As 22 flags estão descritas no Tainah.yaml distribuído com o pacote.