Skip to content
studiopomarPublic

About

Biblioteca C++ de resampling vocal com WORLD, ABI C e flags UTAU.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

16 Commits

Folders and files

Ícone oficial do Tainah
Ícone por Mori-P

Tainah

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.

Baixar

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.

Tainah-LTS

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.

Recursos

  • Analisa a amostra e ressintetiza a voz com WORLD.
  • Usa offset, consonant e cutoff recebidos do projeto para respeitar os dados de oto.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.yaml no pacote para ver os controles disponíveis no OpenUtau.
  • No OpenUtau, o manifesto usa Q para corte de agudos e F para formantes, evitando conflito com as flags H (lowpass) e P (normalize) do projeto. No UTAU clássico, H e P continuam aceitos.
  • A flag P no UTAU clássico e F no OpenUtau deslocam os formantes sem alterar a nota: valores positivos elevam a posição dos formantes e valores negativos a reduzem.
  • A flag C ajusta o tamanho da região consonantal fixa do oto.ini: C0 mantém o valor original, C-100 desativa essa região e C100 a 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 sobre C.
  • 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.

Como o resampling funciona

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.

Flags

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.

Como o executável conversa com os editores

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.

Compilar e testar

Requisitos

  • 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.py

O 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-failure

Biblioteca para integrações

Alé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.

Cache de análise

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-analysis ou ~/.cache/kamafeu/tainah-analysis

Defina TAINAH_ANALYSIS_CACHE_DIR para usar outro diretório.

Sobre o nome

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.

Licença

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.

Leituras sobre o nome

Correções de tempo do Tainah 2.2.1

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.

Novidades do Tainah 3.0.2

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.

About

Biblioteca C++ de resampling vocal com WORLD, ABI C e flags UTAU.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages