¿Hay algún lenguaje de programación musical posterior a la era SuperCollider?

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).

Supernova es el servidor de síntesis multi-CPU y está incorporado en la base de código principal.
@PeterT ¿es así? Eso no es del todo obvio desde el sitio web, incluso mirando el registro de cambios. ¿Dónde está documentado y cómo se usa?
En la página de inicio, viñeta debajo de las características de scsynth: ` Soporte multiprocesador usando la implementación del servidor Supernova`. Todavía no lo he usado realmente, no estoy seguro de si es el servidor predeterminado o tal vez necesito ajustar la configuración. Entonces se trata de organizar los nodos en p-grupos.
También vale la pena señalar que sc 3.7 es bastante reciente y debería estar bien optimizado para las arquitecturas de CPU modernas. Estoy de acuerdo en que gpu podría ser interesante, puede haber algunos problemas con la latencia. No tengo conocimiento de ningún entorno similar a SuperCollider que haga un uso extensivo de gpu. Tal vez debería agregar eso a mi respuesta.
@PeterT, la compilación JIT del código DSP también cambiaría las reglas del juego, si existiera en un lenguaje similar a SuperCollider. Actualmente, estamos limitados a un conjunto finito de UGens, pero eso permitiría generar nuevos sobre la marcha. Sería un poco como tener a Fausto perfectamente integrado en el idioma. También permitiría que cosas como la retroalimentación de una sola muestra se hicieran de manera realmente eficiente. Eso no habría sido factible en 2002, pero las máquinas virtuales ahora son mucho más eficientes y creo que sería posible ahora.
Si está buscando rendimiento, sería difícil superar las herramientas de optimización multinúcleo de Haskell (es decir, pruebe Tidal ).
@Nathaniel, es posible que conozca soul.dev . Creo que está mucho más cerca de lo que estaba buscando. Tal vez no esté 'listo para el horario de máxima audiencia', pero sí uno para ver.
@PeterT, ¡deberías publicar eso como respuesta! No estaba al tanto de ello, y es en gran medida el tipo de cosa que estaba buscando.
@PeterT una evaluación rápida: es un poco detallado, pero sería muy fácil construir una interfaz similar a SuperCollider más accesible en Python usando su API, así que eso es genial. Sin embargo, no es completamente de código abierto, y las preguntas frecuentes dicen: "En última instancia, planeamos comercializar SOUL otorgando licencias de controladores de back-end y otras IP para uso de proveedores que están creando productos de hardware compatibles con SOUL". Eso me hace dudar si sería posible hacerlo como un proyecto de código abierto, lo que me entristece.
@Nathaniel IIRC, la idea era similar a OpenGL en términos de cuán abierto es, creo (los controladores de GPU no son generalmente de código abierto, GLSL sigue siendo útil). Sospecho que los 'trajes' (por decirlo descortésmente) pueden haberse involucrado y que el deseo puede haberse corrompido.

Respuestas (6)

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 scsynthla que realmente debería jugar más, no estoy seguro de cuánta adopción tiene hasta ahora.

  • SOUL : desarrollado bajo los auspicios de ROLI, destinado a ser algo similar a GLSLlos 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.
  • Sonic Pi : usa su propio servidor, pero parece más centrado en la facilidad de uso (particularmente para uso en educación) que en funciones de síntesis avanzadas. ( editar: usa SuperCollider en el back-end; un tema recurrente en esta lista).
  • ChucK : no está muy activamente desarrollado, pero es un lenguaje muy accesible con algunas características interesantes para razonar sobre el tiempo que van más allá del azúcar sintáctico.
  • Tidal Cycles : sistema basado en Haskell principalmente para composición generativa en lugar de diseño de sintetizadores. Utiliza OSC para controlar otras aplicaciones (originalmente, este era principalmente el sintetizador personalizado Dirt, ahora SuperDirten SuperCollider, pero también puede trabajar con otros).
  • Overtone (biblioteca de Clojure) : una interfaz SuperCollider en Clojure.
  • Gibber : una interfaz basada en Javascript para Web-Audio, que es una parte API de síntesis basada en ugen de HTML5 que se ejecuta en todos los navegadores modernos.
  • Faust : un lenguaje de nivel inferior para DSP que se compila en complementos para otros programas, de una antigüedad similar a SuperCollider.
Sugerí una edición que agrega enlaces y descripciones breves a su lista. Algunos de estos proyectos son nuevos para mí, así que corrija mi edición si alguna de mis descripciones es incorrecta o está incompleta. Ninguno de los proyectos enumerados realmente aborda los principales problemas que identifiqué, pero es muy útil tener la lista.
¿Quiso decir Overtone para la viñeta 4? overtone.github.io
El enlace de Gibber está muerto.
@ user1079425 gracias, lo actualicé. Además, mientras estoy editando, creo que voy a agregar una mención más destacada de soul.dev ya que esta respuesta todavía parece estar recibiendo algunos resultados.

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.

Para un entorno moderno de composición y síntesis algorítmica similar a LISP (quizás no para los puristas de LISP), Overtone es una buena apuesta.
Sí, Overtone es otra opción interesante, probablemente también se está desarrollando de manera más activa, en comparación con los proyectos académicos anteriores que mencioné.

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.

Tiene dos libros, ambos son impresionantes. También lo es el libro de Eric Lyon sobre cómo escribir Max externals en C. Creo que así es como van las cosas ahora, la gente está haciendo su audio en bibliotecas en C/C++ e incrustándolo en entornos de host como SuperCollider, Max, PD, etc.