§1O problema
Sites de cifra têm erros, não têm a versão exata que você quer e a tela não acompanha o que você está tocando. Não existia um app que gerasse a cifra a partir do áudio e andasse junto com a música.
§2O que eu construí
- Análise de áudioPython na placa de vídeo: separa instrumentos, acha batidas, acordes, tom, partes (verso, refrão, solo), letra com tempo e notas.
- App webBiblioteca de músicas, fila de processamento, tela de revisão (corrigir acorde/parte/letra com o áudio tocando) e tela de tocar.
- FerramentasDicionário de acordes (desenhos de violão) e afinador.
- Seguidor pelo microfoneDescobre onde você está na música, tocando junto com a gravação ou sozinho.
- Música por linkYouTube baixa direto; Spotify, Apple e Deezer só identificam a música.
- Casca nativaPara iPhone/iPad (guardar no aparelho, funcionar offline) e versão de Apple Watch.
§3As partes difíceis
5 itens- 01
Seguir a música ao vivo
Escolher o “caminho mais provável” em vez de reagir a cada instante; várias referências (mix, base sem voz, acordes) para não confundir intro com trecho sem voz; ajuste medido com um teste de bancada, não no olho.
- 02
Separar verso de refrão
O sinal mais forte foi a letra repetida, comparada por palavras, porque a transcrição quebra o mesmo refrão de jeitos diferentes.
- 03
Modelos de áudio antigos em Python novo
Modelo ONNX instalado sem as dependências antigas, e evitar travas (laço infinito da transcrição no fim da música; limite de tempo na fila).
- 04
Detalhes de plataforma
WKWebView dentro de SwiftUI caindo no iOS 26 (trocado por UIKit), áudio M4A convertido antes da análise, 403 intermitente do download resolvido com tentativa em vários formatos.
- 05
Sem banco de dados
Cada música é uma pasta de arquivos, com a saída da IA nunca editada à mão e a versão revisada à parte.
§4Resultado
As três primeiras etapas do plano e a parte web da quarta estão prontas. O app web está em produção no meu servidor em casa, e eu uso numa rede privada. A casca nativa funciona num iPhone de verdade (não só no simulador), e a versão de Apple Watch também funciona.
§5Stack
- Python + GPU (Demucs, Whisper, beat_this, basic-pitch)
- Next.js 16 + TypeScript
- Design system próprio
- Swift / UIKit (casca nativa)
- Service worker (offline)
- pm2
- Tailscale (HTTPS para o microfone)
- yt-dlp