music-skill

Crie, verifique e entenda música a partir do terminal, para um agente que não pode ouvi-la. Use quando alguém quiser criar música — uma faixa de house ou techno, uma batida, um loop, um fundo para vídeo ou voz, música com duração, andamento ou tonalidade exatos, stems ou MIDI — ou quiser saber o que há em um trecho de áudio ("qual é o BPM", "qual a tonalidade", "onde está o drop", "por que essa mixagem está turva"), ou precisar verificar o áudio antes de publicá-lo (loudness em LUFS, pico verdadeiro, clipping, compatibilidade mono). Também para entender por que um groove funciona — síncope, swing, microtiming, condução de vozes, breakdown e drop — e para verificar música criada por um modelo generativo.

O que é music-skill?

O music-skill é uma ferramenta avançada projetada para agentes de IA (como Claude Code, Cursor ou Codex) que não podem ouvir áudio, permitindo que criem, analisem e verifiquem música diretamente do terminal, transformando cada elemento sonoro em dados visuais legíveis: padrões como texto, números para verificação e uma imagem (espectrograma) para inspeção. Ele suporta a criação de faixas eletrônicas (house, techno, etc.) com controle preciso sobre andamento, tonalidade, duração e loudness, utilizando um método de busca baseado em regras de percepção rítmica e harmônica (como os estudos de Butler 2006, Witek 2014, e Krumhansl & Kessler 1982). Além disso, permite "ouvir" qualquer áudio (incluindo vídeos e música gerada por modelos) extraindo informações como BPM, tonalidade, loudness, pico verdadeiro, equilíbrio espectral e uma linha do tempo detalhada, além de verificar se o arquivo atende a alvos específicos (ex.: -14 LUFS, pico verdadeiro abaixo de -1 dBTP). A skill também oferece análise de mixagem entre stems e gere relatórios completos (score.txt/score.json) que explicam cada nota e regra aplicada.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kylefritz/music-skill/tree/HEAD

Installed? Explore more Produtividade e Colaboração skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que music-skill faz?

Os scripts residem em scripts/ ao lado deste arquivo; escreva como $S abaixo, mas escreva o caminho absoluto em cada comando, porque as variáveis de shell não persistem entre chamadas Bash.

Você não pode ouvir, então cada etapa transforma a música em algo que você pode ler: padrões como texto, números para verificar e uma imagem para olhar. Fazer uma faixa é semente → ler a partitura → renderizar → look → corrigir. Entender áudio é look → ler a linha do tempo e a ficha → julgar. Entregar é check, para que "está com a loudness correta e não vai clipar" seja um fato.

Requer uv e ffmpeg. Todo comando roda como uv run --no-project --with numpy --with scipy --with pillow python -I <script> …, escrito como RUN abaixo.

Criando uma faixa: banger.py

RUN $S/banger.py --seed 4242 --out <scratch>/b4242

Uma faixa de house ou techno de 72 compassos leva cerca de 10 segundos: track.wav (48 kHz estéreo, -14 LUFS), track.mid, score.txt e score.json. A mesma semente e opções sempre geram o mesmo arquivo.

DesejoOpção
Um estilo--style deep-house (120-124 BPM), tech-house (124-128), peak-techno (130-136), melodic-techno (122-126)
Um andamento, uma tonalidade--bpm 124, --key A, --mode minor (ou dorian, phrygian)
Uma duração--bars 24 (qualquer número par a partir de 8), ou --seconds 30: ele escolhe os compassos e ajusta o andamento para que o último compasso termine 2,5 s antes e o reverb termine no tempo
Um fundo para voz--lufs -22 --mute lead (tente também mutear clap)
Partes para um DAW ou verificação de mix--stems escreve stems/<layer>.wav; track.mid é sempre escrito

Os compassos definem a forma: 8-10 é um loop; 12-22 é intro, drop, outro; 24-46 adiciona um breakdown e um build-up entre dois drops; 48 ou mais é a forma completa com uma seção de groove e partes de 8 compassos.

Leia a partitura antes de renderizar mais. Ela imprime os padrões como texto:

seed 4242  Melodic techno  122 BPM  G minor  swing 1%  chords: pluck
       1...2...3...4...
kick   X...X...X.X.X...
clap   .o..X.......X...
hat    x.X...X.x.X...X.
bass   .....ORO.O.O3RRR
chords ...X............  i7 Gm7 | bVII7 F7 | bVI7 Ebmaj7 | iv7 Cm7
lead   47244.42.22..442 .3315.553.5.3557
perc   fit  74%   1293 patterns tried   weakest: Evenly spread 52%, Clear mix 20%

. pausa, o suave, x médio, X forte. Baixo: R tônica, 5 quinta, O oitava, 3 terça. Lead: grau da escala 0-9 em dois compassos. fit é quão bem a parte atende suas regras; weakest nomeia as regras que perdeu.

Para escolher uma semente, faça uma audição como texto primeiro: python3 $S/groove.py --seed N executa apenas a busca (0,5 s, sem áudio, sem dependências). Teste algumas, leia os acordes e o lead, renderize aquela que você defenderia. Você não pode julgar "soa bem": diga isso e entregue o arquivo para a pessoa.

Como uma faixa é escrita

O método vem do Banger Lab. É busca, não um modelo, e cada regra vem de um estudo de percepção rítmica ou de altura.

  1. Rolar. A semente escolhe um estilo, andamento, tonalidade, escala e alvos: chimbal por compasso, quanta síncope, quantos acordes diferentes.
  2. Adivinhar. Cada instrumento começa como um padrão aleatório de 16 passos.
  3. Testar. Cada mudança de um passo (adicionar, remover, deslizar, mais forte, mais suave) é pontuada contra as regras do instrumento, além de alguns saltos aleatórios de dois passos. A melhor é mantida.
  4. Travar. Quando nenhuma mudança aumenta a pontuação, a parte está pronta e o próximo instrumento é escrito sobre ela. Ordem: kick, clap, chimbal, chimbal aberto, percussão, baixo, acordes, lead. Cada camada ganha quatro inícios aleatórios e mantém o melhor.
  5. Ouvir. banger.py renderiza cada instrumento sozinho, mede onde sua energia se concentra em seis faixas, e uma segunda passagem reajusta chimbal, percussão, baixo, acordes e lead para que as partes não preencham a mesma faixa no mesmo passo.
  6. Arranjar. As partes se tornam seções, com preenchimentos no final de cada 4 e 8 compassos, um low-pass que abre durante o breakdown, um rufar de caixa e um riser no build, um tempo de silêncio e então o drop.

O que faz o groove funcionar: as regras

Use estas ao escrever ou editar música por qualquer meio: um padrão à mão, MIDI ou um prompt para um modelo de música. score.json tem a pontuação e a fonte de cada regra para uma faixa.

ParteRegraFonte
Kickem cada tempo; no máximo 0-2 extras, colocados logo antes de um tempo; nunca dois seguidosButler 2006
Clapforte nos tempos 2 e 4, ausente nos tempos 1 e 3; extras são suaves e em semicolcheias fracasButler 2006; Witek 2014
Chimbalnas contracorrentes, entre os kicks; uniformemente distribuído; igual nas duas metades do compasso; forte e suave alternadosButler 2006; Toussaint 2005
Chimbal abertono meio entre dois kicks, nunca em cima de um kick ou clapButler 2006
Percussãouniformemente distribuída, onde kick e clap estão silenciosos, com 25-50% de notas fantasmas suavesToussaint 2005; Witek 2014
Baixotoca onde o kick não toca; tônica (ou sua oitava) 60-90% do tempo, quinta ou terça para corPlomp & Levelt 1965; Krumhansl & Kessler 1982
Acordeso compasso 1 é o acorde principal; as fundamentais se movem por grau conjunto, terça ou quarta; cada voz se move pelo caminho mais curto para o próximo acordeKrumhansl & Kessler 1982; Tymoczko 2011
Leadnotas do acorde nos tempos fortes; nunca um semitom acima de uma nota do acorde; passos pequenos; compasso 1 pergunta (termina fora da nota principal), compasso 2 responde com ritmo semelhante (termina nela); toca nas lacunas entre os acordesPlomp & Levelt 1965; Huron 2001; Caplin 1998
Tudosíncope média: algumas notas em passos fracos que pulam um passo forte. Pouco é rígido, demais perde o ritmoWitek et al. 2014
Temporizaçãoswing e push/pull ficam abaixo de 12 ms por instrumento (chimbal atrasado, clap adiantado). Deslocamentos maiores reduziram as avaliações de grooveDavies et al. 2013
Mixagemduas partes na mesma faixa no mesmo passo se borram mutuamente; no máximo 4 partes acertando um passoPlomp & Levelt 1965
Formabreakdown, build-up e drop: tire o kick e o baixo, aumente a tensão, traga-os de voltaSolberg & Dibben 2019; Butler 2006

Cada nota vem de uma escala e o kick é afinado na nota principal, por isso qualquer semente permanece na tonalidade. Os pesos entre regras são uma simplificação, não ajustados a dados de audição, então fit classifica padrões dentro de uma faixa; não é uma pontuação de qualidade entre faixas.

Ouvindo: look

RUN $S/listen.py look TRACK --sheet <scratch>/sheet.png

Funciona em qualquer coisa que o ffmpeg decodifique, incluindo som de vídeo e música de um modelo generativo. Imprime andamento, tonalidade, loudness, pico verdadeiro, balanço, largura estéreo, avisos e uma linha do tempo:

track.wav  2:24.1  122.0 BPM (força 7.9)  G minor (pontuação 1.62; próximo Eb major 1.61)
  loudness -14.0 LUFS  pico verdadeiro -1.3 dBTP  faixa 9.3 LU  pico-para-loudness 12.7 dB
  balanço, dB abaixo da faixa mais alta  sub -2  bass 0  low mid -8  mid -17  high -24  air -27
  linha do tempo, janelas de 15.7 s (8 compassos): loudness, depois cada faixa em dB contra seu nível em toda a faixa
    início     LUFS        sub    bass low mid     mid    high     air
     0:47.2   -12.6         +2      +2      +1      +2      +1      -2
     1:03.0   -21.1        -29     -12      +1      -7      -7      -6
     1:18.7   -20.5        -33     -12      +1      -1      +3      +6
     1:34.4   -12.6         +2      +2      +1      +2      +1      -0

Leia a estrutura pela linha do tempo. Sub e bass 20-30 dB abaixo é um breakdown (kick e baixo estão ausentes). High e air subindo enquanto sub fica fora é um build. Tudo de volta de uma vez é o drop. Em seguida, leia a ficha (forma de onda, espectrograma, seis faixas, curva de loudness): um riser é uma linha diagonal, um kick é uma coluna de pontos brilhantes na parte inferior, um bloco plano de cor sem lacunas é uma mixagem sem dinâmica. Dê os tempos a partir do eixo da ficha ao descrever um momento.

Quão confiável é, medido em 24 faixas renderizadas com respostas conhecidas:

  • Andamento: dentro de 0.2 BPM em 24 de 24. Prefere 70-190 BPM, então metade ou dobro do tempo é possível em outro material. Força abaixo de 2 significa sem batida estável: diga que o BPM é um palpite.
  • Tonalidade: a nota principal estava correta em 19 de 24, e é menos confiável em áudio curto ou esparso. Maior vs menor é uma conclusão mais fraca, e não consegue distinguir modos. Quando as duas maiores pontuações estão próximas, ele informa; relate ambas.
  • Loudness e pico verdadeiro: os mesmos números que ffmpeg -af ebur128=peak=true com 0.1 de precisão.

Stems uns contra os outros: mix

RUN $S/listen.py mix <scratch>/b4242/stems

Por stem: loudness e onde sua energia se concentra. Depois, os pares que mais se sobrepõem (mesma faixa, mesmo momento), e stems muito silenciosos em comparação com o mais alto. Um par acima de 60% são duas partes brigando pelo mesmo espaço: mova uma no tempo, altura ou nível.

Números a atingir e verificar

AlvoNúmero
Uma faixa sozinha (streaming normaliza perto disso)-14 LUFS integrado
A mixagem final de um vídeo web ou podcast-16 LUFS
Um fundo sob uma vozcerca de -22 LUFS
Pico verdadeiro, sempre-1 dBTP ou abaixo: a codificação com perda ultrapassa
Pico-para-loudness abaixo de 7 dBexcessivamente limitado: plano e cansativo
Correlação estéreo abaixo de 120 Hz inferior a 0.6o baixo pode desaparecer em mono (telefones, clubes)
RUN $S/listen.py check TRACK --lufs -14 --peak -1 --seconds 30 --bpm 124

check deve passar antes de entregar um arquivo; ele sai com código 1 em caso de falha. Ele também falha em clipping e silêncio no início. Música de um modelo precisa disso mais: um fundo gerado mediu +3.2 dBTP com 2.121 amostras clipeadas. Corrija com ffmpeg (loudnorm=I=-14:TP=-1.5:LRA=11), depois verifique novamente.

Entregando

  • Cópia pequena: ffmpeg -i track.wav -c:a aac -b:a 160k track.m4a (ou -c:a libmp3lame -q:a 2). Execute check na cópia: a codificação desloca o pico verdadeiro.
  • Sob um filme: renderize com --seconds <duração do filme> e --lufs -22, e entregue ao video-skill, que verifica a mixagem final.
  • Um loop: --bars 8, depois corte a cauda de 2.5 s (-t <8 compassos em segundos>) para que repita de forma limpa.
  • Mantenha score.txt junto com o arquivo: sua última linha é o comando exato que o criou.

Quando esta é a ferramenta errada

banger.py cria música eletrônica four-on-the-floor a partir de osciladores e ruído. Não tem samples, vocais ou outros gêneros, e sua mixagem é mais escura e estreita que uma gravação masterizada (o médio da demo fica 17 dB abaixo do seu baixo). Para instrumentos acústicos, uma canção ou um clima nomeado, use um modelo de música ou uma faixa de biblioteca, depois execute look e check no resultado. O que esta ferramenta oferece em vez disso: andamento, tonalidade e duração exatos, o mesmo resultado da mesma semente, stems, MIDI, nada para licenciar e uma razão para cada nota.

Erros comuns

ErroCorreção
Dizer que uma faixa "soa ótima"Você não a ouviu. Relate os números e o que a ficha mostra; a pessoa julga o som
Renderizar 20 sementes para escolher umagroove.py --seed N imprime a pontuação em 0.5 s; renderize a escolhida
Comparar fit entre faixasEle classifica padrões apenas dentro de uma faixa
Confiar na tonalidade de um clipe de 10 segundosForneça os dois principais candidatos
Entregar o WAV sem checkVerifique-o e verifique também a cópia codificada
Música de um modelo usada como estálook primeiro: clipping e picos +dBTP são comuns
Um fundo competindo com a voz--lufs -22 --mute lead e mantenha 1-4 kHz livres

Habilidades Relacionadas