/minara-music — Gerar música + efeitos sonoros a partir do roteiro
Transforme o roteiro por segundo do vídeo em uma planilha de dicas musicais, cues.json, e então sintetize o BGM e os efeitos sonoros sincronizados com a imagem localmente. A síntese é puramente numpy local e a saída é determinística (as mesmas dicas + semente sempre produzem o mesmo áudio). Não chama nenhum serviço externo e não tem custo.
Fonte: a abordagem de pontuação do filme de lançamento do Minara V2, generalizada em um script reutilizável; examples/v2-launch.json é a planilha de dicas desse filme.
Fluxo de trabalho (em ordem)
- Ler o roteiro: obter o roteiro por segundo do minara-video (ou do storyboard / planilha de tempo da narração). Se o roteiro tiver colunas "atmosfera sonora" ou "música", segui-las; caso contrário, julgar a partir do clima da imagem.
- Escrever a planilha de dicas: no
audio-src/cues.jsondo projeto, escreva:duration(= duração final do vídeo),bpm(padrão 120),key(padrãoA minor; para peças alegres/celebratórias, pode usarC major),seed.sections: divida o roteiro em seções musicais, escolha umaenergypor seção e usenotepara descrever a imagem correspondente (para fácil referência cruzada).sfx: cada ação visível no roteiro (toque, digitação, pedido preenchido, notificação aparecendo, transição, bloqueio aterrissando) recebe um efeito sonoro, cronometrado para o segundo fornecido no roteiro.
- Mostrar a planilha ao operador primeiro; não renderizar ainda: em tabelas markdown, liste "intervalo de tempo / energia / imagem correspondente" e "tempo do sfx / tipo / ação correspondente", e aguarde que eles digam OK antes de renderizar. Eles editam a planilha, não o código.
- Renderizar:
python3 ~/.claude/skills/minara-music/scripts/make_music.py <projeto>/audio-src/cues.json -o <projeto>/assets [--vo <projeto>/assets/vo.wav] - Autoverificação: o script imprime cada seção; em seguida, meça o volume por seção para confirmar que o clímax é o mais alto, a quebra/outro caem claramente e o ducking está funcionando. Para problemas de audição (muito cheio, um efeito sonoro roubando o foco), ajuste
level/gaine re-renderize; cada renderização leva alguns segundos. - Entregar: forneça o caminho para
bgm.wav(oubgm-duck.wav), e useopen -Rpara destacarpreview-mix.wavpara que possam ouvir. No HyperFrames, adicione como faixa de áudio, com a narração em uma faixa separada.
Saída
| Arquivo | Conteúdo |
|---|---|
bgm.wav | Música + efeitos sonoros, 48 kHz estéreo, pico de -1 dBFS, fade-in de 0,4 s no início e fade-out de 3,2 s no final |
bgm-duck.wav | Gerado quando há narração: a música é reduzida em duck_db (padrão -8 dB) onde ocorre fala; efeitos sonoros não são reduzidos |
preview-mix.wav | Gerado quando há narração: música + narração mixados, apenas para audição, não para o vídeo final |
Tipos de seção energy
| energy | Som | Usado para |
|---|---|---|
silent | Nenhuma música | Pausas que precisam de silêncio completo |
intro | Drone baixo + pad suave | Abertura, logotipo, dados convergindo |
light | Pad + arpejo leve + batida esparsa | Interações móveis, demonstrações leves de recursos |
build | Adiciona baixo e um kick a cada batida, riser automático no final da seção | Acumulação gradual levando a um momento chave |
full | Bateria completa + clap + baixo + arpejo | Demonstração contínua de recursos principais (backtesting, entrada ao vivo, automação) |
breakdown | Remove bateria e baixo, deixando apenas pad e arpejo suave; o kick retorna no último compasso | Mudanças de cena, seções sobre segurança/privacidade que precisam "respirar" |
climax | O mais cheio: bateria completa + melodia principal + crash no início da seção; adiciona automaticamente um riser se a seção anterior não for build | Nome do produto / frase de lançamento aparece |
outro | Resolve no acorde tônico + sino da marca, desaparecendo com toda a mixagem | Cartão final, CTA |
Cada seção pode receber "level": 0.5–1.3 para ajustar seu volume finamente. Os acordes seguem barras globais (menor i–VI–III–VII, maior I–V–vi–IV), para não quebrarem entre seções.
Tipos de efeitos sonoros (sfx)
| type | Som | Ação típica | Parâmetros opcionais |
|---|---|---|---|
tap | Clique curto | Toque em botão, seleção | gain |
typing | Tiques contínuos de digitação | Digitação em um campo de entrada | chars, cps (caracteres/segundo, correspondendo à velocidade de digitação na tela) |
success | Dois tons de sino ascendentes | Pedido preenchido, estratégia em execução | gain |
notify | Alerta de três notas | Notificação ou lembrete aparecendo | gain |
bell | Tom de sino único | Avatar/logotipo aparece | note (MIDI, padrão 81) |
blips | Tons curtos subindo | Progresso de backtest, carregamento de dados | count, step (segundos), note |
sparkle | Grãos cintilantes + ruído suave | Partículas convergindo, abertura | dur |
riser | Ruído ascendente | Acumulação de transição adicionada manualmente | dur |
whoosh | Varredura reversa | Janela colapsando, transição push/pull | dur |
thud | Baque de trava grave | Trava, confirmação, aterrissagem pesada | gain |
crash | Prato | Ênfase extra | gain |
Todo efeito sonoro pode receber gain para ajustar seu volume.
Regras
- Efeitos sonoros seguem apenas ações visíveis: se não houver ação correspondente na tela, não adicione efeito sonoro, o mesmo que "não adicione texto casualmente".
- Copie os tempos do roteiro; não estime: o
tdo sfx usa os segundos reais do roteiro por segundo / linha do tempo da animação;cpspara digitação usa a velocidade de digitação na animação. - Se o comprimento ou a ordem do roteiro mudar, atualize cues.json primeiro e re-renderize; não estique o áudio manualmente.
- Não use serviços de música AI externos ou faixas baixadas da web; quando for necessária música licenciada comercialmente, o operador fornece o arquivo.