Neste artigo, falarei sobre meu complemento para o liquidificador, sobre os motivos que me levaram a criá-lo, o processo de desenvolvimento e o "sucesso" no YouTube.

Antecedentes
Tudo começou com o fato de que há cerca de um ano (em novembro de 2018) eu vi na oferta do YouTube uma capa tão incomum em
The Ultimate CanonO cara gravou as amostras de cada nota da música e, através de edição cuidadosa, montou a música inteira a partir delas. Para quem é, mas acho que é pelo menos engraçado. E o número de visualizações (na época um pouco mais de 1.000.000) indicava que o tópico (
1% de habilidade de guitarra e 99% de edição ) era popular.
Tenho certeza de que aqueles que estavam pelo menos um pouco envolvidos na mixagem de músicas sabem que às vezes é mais fácil cortar e mover a faixa um pouco do que pedir ao guitarrista descuidado que reproduza a parte. Eu também costumava fazer capas clássicas e, mesmo assim, tive a ideia de criar uma capa exatamente como o cara do vídeo. E agora vejo que "minha ideia foi descaradamente roubada" e tive um bom escapamento. Fiquei aborrecido porque meu trem partiu, mas de repente me ocorreu que eu poderia fazer o mesmo, mas em um nível diferente, adicionando uma nova etapa -
1% de guitarra 1% editando 98% de habilidades de programação .
Além disso, isso permitirá criar composições muito mais complexas que, quando editadas manualmente, poucas pessoas têm paciência.
Desenvolvimento
Portanto, a tarefa era automatizar o processo de fatiar amostras de som em uma composição musical.
Antes de tudo, era necessário transmitir de algum modo aos dados futuros do programa sobre a composição, suas notas, faixas, instrumentos. Pensei imediatamente no GuitarPro e suas opções de exportação de dados: MusicXML e MIDI.
Pesquisas me levaram a escolher um analisador para arquivos midi no Python
music21 . Este não é apenas um analisador, mas, além disso, não preciso de nada do módulo. E os análogos estavam com documentação terrível ou não podiam fazer o que eu precisava tão facilmente quanto a música21.
Ótimo, agora posso obter dados de arquivos midi sobre faixas, anotações, posição e duração. Nós estamos indo além.
Agora, com base nesses dados, você precisa cortar de arquivos de vídeo / áudio. Então eu escolhi rápido o suficiente. Definitivamente o Blender, apesar de suas modestas capacidades como editor de vídeo. Tenho experiência em trabalhar com o Adobe PremierePro, After Effects, mas existe meu próprio dialeto de script, que não é útil em nenhum outro lugar, e seus recursos são desconhecidos para mim. No Blender, quase qualquer ação pode ser executada através de um script Python. E isso já corresponde à linguagem da música21. Vale a pena explicar que, naquela época, eu não conhecia o Python, portanto, também considerei esse projeto uma excelente ocasião para me familiarizar com essa linguagem popular. Bingo!
Gradualmente, comecei a me aprofundar no idioma, emitindo notas de arquivos médios para o console por meio do music21, rapidamente observei como criar complementos no liquidificador e passei à primeira tarefa prática: gerar dados de amostra. Ele gravou todas as notas únicas no violão e começou a cortar, mas logo parou. Meu programador interno protestou contra esse trabalho meticuloso (e pode haver muitas notas para cada instrumento: 30-50). E isso teria que cortar as notas e renderizá-las individualmente em arquivos separados, e, para isso, ajustar cada nota de trilha no início da linha do tempo ... Em geral, esse processo teve que ser simplificado.
A solução foi usar algo no Blender como marcadores. Estes são essencialmente pontos com informações textuais que podem ser definidas em um quadro específico. A lógica era a seguinte: o usuário organiza seu vídeo e áudio (se o áudio foi gravado em uma faixa separada), direciona-os um para o outro e marca com os marcadores o início de cada nota no vídeo, e no texto do marcador indica que tipo de nota é (A #, D, C e etc.) e sua duração máxima no registro. Em seguida, as informações sobre os marcadores são registradas em um arquivo e já são usadas ao cortar notas individuais.

O próximo ponto já era o “núcleo” real do funcional - notas de corte e seu posicionamento na linha do tempo. Ironicamente, não há nada de especial a dizer: havia muita documentação de leitura, a documentação do Blender estava longe de ser sempre bastante detalhada, mas gradualmente eu consegui o que queria. Quando vi (e ouvi) o primeiro resultado (era uma composição curta do grupo Epidemic - Frodo), a felicidade não tinha limites. Eu acho que todo mundo conhece o sentimento quando algo finalmente sai.

A qualidade do código é ruim. Eu tentei fazê-lo às pressas, porque Imaginei que não era o único que pensava em algo assim e não gostaria de me antecipar aqui (spoiler! Quão ingênuo eu era). Portanto, não houve tempo para aderir ao estilo e refletir sobre a estrutura, tentei obter um protótipo de trabalho mais rápido.
Nuances
Agora, as nuances da implementação. O Blender tem um limite nas camadas do editor, no máximo 32. Na imagem, você pode ver que as amostras de áudio e vídeo (verde e roxo) ocupam 14 camadas cada e são formadas em ordem crescente, e novamente no início de seu setor. Isso se deve ao fato de o Blender não permitir que você crie uma amostra em cima de outra. E na música, muitas vezes acontece que a próxima nota começa mesmo antes do final do som anterior. Portanto, para evitar sobreposição, decidi gerar a próxima nota em uma camada superior à anterior e, quando as camadas do setor terminarem, começar novamente a partir da primeira camada (é improvável que a primeira nota soe até 14 camadas à frente). Sim, isso poderia ser feito de maneira mais inteligente, salvando camadas, mas como eu disse, estava com pressa.
O mais atento pode notar que o setor inteiro é de 2 por 14 camadas, isso é 28 e o máximo no Blender é 32. O fato é que, para notas de desova, você precisa gerar 2 faixas originais (vídeo e áudio) através de um script e depois cortá-las nota. E você não pode aparecer em cima de outra faixa, então reservei as camadas 31 e 32 para esse negócio. Os dias 29 e 30 são usados para armazenamento intermediário de faixas já geradas: a geração ocorre em uma faixa do arquivo midi, as notas são agrupadas em uma faixa, transferidas para a camada 29/30, geramos a próxima faixa etc.
Há também uma nuance: nas pontuações médias, existe uma propriedade como a velocidade de reprodução. E isso pode mudar muitas vezes dentro da composição. Na music21, nunca encontrei a oportunidade de acompanhar essas mudanças de velocidade. Portanto, a velocidade das notas geradas coincidirá com a primeira velocidade especificada no arquivo midi. Existem 2 soluções:
- para cada seção com uma nova velocidade, faça um novo arquivo midi somente com ele;
- gere notas de seção novamente com o modificador de velocidade Tempo (fator multiplicativo à velocidade inicial).

Prefiro adicionar minhas próprias faixas para cada velocidade no GuitarPro, depois no Blender, basta gerá-las com um modificador de velocidade, é mais rápido e mais difícil ficar confuso.
Utilitários de edição de vídeo
Agora que você possui um conjunto de rascunhos de faixas geradas, é necessário montar uma capa assistível de assistir. I.e. posicione as faixas nos cantos do vídeo, troque de acordo com a música etc. No liquidificador, isso é muito ruim. Para aplicar o efeito à faixa, você precisa “colar” outra faixa de cima, que será renderizada ao renderizar e colocá-la na posição correta.
De nota particular são acordes. É quando várias notas tocam ao mesmo tempo, ou seja, ao renderizar um vídeo, apenas a nota de topo do acorde será exibida. A solução foi adicionar o mesmo efeito (felizmente, eles não se quebram quando sobrepostos). Se durante a edição normal das faixas geradas eu pudesse fazer tudo manualmente, editar demais todas as notas do acorde. Como você sabe, eu também automatizei essa nuance. Agora, com o clique do botão "Chordify strips", as amostras selecionadas serão transformadas conforme necessário e cada nota do acorde será desenhada.


E mais um ponto de automação: às vezes as amostras geradas têm partes vazias entre si. Isso se deve ao fato de que as pontuações nesses locais são subitamente vazias. No GuitarPro, isso soa normal, devido a vários efeitos, o som da nota é mantido no meio. No entanto, vazios se formam no liquidificador. Eles devem ser preenchidos esticando a nota anterior antes da próxima. Exatamente essa tarefa é realizada pelo botão "Preencher lacunas".
A funcionalidade para trabalhar com o volume, bem como a capacidade de substituir uma nota ausente por uma nota diferente, mas com um valor diferente da afinação, também foi escrita para pequenas coisas, o que permite ir além dos limites da faixa do instrumento (embora na prática não ultrapasse 1 oitava).
Glória no youtube
Então, o complemento está pronto. Cerca de um mês e meio foi gasto desde o início da idéia, ele trabalhava à noite nas horas vagas. Está na hora de fazer uma capa que vai bater na capa da mão daquele cara. Eu escolhi a mesma música, mas em um arranjo de rock: Canon Rock. É muito mais melódico e complicado do que o original e demonstrará claramente o novo nível da minha abordagem. Sim, e como resposta a um vídeo já popular, pode atrair a atenção de um público.
No texto acima, eu me enganei um pouco, porque Comecei a trabalhar na capa no processo de criação do complemento, para que, usando o exemplo dele, entenda que funcionalidade é necessária e a implemente.
E agora a
capa está pronta e polida ! Ele filmou a introdução e o final, nos quais, em inglês quebrado, ele tentou explicar a inclinação da minha resposta. Ele falou algumas palavras deliberadamente com erros (elogiado, duplo efeito), esperando que os espectadores alterassem os comentários. Preparou uma visualização. Com a respiração suspensa, antecipando o triunfo esperado, carregou e publicou o vídeo. Enviei-os em grupos de capas e joguei o link no Instagram para aquele cara. A propósito, ele tem um apelido muito triunfante: Ralph Jay Triumfo.
O tempo passou. Não houve triunfo. No primeiro dia, obtive cerca de 100 visualizações, metade das quais eram minhas e minhas amigas. Então houve uma pausa. A cada novo dia eu ficava cada vez mais decepcionado com todo esse empreendimento. As pessoas realmente não entendem o quão legal eu fiz isso? Por que o boca a boca não funciona? Ou talvez a ideia em si fosse legal apenas na minha cabeça?
Seja como for, gostei do resultado e gradualmente comecei a fazer mais e mais capas novas.
Naquela época, participei das filmagens do programa “Modelagem Cerebral” na TV local e uma vez mencionei meu ofício em uma conversa com o apresentador. O resultado foi um pequeno relatório sobre mim. Mãe,
eu estou na TV !
Eu entendi perfeitamente que os aposentados assistem principalmente à TV local, então não havia expectativas disso.
Mesmo assim, eu queria trazer o código do complemento à minha mente, otimizar a geração e colocar o complemento em domínio público, mas a falha do triunfo diminuiu meu ardor. Além disso, o lançamento completo da nova versão do Blender estava sendo preparado e a API estava mudando. Eu queria esperar pelo seu lançamento no verão e transferir o complemento para a nova versão, e depois lançá-lo, mas, novamente, não havia nenhum desejo em particular.
E agora, depois de quase um ano, quando as visualizações do primeiro vídeo mal excederam 600, decidi colocar um complemento no público e escrever este artigo, talvez pelo menos isso ilumine meu tempo de lazer, mas ao mesmo tempo eu falei.
Obviamente, tentei transferir o complemento para a nova versão 2.80, mas o editor de vídeo não apenas não foi melhorado, mas também piorado. O desempenho é muito pior, às vezes falha ao gerar faixas pesadas. O próprio editor começou a desacelerar. A incapacidade de abafar certas faixas de áudio (espero que isso seja um bug, e elas serão corrigidas no próximo lançamento menor). Enquanto isso, o complemento precisa da boa e antiga versão 2.79
Aqui está um
link para o complemento , não esqueça de colocar music21 no interpretador python blender. Estou ansioso pela aparência maciça de capas sintetizadas suas.