Vídeos sobre reconstrução de Midi a partir de Synthesia (e similares)

Certa vez, enquanto estava no YouTube, procurando melodias educacionais interessantes, me deparei com vídeos com o Synthesia, alguns dos quais realmente gostei, decidi baixar e aprender ... =) Mas, infelizmente, existem vídeos, mas ninguém queria fazer upload de arquivos midi = (


Indo para o Google decidiu procurar talvez existam soluções prontas que me agradariam, mas, infelizmente, pelo fato de eu encontrar apenas conversores de áudio no midi, o que me deixou um pouco chateado ... Sem pensar duas vezes, decidi que seria suficiente restaurar a taxa de quadros MIDI nos videoclipes ..., e eu decidi tentar implementar esse negócio ....


Eu não queria escrever tudo do zero, porque decidi o que faria nos componentes prontos que o Debian GNU / Linux me fornece, dos quais o python era mais adequado.


No início da implementação, decidi que usaria imagens prontas (retiradas de videoclipes), mas após os primeiros envios percebi que não fazia sentido ... Descobriu-se que é muito lento e também consome recursos significativos no parafuso ... Então decidi tentar algo novo por conta própria. OpenCV (eu queria sentir isso por um longo tempo), descobriu-se que o OpenCV funciona muito bem com o fluxo de vídeo, fornecendo todas as funções necessárias (contar um pixel, exibir quadros e texto).


Por exemplo, abrir um arquivo de vídeo e receber um quadro pode ser descrito em duas linhas:


vidcap = cv2.VideoCapture('test.mp4') success,image = vidcap.read() 

E se você quiser, pode despejar imediatamente os quadros no parafuso:


 cv2.imwrite("/tmp/frame%d.jpg" % frame, image) 

Depois de algum tempo, escrevi uma função para gerar as posições das teclas do teclado virtual e exibi-las (na forma de retângulos) na parte superior da imagem de fluxo e carreguei a imagem, resultando no seguinte:
imagem


Assim, tendo decidido que, quadro a quadro, ao ler a imagem do fluxo de vídeo, vou ler as notas ativas da posição das teclas virtuais (apenas as notas cujos pixels coincidem com a cor de referência ou não estão muito longe dela) são consideradas ativas e as enviamos para o midi. Eu não podia simplesmente registrar notas, como se a situação estivesse em um teclado midi comum, é apenas um pouco mais fácil ... verifiquei o vídeo, vi quantas notas recebi (e havia muitas) que eu achava ruim, tudo o que eu precisava fazer era descobrir como escrever notas em um arquivo, procurando um pouco , encontrou um ótimo pacote python python-midiutil. Depois de algum tempo, consegui gravar notas no midi. Como se viu, python-midiutil é um saquinho muito simples e muito fácil de usar. Por exemplo, a criação de um arquivo e a adição de anotações são feitas em algumas linhas:


 mf.addTrackName(track, time, "Sample Track") mf.addTempo(track, time, 60 ) mf.addNote(track, channel, pitch, keytime, duration, volume) with open(outputmid, 'wb') as outf: mf.writeFile(outf) 

O download do midi resultante no LMMS acabou sendo bem-sucedido. Antes de tudo, restaurei algumas das minhas músicas favoritas. Então ficou claro que a função de gerar posições-chave não era muito conveniente de rolo para rolo, sua localização era alterada. Decidi fazer uma GUI, fiz uma simples, mas com uma função de colocação de teclas


imagem


Eu acho que esse programa pode ser útil para muitos, porque eu postei tudo no github

Source: https://habr.com/ru/post/pt450710/


All Articles