En este artículo hablaré sobre mi complemento en la licuadora, sobre las razones que me llevaron a crearlo, el proceso de desarrollo y el "éxito" en YouTube.

Antecedentes
Todo comenzó con el hecho de que hace aproximadamente un año (en noviembre de 2018) vi en la oferta de YouTube una portada tan inusual en
The Ultimate CanonEl chico grabó las muestras de cada nota de la canción y, a través de una minuciosa edición, reunió toda la canción a partir de ellas. Para quién es, pero creo que es al menos divertido. Y el número de visitas (en ese momento un poco más de 1,000,000) indicó que el tema (
1% de habilidad de guitarra y 99% de habilidad de edición ) era popular.
Estoy seguro de que aquellos que al menos estuvieron un poco involucrados en la mezcla de canciones saben que a veces es más fácil cortar y mover ligeramente la pista que pedirle al guitarrista descuidado que reproduzca la parte. También solía hacer portadas clásicas, e incluso entonces tuve la idea de arrastrarme y crear una portada exactamente como lo hizo el tipo del video. Y ahora veo que "mi idea fue robada descaradamente" y obtuve un buen escape. Me molestó que mi tren se fuera, pero de repente me di cuenta de que podía hacer lo mismo, pero a un nivel diferente, agregando un nuevo paso:
1% guitarra 1% edición 98% habilidades de programación .
Además, esto le permitirá crear composiciones mucho más complejas que, cuando se editan manualmente, pocas personas tienen paciencia.
Desarrollo
Entonces, la tarea era automatizar el proceso de cortar muestras de sonido en una composición musical.
En primer lugar, era necesario transmitir de alguna manera al programa del futuro datos sobre la composición, sus notas, pistas, instrumentos. Inmediatamente pensé en GuitarPro y sus opciones de exportación de datos: MusicXML y MIDI.
Las búsquedas me llevaron a elegir un analizador de archivos midi en Python
music21 . Esto no es solo un analizador, sino que además de esto, no necesito nada del módulo. Y los análogos tenían una documentación terrible o no podían hacer lo que necesitaba tan fácilmente como la música21.
Genial, ahora puedo obtener datos de archivos midi sobre pistas, sus notas, su posición y duración. Vamos más lejos
Ahora, en base a estos datos, debe cortar de archivos de video / audio. Entonces elegí lo suficientemente rápido. Definitivamente Blender, incluso a pesar de sus modestas capacidades como editor de video. Tengo experiencia trabajando con Adobe PremierePro, After Effects, pero existe mi propio dialecto de secuencias de comandos, que no es útil en ningún otro lugar, y sus capacidades son desconocidas para mí. En Blender, casi cualquier acción se puede realizar a través de un script de Python. Y eso ya coincide con el lenguaje de la música21. Vale la pena explicar que en ese momento no estaba familiarizado con Python, por lo tanto, también consideré este proyecto como una excelente ocasión para familiarizarme con este lenguaje popular. Bingo!
Poco a poco, comencé a profundizar en el lenguaje, envié notas de archivos midi a la consola a través de music21, rápidamente examiné cómo hacer complementos para la licuadora y procedí a la primera tarea práctica: generar datos de muestra. Grabó cada nota única en la guitarra y comenzó a cortar, pero pronto se detuvo. Mi programador interno protestó contra este trabajo minucioso (y puede haber muchas notas para cada instrumento: 30-50). Y esto tendría que cortar las notas y renderizarlas individualmente en archivos separados, y para hacer esto, ajustar cada nota de pista en longitud al comienzo de la línea de tiempo ... En general, este proceso tuvo que simplificarse.
La solución fue usar algo así en Blender como marcadores. Estos son esencialmente puntos con información textual que se puede establecer en un marco específico. La lógica era esta: el usuario organiza su video y audio (si el audio se grabó en una pista separada), los conduce entre sí y marca con los marcadores el comienzo de cada nota en el video, y en el texto del marcador indica qué tipo de nota es (A #, D, C y etc.) y su duración máxima en el registro. Luego, la información sobre los marcadores se registra en un archivo y ya se utiliza al cortar notas individuales.

El siguiente punto fue el "núcleo" real de lo funcional: notas de corte y su posicionamiento en la línea de tiempo. Irónicamente, no hay nada especial que decir: había mucha documentación de lectura, la documentación de Blender estaba lejos de ser siempre bastante detallada, pero gradualmente logré lo que quería. Cuando vi (y escuché) el primer resultado (era una composición corta del grupo Epidemic - Frodo), la felicidad no conocía límites. Creo que todos conocen el sentimiento cuando finalmente sale algo.

La calidad del código es pobre. Traté de hacerlo a toda prisa, porque Me imaginé que no era el único que pensaba en tal cosa, y que no querría adelantarme aquí (¡spoiler! ¡Qué ingenuo era!). Por lo tanto, no había tiempo para adherirse al estilo y reflexionar sobre la estructura, intenté obtener un prototipo que funcionara más rápido.
Matices
Ahora por los matices de la implementación. Blender tiene un límite en las capas del editor, máximo 32. De la imagen se puede ver que las muestras de audio y video (verde y morado) ocupan 14 capas cada una y se forman en orden ascendente, luego nuevamente al comienzo de su sector. Esto se debe al hecho de que Blender no le permitirá generar una muestra encima de otra. Y en la música a menudo sucede que la siguiente nota comienza incluso antes del final del sonido anterior. Por lo tanto, para evitar la superposición, decidí generar la siguiente nota en una capa más alta que la anterior, y cuando las capas del sector terminen, comience nuevamente desde la primera capa (es poco probable que la primera nota suene hasta 14 capas hacia adelante). Sí, esto podría hacerse de manera más inteligente guardando capas, pero como dije, tenía prisa.
El más atento podría notar que todo el sector es de 2 por 14 capas, esto es 28, y el máximo en Blender es 32. El hecho es que para generar notas, debe generar 2 pistas originales (video y audio) a través de un guión y luego cortarlas. nota Y no puedes generar encima de otra pista, así que reservé las capas 31 y 32 para este negocio. Los días 29 y 30 se utilizan para el almacenamiento intermedio de pistas ya generadas: la generación se produce bajo una pista del archivo midi, luego las notas se agrupan en una pista, se transfieren a la capa 29/30, generamos la siguiente pista, etc.
También hay un matiz: en las puntuaciones midi existe una propiedad como la velocidad de reproducción. Y puede cambiar muchas veces dentro de la composición. En music21, nunca encontré la oportunidad de seguir estos cambios de velocidad. Por lo tanto, la velocidad de las notas generadas coincidirá con la primera velocidad especificada en el archivo midi. Hay 2 soluciones:
- para cada sección con una nueva velocidad, cree un nuevo archivo midi solo con ella;
- generar notas de sección nuevamente con el modificador de velocidad Tempo (factor multiplicativo a la velocidad inicial).

Prefiero agregar mis propias pistas para cada velocidad en GuitarPro, luego en Blender, es suficiente generarlas solo con un modificador de velocidad, es más rápido y más difícil confundirse.
Utilidades de editor de video
Ahora que tiene un borrador de pistas generadas, debe montar una cubierta que se pueda ver. Es decir Posicione las pistas en las esquinas del video, cambie según la música, etc. En una licuadora, esto es bastante malo. Para aplicar el efecto a la pista, debe "pegar" otra pista desde arriba, que se representará al renderizar, y colocarla en la posición correcta.
De particular interés son los acordes. Esto es cuando suenan varias notas al mismo tiempo, es decir al renderizar un video, solo se mostrará la nota más alta del acorde. La solución fue agregar el mismo efecto (afortunadamente, no se rompen cuando se superponen entre sí). Si durante la edición normal de las pistas generadas pude hacer todo manualmente, entonces editar cada nota del acorde es demasiado. Como saben, también automaticé este matiz. Ahora, con solo tocar un botón "Chordify strips", las muestras seleccionadas se transformarán según sea necesario y se dibujará cada nota del acorde.


Y un punto más de automatización: a veces las muestras generadas tienen partes vacías entre ellas. Esto se debe al hecho de que las puntuaciones en estos lugares son de repente lugares vacíos. En GuitarPro, esto suena normal, debido a varios efectos, el sonido de la nota se mantiene en el medio. Sin embargo, se forman vacíos en la licuadora. Deben rellenarse estirando la nota anterior antes de la siguiente. Exactamente esta tarea se realiza mediante el botón "Rellenar huecos".
La funcionalidad para trabajar con volumen, así como la capacidad de reemplazar una nota ausente por una diferente, pero con un valor diferente del tono, también se escribió para pequeñas cosas, lo que le permite ir más allá de los límites del rango del instrumento (aunque en la práctica no es más de 1 octava).
Gloria en youtube
Entonces, el complemento está listo. Aproximadamente un mes y medio se gastó desde el comienzo de la idea, trabajó por las tardes, en su tiempo libre. Es hora de hacer una tapa que supere la tapa de la mano de ese tipo. Elegí la misma canción, pero en un arreglo de rock: Canon Rock. Es mucho más melódico y más complicado que el original, y demostrará claramente el nuevo nivel de mi enfoque. Sí, y como respuesta a un video ya popular, puede atraer la atención de una audiencia.
En el texto anterior, engañé un poco, porque Comencé a trabajar en la portada en el proceso de escribir el complemento, de modo que, usando su ejemplo, entiendo qué funcionalidad se necesita e implementarlo.
¡Y ahora la
cubierta está lista y pulida ! Filmó la introducción y el final, en el que, en un inglés quebrado, trató de explicar la inclinación de mi respuesta. Él pronunció algunas palabras deliberadamente con errores (cumplido, doble y ef), con la esperanza de que los espectadores modifiquen sus comentarios. Preparó una vista previa. Con la respiración contenida, en previsión del triunfo esperado, subió y publicó el video. Los envié en grupos de portadas y abrí el enlace en Instagram a ese tipo. Él, por cierto, tiene un apodo muy triunfante: Ralph Jay Triumfo.
El tiempo paso No hubo triunfo. El primer día obtuve alrededor de 100 visitas, la mitad de las cuales eran mías y de mis amigos. Luego hubo una pausa. Con cada nuevo día me decepcioné más y más en toda esta empresa. ¿La gente realmente no entiende lo genial que lo hice? ¿Por qué el boca a boca no funciona? ¿O tal vez la idea en sí era genial solo en mi cabeza?
Sea como fuere, me gustó el resultado, y gradualmente comencé a hacer más y más portadas nuevas.
En ese momento, participé en la filmación del programa "Brain Modeling" en la televisión local, y una vez mencioné mi oficio en una conversación con el anfitrión. El resultado fue un pequeño informe sobre mí. Mamá,
estoy en la televisión !
Entendí perfectamente que los pensionistas ven principalmente la televisión local, por lo que no había expectativas de esto.
Incluso entonces, quería traer a mi mente el código del complemento, optimizar la generación y poner el complemento en el dominio público, pero el fracaso del triunfo disminuyó mi ardor. Además, se estaba preparando el lanzamiento completo de la nueva versión de Blender y la API estaba cambiando. Quería esperar su lanzamiento en el verano y transferir el complemento a la nueva versión, y luego sacarlo, pero nuevamente, no había un deseo particular.
Y ahora, después de casi un año, cuando las vistas del primer video apenas superaron los 600, decidí poner un complemento en el público y escribir este artículo, tal vez al menos alegrará mi tiempo libre, pero al mismo tiempo reprendí.
Por supuesto, intenté transferir el complemento a la nueva versión 2.80, pero resultó que el editor de video no solo no mejoró, sino que incluso empeoró. El rendimiento es mucho peor, a veces se bloquea al generar pistas pesadas. El editor mismo comenzó a disminuir la velocidad. La incapacidad de amortiguar ciertas pistas de audio (espero que esto sea un error, y se solucionarán en la próxima versión menor). Mientras tanto, el complemento necesita la buena versión anterior 2.79
Aquí hay un
enlace al complemento , no olvide poner music21 en el intérprete de Python blender. Espero con ansias la aparición masiva de portadas sintetizadas de usted.