Generador de música API de audio web Experiencia de principiante

Contexto y antecedentes


Tengo 62 años. Hace unos tres años decidí intentar escribir un sistema bastante complejo, antes de eso solo había 20 líneas básicas en 1981, cuando 3 meses de informática nos atraparon en el quinto año de la facultad de radio (NSTU, anteriormente NETI). Se considera que el profesional es el propietario del tema y gana sobre él, de modo que soy un principiante.

Por otro lado, he estado lidiando con algoritmos relacionados con la música durante la mayor parte de mi vida, encontré el proceso de desarrollo y el hardware y el software, y hasta donde pude, participé en él. En 1978, desarrolló y ensambló el sintetizador Mini-Moog (creo que fue el primero en los Urales), desarrolló y produjo el primero en la tarjeta de sonido URSS con un sintetizador para Agat7 (9), el análogo soviético de Apple II, diseñó el módulo de síntesis FM para una de las fábricas, colaboró ​​con Cakewalk (EE. UU.), PGMusic (Canadá), PowerFX (Suecia), más a menudo bajo el esquema: "las ideas y la implementación son de nosotros, el presupuesto es de ellos", participó en exhibiciones internacionales de música MusikMesse (Alemania), NAMM (EE. UU.), Etc.Todo esto es una pequeña parte de lo que hice, por supuesto, no solo, sino con el equipo que había reunido en un momento particular.

Además, participó activamente en la organización del Departamento de Informática (primero en la URSS) en el Conservatorio Novosibirsk. De 1983 a 2004, también enseñó Acústica Musical, Informática, Ingeniería de Sonido, y preparó una disertación sobre modelado informático de interpretación musical (ISBN 5-9294-0023-7) ...

Sí, todo comenzó con monitores en blanco y negro, disquetes, 256 kB de RAM, una PC personal de montaje musical ... Los músicos tuvieron que explicar todo en sus dedos, porque en su mayor parte estas personas maravillosas están lejos de todo lo estricto y ordenado. Y si un trombonista podía llenar una página de texto, era genial, y el violonchelista que programó Chizhik-fawn era solo una estrella. Por cierto, algunos maestros se resistieron activamente a todo este tema, ¡pero ahora tratan de privarlos de las computadoras!

Esta experiencia se ha vuelto muy útil para mi desarrollo, capacitación y profundización en el tema. La informática, como la educación física, era obligatoria para todas las facultades y un flujo constante de estudiantes nos permitió realizar muchas pruebas, experimentos en psicoacústica, reconocimiento de patrones, comunicarse con músicos teóricos y ... entender que prácticamente no tienen datos y fórmulas exactas. Al menos los que necesita el desarrollador de equipos y programas musicales. Los musicólogos, desafortunadamente, son esencialmente historiadores que describen el pasado. Si tuvieran ciencia, entonces ... probablemente, llegar a su consulta sería más que el alcalde de una ciudad con una población de más de un millón. ¿Cuánto pagaría un músico famoso por una "fórmula exitosa" y un "pronóstico de ventas"?

Entonces, digamos que necesitamos obtener respuestas que funcionen para tales algoritmos, por ejemplo:

a) sonó una melodía (bueno, incluso si ya se ha grabado con "notas" en MIDI), ¿cómo determinar dónde está el tónico? - El músico lo hará fácilmente, pero una respuesta clara (algoritmo) no le dará;

b) hay una melodía, ¿cómo elegir los acordes correctos? Sí, el director del coro probablemente lo hará mejor que el vocalista, pero ambos, incluso si dan instrucciones, no son muy claros. Por supuesto, desde su punto de vista, será estricto. Solo cuando el ingeniero comience a traducirlo en un algoritmo habrá varios problemas difíciles de superar indefinidos ...

c) o el baterista toca algo moderadamente complicado, o el saxofonista improvisa: ¿cómo “despegar” el tamaño, los ritmos fuertes / débiles, el comienzo / final de una frase musical, la desaceleración / aceleración expresiva? No se trata de EDM (Electronic Dance Music). El músico intérprete siente y cumple con las "reglas" transmitidas por el maestro de una manera "haz lo que yo hago", pero un ingeniero necesita números, gráficos, proporciones, y todo esto es prácticamente imposible de obtener del intérprete o del musicólogo-teórico.

Pero fue en esas preguntas que quería encontrar respuestas. De hecho, un trabajo que suena real puede tener un modelo crudo: una composición musical en formato MIDI, que es, en esencia, una "partitura electrónica". Estos son datos exactos, pero ¿cómo trabajar con ellos? En general, lo más interesante para mí al final fue el análisis y la conversión de datos MIDI y algoritmos * como:

Modelado de rendimiento 1) ,
Morphing 2) ,
Generación de música 3)

Y para todo esto, determinar la clave, la armonización automática, la fraseología automática son solo subtareas separadas ... Con el tiempo, se recibieron respuestas aceptables para todos estos temas, se crearon algoritmos y programas que incluso se metió en Cakewalk / Sonar.

* Un pequeño descifrado:

1) análisis de datos MIDI cuantificados, reconocimiento de "objetos musicales" (frases, figuras) y su cambio en la parte de Velocity, NoteOn, Duration, así como la imposición de curvas Tempo, PitchWeel, Expression, Modulation para hacer un uso más completo de los recursos del sintetizador y lograr una mayor expresividad.

2) análisis de todo el trabajo y partes individuales con el objetivo de transformarlos de un tamaño a otro (por ejemplo, de 4/4 a 6/8 o 7/4), de una armonía / armonía a otras. Además, que el resultado sería "comestible", de modo que, en opinión del músico, es la música "correcta" sin violaciones obvias.

3) generación de "partitura electrónica": un sistema que, al usar 1) y 2) y reproducir datos MIDI, produciría una salida de sonido similar a la producida por un músico, un arreglador usando una computadora o un instrumento en vivo. Aquellos. no es algo abstracto, generado por IA, no solo para demostración en un círculo estrecho de especialistas, sino completamente "humano" y adecuado para su uso.

En esta larga historia, hubo bastantes momentos divertidos, si nos fijamos en el presente, por ejemplo, para la primera 386 PC tuve que dar 2 nuevos moscovitas "Chignon" (IL 2715), cada una de 290 mil rublos. O, como conservatorio, casi compré un Minsk 32 usado en la rama siberiana de la Academia de Ciencias: creo que este monstruo, más débil que un teléfono inteligente, parecía ocupar 60-80 m 2 y consumía electricidad, probablemente como un bar + sauna ...

Entonces, mis empleados programaron (trabajamos con Z80, MOS 6502, "Electronics-60", en las primeras PC Win de la RDA, con procesadores de señal TMS y dispositivos analógicos ...), todos los días veía "krakozyabra" en las pantallas y pensaba que todos ellos (programadores) "no son de este mundo". ¡Aunque la partitura musical no es más fácil! ¡Y después de todo, algunos músicos escuchan música, miran las notas e incluso obtienen placer estético si les gusta! En general, me pareció que todos los que escriben el código son genios y esto no es mío en absoluto ... Pero, como lo demostró el futuro, me equivoqué. No puedo decir que se perdió mucho tiempo, pero probablemente el destino de muchos proyectos habría sido completamente diferente ...

Primera experiencia práctica


Por experiencia previa, aprendí que las cosas más "difíciles" y "desagradables" para un programador son 2 cosas: GUI e interfaces (es decir, cambiar de un entorno a otro. Por ejemplo, recibir datos MIDI de un dispositivo externo), especialmente cuando No hay soluciones preparadas adecuadas.

Primero tomé AutoPlay Media Studio (Indigo Rose Software), es un poco un diseñador para tontos. Inicialmente, aparentemente diseñado para crear rápidamente un CD, menú de DVD y autorun.exe. Pero resultó que hay un mar de funciones, y dentro (en LUA) puedes hacer casi todo: animación, jugar ogg. Por lo tanto, la mayor parte del trabajo "desagradable" (por cierto, creo que los recién llegados simplemente se detienen en esos momentos) no se pudo hacer: todo está listo.

Como resultado, durante 2 meses en casa después de horas, escribí un análogo de un programa de música de entrenamiento que desarrollamos y entregamos oficialmente. Además, con otra GUI, una funcionalidad más interesante: es bueno hacer que el contenido de audio y gráfico y probarlo no sea difícil. Lo mostró en la oficina y le preguntó a uno de los presentadores cuánto tiempo necesitaba para hacer esa versión, ¡la respuesta fue de 6 meses! Aquí, aparentemente, pensé por primera vez: tal vez no solo debería consentirme, sino comenzar a estudiar algo e intentar hacer algo serio y ... ¿organicé el trabajo correctamente? De hecho, su respuesta fue honesta: simplemente, "ellos" no usarían el constructor, sino que escribirían todo ellos mismos.

Desde 2009, dediqué parte del tiempo a trabajar en un estudio de grabación y crear anuncios de video. Una vez, un amigo preguntó si era posible hacer rápidamente (y no costosamente) cien clips de 1 minuto (aparentemente para promoción en YouTube). Horrible amor tales tareas! (Por cierto, hace tiempo que sé que si un programador se ve obligado a hacer algo no muy creativo 3 veces, escribirá un guión). Pregunté a los programadores, y si existe dicho programa, ¿qué puede "presionar" los botones en la pantalla? Wow, esto es AutoIt!

En general, por diversión, escribí un guión que:

  1. Lanzó Opera, abrió el sitio de una compañía (al parecer, holandesa) especializada en texto a voz;
  2. En la página me desplacé a RU (voz actuando en ruso);
  3. abrió un archivo * .txt en el Bloc de notas, donde se copiaron de antemano 20-30 chistes de la red, párrafos;
  4. copié una broma, la pegué en el campo del sitio;
  5. Lanzó SoundForge en el registro y en el sitio activó la reproducción;
  6. grabó y guardó el resultado en una carpeta en mp3 con el nombre: "número de serie + los primeros 15 caracteres del texto del chiste".

Funcionó y fui feliz cuando era niño. Después de eso, le dije a mi amigo: no hay problema para hacer 100 clips económicos (de buena calidad), solo tome fotos, música, titulares, subtítulos, descripciones, etc. - Pondré todo en orden (en tamaño, color), lo pondré en carpetas, haré una plantilla + Determinaré sus variaciones (¡al azar!) Y ... No puedo hacerte 100, sino 200 de estos clips (en Vegas Pro con AutoIt es fácil), viéndolos selectivamente, y ya seleccionarás la cantidad correcta para ti ... No tenías que hacer todo esto, pero gracias por su pregunta!

Más tarde, gradualmente comencé a corregir algo en el sitio, leer algo, probar algo por el interés deportivo. En particular, hacer scripts en JavaScript / CSS para la animación simple necesaria para la creación de video. Así que aparecieron algunas ideas generales y un poco de experiencia en PHP, HTML, jQuery, JavaScript, CSS, MySQL. Las "grietas" casi desaparecieron y dejé de tener miedo de este mismo tema de la "programación". El punto de inflexión final en relación con ella y sus habilidades ocurrió cuando entendí 2 puntos:

  • Toda esta esfera es un mundo sin fin e incluso un programador fuerte no siempre responderá la pregunta si no es su área. Como en cualquier otro campo. En general, sí, bueno, y los matices, busque un especialista limitado, pero más bien excave. Afortunadamente hay una red.
  • Resolví el 99% de las preguntas que tuve durante el desarrollo yo mismo, y a veces de manera más eficiente que en los ejemplos encontrados en Internet. Al mismo tiempo, entiendo que, por el estilo de escritura, mi código podría ser horrible.

Generador de música


No recuerdo cómo me topé con la API de audio web, en este momento no tenía una LLC, una IP o un equipo, pero después de 2-3 experimentos, cuando el "sonido se fue", me di la vuelta más grave para mí. El proyecto es un generador de música (que ahora llamo AlexAr ). De hecho, en Web Audio había todo lo necesario: generadores, filtros, sobres, mezcladores, un procesador (en C ++) y jQuery, JavaScript y CSS nos permitieron resolver todos los problemas con la GUI. De hecho, en Web Audio puedes hacer, como me parece, tanto el procesamiento como la síntesis de sonido de cualquier complejidad.

Aquí comenzó el verdadero trabajo, casi, como en la juventud, cuando tienes más de 25 años. Comencé de 3 a 4 veces, descarté una versión del sistema y recogí una nueva. A veces, cambiando radicalmente el enfoque para diseñar un módulo en particular. Al mismo tiempo, hice muchos experimentos y probé nuevos algoritmos que no había usado antes. Hizo varios descubrimientos por sí mismo que no habrían sucedido sin iniciar el sistema. En particular, en psicoacústica, en la percepción de la "similitud" de las pistas de música: qué parámetros darán música "diferente" y cuáles, con sus diferencias formales, son "lo mismo" de oído. Se encontraron algunas cosas muy útiles en la aplicación de la armonía, en la imitación en la síntesis de las pulsadas, en las frases al cambiar los acordes y en una mejor comprensión de la "precisión del estilo". Es posible que todo esto esté abierto y descrito. Pero en la vida a menudo sucedelo cual es más fácil (y más útil) de pensar en ti mismo.

Sí, sería genial si la API de audio web permitiera la vinculación, el uso de VSTi para síntesis o algo más listo. Por otro lado, hubo una ocasión para recordar a los jóvenes y escribir todos los sintetizadores necesarios, para inventar, optimizar, tanto en estructura como en algoritmos y contenido. Casi, como en los viejos tiempos, cuando un artista no solo pintaba, sino que también pintaba ...

Como resultado, después de varios sobornos y alteraciones, modernizaciones (que era una buena escuela y entrenamiento mental), el sistema se volvió estable y completamente operativo. Bueno, no en la forma, por supuesto, cuando se puede transferir a un tercero. Es aproximadamente como un automóvil hecho en casa que solo "obedece" al creador y si se rompe, no habrá nadie para arreglarlo ...

imagen

En general, la composición terminada durante 4-5 minutos, se crea en 40-50 segundos. (en Intel Core i5, 2.8GHz, 12GB RAM). Hice una tarea, por ejemplo, "hacer 100 pistas de baile", cambiar a almorzar o salir a caminar. Llegó en una hora y, si el sistema no fallaba, escuchaba y determinaba el %% de la idoneidad del resultado. Luego cambié algo en los parámetros y comencé de nuevo. Si me comporté "razonablemente", es decir establezca parámetros que no conduzcan a un desenfoque del estilo (por ejemplo, esto sucederá si se aplica la armonía de jazz en EDM), luego el 90-95% de las pistas sonaron bastante decentes, y si no, entonces el 60-70 %% podría desecharse.

El sistema ha funcionado, puedes alegrarte, pero parece que comenzaron problemas ridículos pero reales: "¿Cómo puedo escuchar tanta música?" Y la realización de un momento más: "¿Y quién es el autor?" Un buen amigo "en el tema" dijo que "el autor es una computadora, incl. no te pertenece "... Si es así, entonces es una pena, ingresé melodías, frases, armonías, formas allí, configuré un par de cientos de parámetros, donde a veces se reflejan 5 ms en el resultado, y el sistema solo generó el resultado, nuevamente de acuerdo con el algoritmo, que Invertí en él ... Busqué en la red, no entendí eso en un caso similar con derechos de autor ...

Como resultado, lancé unas 3.500 canciones con un tiempo de reproducción total de más de 200 horas y paré, o más bien cambié, planeo lanzar SongModeler, un generador de arreglos en línea basado en enfoques desarrollados en AlexAr. Bueno, ejemplos de generación automática de música en AlexAr se pueden encontrar aquí .

Para los oyentes demasiado exigentes, quiero decir que pasé más tiempo en programación, armonía, melodía, forma (es decir, notas), pero la síntesis y la mezcla, por supuesto, pueden ser mucho mejores. Al final, verifiqué las ideas, el enfoque en sí mismo, es cierto. Y para tales proyectos se necesita un equipo, los solitarios rara vez abordan temas interdisciplinarios. Es cierto, por otro lado, el trabajo se vuelve mucho más cómodo cuando no hay nadie "ni por encima de ti ni debajo de ti". Pero la verdadera ironía es que cuando tenía un equipo y recursos, no apuntaba a algo así porque pensaba que era demasiado complicado.

Ya en algún lugar en el medio de trabajar en AlexAr, me di cuenta de que es muy posible que si comencé a programar antes, entonces 10 programadores (a veces tenía mucho más personal) podrían ser reemplazados por tres :

Yo mismo (diseño, programación, pruebas, contenido);
muy inteligente : para cuellos de botella, enfoques de inteligencia, nuevas bibliotecas, servicios (inmediatamente después de la escuela secundaria o de 3-4 cursos);
adicto al trabajo productivo para tareas rutinarias, sin imaginación, que no le pica la mano para aplicar hoy lo que apareció ayer.

¡Estoy seguro de que la tarea se resolvería más rápido y cuánto nervios y dinero se ahorrarían! ¿De dónde viene el ahorro? Entonces, antes del almuerzo, me senté a probar algo: "bueno, el botón no es conveniente y el indicador se desplazaría más hacia la derecha". OK, me senté y lo hice en media hora, el estado de ánimo era de 5+. ¿Y cómo se decidiría esto antes en mi oficina con el equipo, cuando usted mismo no escribe? Al principio, preguntaba cuánto tiempo tomaría, luego lo dibujé en PhotoShop, conté los píxeles, escribí un TK, lo incluí en el plan, esperé un par de días o ... lo rechacé, funciona, ya está bien. Y tan constantemente.

Conclusiones y motivación.


No sé cuán armoniosamente podré formular las conclusiones reales, pero aún no en mi campo, pero lo intentaré.

  1. , . , , , , . , . , 10 , ( ?).
  2. — . , - macOS Android, . , , . , .
  3. GUI , — . , - . , , -.
  4. - - , - — , , . , , - — . — «». 7 , 6 . — , — . , - . ? — , . - , « » — .. , «» .
  5. , , (software engineer, !) . , , ( ) -, . , , engineer, , «, », .. «Copy Paste».
  6. , , «» , , - . . - … , . . — . , , , , , .
  7. , . , , IDE, . , , — NotePad++, FireFox ZIP- — , . «» . , « », .
  8. ? . , , — UnDo/ReDo. JavaScript , , — . , , , . UnDo — , , , .

En general, me parece que los adultos, especialmente aquellos con experiencia en ingeniería que no han estado involucrados en la programación en la vida, deberían intentarlo. Si conoce su tema, entonces el 50% ya está hecho. Necesitas lógica, una comprensión clara de la "física, naturaleza" de tu área, y esto, muy probablemente, lo tienes. No hay nada de qué preocuparse en "capas torcidas" y JavaScript es mucho más simple que el ruso o el inglés. Al final, es posible que no se convierta en un verdadero ingeniero de software, pero estas habilidades, incluso las pequeñas, agregarán otra opción a sus calificaciones de ingeniería. Sí, inmediatamente dejará de mirar a las personas de TI como personas con un halo sobre sus cabezas, y podrá establecer una tarea para ellos a un nivel más competente. Después de todo, van a tu área, donde eres un profesional. O tal vez está implementando su proyecto en sus datos, con los que siempre ha soñado,pero las condiciones para su implementación no funcionaron. No sé, creo que tuve suerte porque no tenía miedo de intentarlo. Y de todos modos, programar para un ingeniero, ¡ESTO ES LIBERTAD!

Los mejores deseos para todos.

PD: Si alguien está interesado en la historia de mi trabajo a lo largo de los años de forma más detallada, entonces está aquí .

All Articles