La historia de la música y los lenguajes de síntesis de sonido se remonta a los lenguajes Music N a partir de la década de 1950. Puede rastrear los hilos desde allí hasta una variedad de lenguajes que se desarrollaron en los años 90, incluidos CSound , ChucK y SuperCollider . CSound podría verse como el último de los lenguajes Music N "tradicionales", que se centran principalmente en la síntesis de sonido, mientras que ChucK y SuperCollider también agregan herramientas flexibles para la composición. (También hay una variedad de lenguajes gráficos de apuntar y hacer clic, como Max MSP y PureData , que también descienden del paradigma Music N, pero solo me interesan los lenguajes basados en texto por el bien de esta pregunta).
SuperCollider siempre fue mi herramienta preferida. Proporciona una gran variedad de códigos de operación (módulos de procesamiento de señales de bajo nivel) y muchas formas de unirlos sobre la marcha, desencadenar eventos algorítmicamente y responder de forma interactiva a señales externas.
Sin embargo, SuperCollider ahora es una tecnología antigua. La primera versión salió en 1996 y la versión 3 fue de código abierto en 2002. Si bien hay nuevas características desde entonces, el núcleo del lenguaje y el sistema de síntesis no ha cambiado y permanece optimizado para una máquina de principios de la década de 2000. En particular, está claramente configurado en un paradigma de un solo procesador y no puede aprovechar el paralelismo proporcionado por las GPU modernas, aunque se ha agregado soporte para múltiples núcleos de CPU. También hay algunas características de su arquitectura que probablemente se repensarían si se rediseñara ahora. (Un ejemplo es la necesidad de ejecutar el servidor de síntesis como una aplicación separada del propio lenguaje, lo que hace que sea muy difícil lograr una sincronización precisa de la muestra, entre otras cosas).
Así que me pregunto si hay sucesores de SuperCollider y sus primos de esa época, ya existentes o en el horizonte, que vayan más allá de lo que se puede lograr con las herramientas enumeradas anteriormente. Las posibilidades para el paralelismo de GPU parecen inmensas, y también ha habido avances en el diseño de lenguajes de programación desde 2002 que podrían dar como resultado una herramienta aún más asombrosa y flexible. En particular, las máquinas virtuales ahora pueden ser casi tan eficientes como el código C simple, lo que significa que el código DSP podría compilarse justo a tiempo, eliminando la limitación de apegarse a un conjunto preprogramado de códigos de operación.
Otra opción para un proyecto moderno de "Music N"/SuperCollider sería tomar la forma de una biblioteca en Python o algún otro lenguaje. Podría decirse que sería una opción de diseño más sensata, ya que hoy en día es bastante sencillo tener una interfaz de Python de alto nivel para ejecutar código de bajo nivel. Estaría muy feliz de recibir respuestas de esa forma.
¿Alguien sabe de algún desarrollo o investigación en la dirección de una "Música moderna N"? Estoy empezando a volver a la composición musical y la programación DSP después de un largo período de estar ocupado con otras cosas, y sería realmente increíble tener una herramienta nueva y emocionante para aprender, con funciones que van más allá de lo que he usado. antes de. Como se mencionó anteriormente, estoy hablando de lenguajes basados en texto para programación DSP y composición algorítmica, en lugar de sistemas visuales basados en parches.
En resumen, mi principal interés es averiguar si hay proyectos que se centren en técnicas de síntesis de vanguardia, utilizando nueva tecnología que no estaba disponible a principios de la década de 2000. (Pero las respuestas que enumeran otros tipos de paquetes también son útiles).
De hecho, hay nuevos idiomas, así como bibliotecas dentro de otros idiomas. Voy a enumerar algunos que me vienen a la mente, y tal vez regrese y amplíe mi respuesta más adelante.
editar 17/03: he revisado ligeramente la respuesta. Cabe destacar que, en gran medida, SuperCollider se usa a menudo como back-end para sistemas basados en una variedad de lenguajes y paradigmas; en algunos casos, los sistemas que hace unos meses cuando escribí originalmente esto usaban sus propios motores de audio ahora usan scsynth
.
editar 21/04: Agregar SOUL a la lista, pero también vale la pena mencionar que, mientras tanto, creo que WebAudio y WebAssembly están madurando bien. Ahora hay una compilación de WASM con scsynth
la que realmente debería jugar más, no estoy seguro de cuánta adopción tiene hasta ahora.
GLSL
los gráficos: un lenguaje de nivel relativamente bajo específicamente para DSP de audio y destinado a permitir que el código se ejecute en DSP dedicados, así como en CPU de uso general.Dirt
, ahora SuperDirt
en SuperCollider, pero también puede trabajar con otros).Todavía recomendaría Csound como la mejor herramienta para la programación de audio basada en texto. Está activamente en desarrollo y ha seguido el ritmo de los avances recientes. Otra biblioteca que vale la pena mencionar es una biblioteca llamada pyo que se puede usar con Python 2.7 y Python 3.5+. Los desarrolladores de eso tienen muchas otras buenas herramientas que tal vez quieras revisar. Si desea profundizar en la programación de audio, " El libro de programación de audio " es bastante sobresaliente, a pesar de que se lanzó en 2010.
Hay algunos frameworks de composición algorítmica interesantes basados en el lenguaje de programación LISP:
Nyquist https://www.cs.cmu.edu/~music/nyquist/
Música abierta http://repmus.ircam.fr/openmusic/home
Hay un libro sobre Nyquist escrito por científicos informáticos/compositores que desarrollaron el lenguaje: algocompbook.com.
Open Music fue creado por personas en IRCAM - en.wikipedia.org/wiki/IRCAM -, un instituto francés para la investigación del sonido y la composición de música electroacústica. Vale la pena echarle un vistazo a su trabajo.
Calimba (consulte también esta presentación para obtener una descripción general concisa) es un lenguaje que incorpora sus propios sintetizadores y está diseñado para ser un lenguaje de programación de alto nivel para la composición musical.
Admite, entre otras, transformaciones estándar en frases musicales (transposición, transformaciones rítmicas, etc. ), efectos, microtonalidad y un entorno (perfectible) para la codificación en vivo.
Se basa en rasgos de programación funcional ( let ... in ...
construcciones) y composiciones de frases musicales (es posible, por ejemplo, componer varios efectos, por ejemplo, una distorsión, un retraso y un vibrato para producir una cadena de efectos).
Conozco a un compañero que ha escrito un sistema de sintetizador, en Java, que se puede editar en vivo. Se llama Praxis LIVE , y es de origen reciente, aprovechando las capacidades de subprocesos múltiples de Java. El autor es bastante consumado, ya que también escribió JAudioLibs, que incluye un enlace de audio Java al kit de conexión de audio JACK.
Java puede hacer mucho más con el audio de lo que generalmente se le atribuye. Está mucho más cerca de C++ en términos de rendimiento que Python o JavaScript. He estado jugando con audio 3D y un sintetizador FM construido desde cero en Java, también un theremin en tiempo real como ejemplo de lo que Java puede hacer. Me gusta poder rodar por mi cuenta, jugar con ideas en lugar de estar limitado por los sistemas de sintetizador. Hay un pequeño obstáculo para controlar bien las primitivas de Java Sound (p. ej., SourceDataLine), pero una vez que superas eso, hay todo tipo de cosas que se pueden construir desde cero si así lo deseas.
Hay un libro de Will Pirkle llamado Designing Audio Effect Plug-Ins in C++: With Digital Audio Signal Processing Theory . Le presentará el sistema RackAFX que se utiliza con Microsoft Visual C++ 2008-2010. Puede usar RackAFX con otros compiladores de C++ que no sean MSVBC++. Usa RackAFX para ayudar a diseñar la GUI mientras que C++ se usa para escribir la parte del código DSP. RackAFX actualizará automáticamente el código a medida que agregue controles deslizantes, perillas y botones. Hay muchos ejemplos de Delay, Filters, etc.
PedroT
N. Virgo
PedroT
PedroT
N. Virgo
jchook
PedroT
N. Virgo
N. Virgo
PedroT