stringtranslate.com

Supercolisionador

SuperCollider es un entorno y lenguaje de programación lanzado originalmente en 1996 por James McCartney para la síntesis de audio en tiempo real y la composición algorítmica . [4] [5]

Desde entonces, ha ido evolucionando hasta convertirse en un sistema utilizado y desarrollado por científicos y artistas que trabajan con el sonido. Es un lenguaje de programación dinámico que proporciona un marco para la investigación acústica , la música algorítmica , la programación interactiva y la codificación en vivo .

Originalmente publicado bajo los términos de la GPL-2.0 o posterior en 2002, y a partir de la versión 3.4 bajo la GPL-3.0 o posterior , SuperCollider es un software gratuito y de código abierto .

Arquitectura

A partir de la versión 3, el entorno SuperCollider se ha dividido en dos componentes: un servidor , scsynth , y un cliente , sclang . Estos componentes se comunican mediante OSC ( Open Sound Control ). [6]

El lenguaje SC combina la estructura orientada a objetos de Smalltalk y características de los lenguajes de programación funcional con una sintaxis de la familia C. [6]

La aplicación SC Server admite API de complementos de C y C++ simples , lo que facilita la escritura de algoritmos de sonido eficientes ( generadores de unidades ), que luego se pueden combinar en gráficos de cálculos. Debido a que todo el control externo en el servidor se realiza a través de OSC, es posible usarlo con otros lenguajes o aplicaciones. [6]

El servidor de síntesis SuperCollider (sintetizador de sonido)

La generación de sonido de SuperCollider está integrada en un ejecutable de línea de comandos optimizado (llamado scsynth ). En la mayoría de los casos, se controla desde el lenguaje de programación de SuperCollider, pero se puede utilizar de forma independiente. El servidor de audio tiene las siguientes características: [6]

Supernova, una implementación independiente de la arquitectura del servidor, [8] agrega soporte para múltiples procesadores a través de la agrupación paralela explícita de nodos de síntesis.

El lenguaje de programación SuperCollider (lenguaje soez)

El lenguaje de programación SuperCollider es un lenguaje funcional , orientado a objetos, de herencia única , con tipos dinámicos y recolección de basura , similar a Smalltalk [5] , con una sintaxis similar a Lisp o al lenguaje de programación C. Su arquitectura logra un equilibrio entre las necesidades de computación en tiempo real y la flexibilidad y simplicidad de un lenguaje abstracto. Como muchos lenguajes funcionales, implementa funciones como objetos de primera clase , que pueden estar compuestos por . Las funciones y los métodos pueden tener valores de argumento predeterminados y listas de argumentos de longitud variable y pueden llamarse con cualquier orden de argumentos de palabras clave. Los cierres son léxicos y el alcance es tanto léxico como dinámico. Se admiten otras características típicas de los lenguajes funcionales, incluida la creación de cierres mediante aplicación parcial ( currying explícito ), optimización de llamadas de cola , comprensiones de listas y corrutinas . Los detalles específicos incluyen la expansión implícita de tuplas y el sistema de patrones sin estado. Su búsqueda de mensajes en tiempo constante y recolección de basura en tiempo real permite que los sistemas grandes sean eficientes y gestionen el procesamiento de señales de manera flexible. [6]

Al admitir métodos de programación reflexiva , conversacional y alfabetizada , SuperCollider facilita relativamente la búsqueda de nuevos algoritmos de sonido [9] y el desarrollo de software y marcos personalizados. Con respecto al conocimiento específico del dominio, es general (por ejemplo, permite la representación de propiedades como el tiempo y el tono en grados variables de abstracción) y tiene abundantes implementaciones de ejemplo para propósitos específicos. [6]

Sistema GUI

Captura de pantalla de SuperCollider ejecutando las herramientas GUI de ixiQuarks.

El lenguaje SuperCollider permite a los usuarios construir interfaces gráficas de usuario multiplataforma para aplicaciones. La biblioteca de clases estándar con componentes de interfaz de usuario puede ampliarse mediante una serie de marcos disponibles. Para la programación interactiva, el sistema admite el acceso programático a archivos de código de texto enriquecido. Puede utilizarse para generar gráficos vectoriales de forma algorítmica. [10]

Interfaz y soporte del sistema

Clientela

Dado que el servidor se controla mediante Open Sound Control (OSC), se pueden utilizar diversas aplicaciones para controlar el servidor. Normalmente se utilizan entornos de lenguaje SuperCollider (ver a continuación), pero se pueden utilizar otros sistemas compatibles con OSC, como Pure Data . [6]

Existen clientes de "terceros" para el servidor SuperCollider, entre los que se incluyen rsc3, un cliente de Scheme , hsc3, basado en Haskell , ScalaCollider, [11] basado en Scala , Overtone, basado en Clojure , y Sonic Pi . [12] Estos se diferencian de los entornos de desarrollo mencionados a continuación porque no proporcionan una interfaz para el lenguaje de programación de SuperCollider, sino que se comunican directamente con el servidor de audio y proporcionan sus propios enfoques para facilitar la expresión del usuario. [6]

Sistemas operativos compatibles

Captura de pantalla de SuperCollider en Mac OS X con varios elementos GUI generados por el usuario.

SuperCollider funciona en macOS , Linux , Windows y FreeBSD . Para cada uno de estos sistemas operativos existen múltiples entornos de edición de lenguaje y clientes que pueden usarse con SuperCollider (ver a continuación). [6]

También se ha demostrado que SuperCollider puede ejecutarse en Android [13] e iOS . [14]

Entornos de edición

Captura de pantalla de SuperCollider Vim en puredyne linux .

El código de SuperCollider se edita y utiliza con mayor frecuencia desde su propio IDE multiplataforma, que está basado en Qt y es compatible con Linux, Mac y Windows.

Otros entornos de desarrollo compatibles con SuperCollider incluyen:

Ejemplos de código

// reproduce una mezcla de ruido rosa y un tono sinusoidal de 800 Hz {  SinOsc . ar ( 800 ,  0 ,  0.1 )  +  PinkNoise . ar ( 0.01 )  }. play ;// modular la frecuencia del tono sinusoidal así como la amplitud de la señal de ruido con otra señal sinusoidal, // cuya frecuencia depende de la posición horizontal del puntero del ratón ( { var  x  =  SinOsc . ar ( MouseX . kr ( 1 ,  100 )); SinOsc . ar ( 300  *  x  +  800 ,  0 ,  0.1 ) + PinkNoise . ar ( 0.1  *  x  +  0.1 ) }. play ; )
// Iteración de lista: multiplica los elementos de una colección por sus índices [ 1 ,  2 ,  5 ,  10 ,  - 3 ]. collect  {  | elem ,  idx |  elem  *  idx  };
// Función factorial f  =  {  | x |  if ( x  ==  0 )  {  1  }  {  f .( x - 1 )  *  x  }  };
// «Emulación Pan Sonic - Katodivaihe - lahetys» - Miguel Negrão ( { var  a ,  b ,  c ,  d ,  n ,  e ,  f ,  out ;a  =  Impulso . ar ( 8 ) * 1.5 ;b  =  Ruidoblanco . ar  *  Env ([ 1.0 , 1.0 , 0.0 ],[ 0.01 , 0.01 ], \step ). ar ( 0 ,  Impulso . ar ( 1  ))  ; b  =  Verbolibre . ar ( b ,  0.5 ,  0.4 ) * 2.5 ;c  =  SinOsc . ar ( 40 )  *  Env . perc ( 0.01 , 0.2 ). ar ( 0 ,  TDuty . ar ( Dseq ([ 1 / 4 , 1 / 2 , 1 / 8 , 1 / 8 ], inf ))); 5 . hacer {  c  =  ( c . distorsionar  +  c ) * 0.75 }; c  =  c  *  1.5 ;d  =  LPF . ar ( Saw . ar ([ 20 , 47 ] . suma  ,  XLine . ar ( 4000 , 200 , 0.5 ))  *  Env . perc . ar ( 0 ,  Impulse . ar ( 1 / 16 ))  *  0.5 ; d  =  ( GVerb . ar (  d  ,  tamaño de la habitación : 10 ,  tiempo de revolución : 6 )  *  200 ). clip ( - 1.0 , 1.0 )  *  0.3 ;norte  =  12 ; e  =  (  Saw . ar (  40 * ( 1 .. n )  *  ({  LFNoise1 . ar ( 0.1 ). rango ( 1 , 1.01 )  }  !  n )  )  * ({  LFNoise1 . ar ( 0.1 ). rango ( 0.0 , 1.0 )  } ! norte )). suma  *  10 ; e  =  PeineC . ar ( mi ,  0,1 ,  0,1 ,  4 )  +  mi ; mi  =  mi . tanh  *  0,3  *  SinOsc . ar ( 0,05 ). rango ( 0,5 , 1,0 ); mi  =  mi . duplicar ; mi  =  mi  *  SinOsc . ar ( 0,03 ). rango ( 0.2 , 1.0 )  *  0.5 ;f  =  Blip . ar ( 100 )  *  Blip . ar ( 100 )  *  Env ([ 0.0 , 0.0 , 1.0 ],[ 8 , 8 ],[ \step , \linear , \step ]) . ar ( 0 ,  Impulso . ar ( 1 / 16 ))  *  2  ;salida  =  (( a  +  b  +  c  +  f )  !  2 )  +  d  +  e ; salida  =  salida  *  0,2}. jugar )

Codificación en vivo

Como lenguaje de programación dinámico versátil , SuperCollider se puede utilizar para codificación en vivo , es decir, actuaciones que implican que el intérprete modifique y ejecute código sobre la marcha. [18] Los tipos específicos de proxies sirven como marcadores de posición de alto nivel para objetos de síntesis que se pueden intercambiar dentro y fuera o modificar en tiempo de ejecución. Los entornos permiten compartir y modificar objetos y procesar declaraciones a través de redes. [19] Varias bibliotecas de extensión admiten diferentes abstracciones y accesos a objetos de sonido, por ejemplo, dewdrop_lib [20] permite la creación y modificación en vivo de pseudoclases y pseudoobjetos.

Véase también

Referencias

  1. ^ "Lanzamientos". Github . Consultado el 8 de enero de 2022 .
  2. ^ asynth. "SuperCollider" . Consultado el 20 de junio de 2015 .
  3. ^ "Licencia de SuperCollider". Archivado desde el original el 7 de agosto de 2020.
  4. ^ J. McCartney, SuperCollider: Un nuevo lenguaje de síntesis en tiempo real, en Proc. Conferencia Internacional de Música por Computadora (ICMC'96), 1996, págs. 257–258.
  5. ^ ab J. McCartney, Repensando el lenguaje de la música por computadora: SuperCollider, Computer Music Journal, 26 (2002), págs. 61–68.
  6. ^ abcdefghi Scott Wilson; David Cottle; Nick Collins (2011). El libro SuperCollider. The MIT Press. ISBN 978-0-262-23269-2Archivado desde el original el 1 de mayo de 2011. Consultado el 26 de mayo de 2011 .
  7. ^ "Listas de correo de SuperCollider". Archivado desde el original el 6 de noviembre de 2009. Consultado el 20 de junio de 2015 .
  8. ^ T. Blechmann, supernova, un servidor de síntesis compatible con multiprocesadores para SuperCollider, Actas de la Conferencia de audio de Linux, Utrecht 2010.
  9. ^ J. Rohrhuber, A. de Campo y Renate Wieser. Algoritmos actuales. Notas sobre diseño de lenguajes para programación Just in Time Archivado el 28 de julio de 2011 en Wayback Machine . En Actas de la International Computer Music Conference , Barcelona, ​​2005.
  10. ^ La interfaz de gráficos vectoriales la proporciona la clase Pen. Se pueden encontrar varios ejemplos en Audiovisuales con SC Archivado el 9 de junio de 2020 en Wayback Machine , blog de Fredrik Olofsson, 02.05.2009 (actualizado el 11.05.2012)
  11. ^ Rutz, HH (2010). "Replanteando el cliente SuperCollider...". Actas del Simposio SuperCollider . Berlín. CiteSeerX 10.1.1.186.9817 . 
  12. ^ "Sistemas que interactúan con SC" . Consultado el 20 de junio de 2015 .
  13. ^ Proyecto SuperCollider para Android en GitHub
  14. ^ Sistema de música diminuto - Blog de Cylob, 04.11.2009
  15. ^ "SuperCollider con emacs: scel" . Consultado el 20 de junio de 2015 .
  16. ^ "supercolisionador". Atom . Consultado el 20 de junio de 2015 .
  17. ^ "jleben/Scate". GitHub . 13 de noviembre de 2013 . Consultado el 20 de junio de 2015 .
  18. ^ Collins, N., McLean, A., Rohrhuber, J. y Ward, A. (2003), Técnicas de codificación en vivo para el rendimiento de computadoras portátiles, Organised Sound 8(3): págs. 321-30. doi :10.1017/S135577180300030X
  19. ^ J. Rohrhuber y A. de Campo. Espera e incertidumbre en redes de música por computadora Archivado el 14 de marzo de 2006 en Wayback Machine . En Actas de la Conferencia Internacional de Música por Computadora , Miami, 2004.
  20. ^ Una de las numerosas bibliotecas aportadas por los usuarios, conocidas como "Quarks", y publicadas en el repositorio SuperCollider Quarks.

Enlaces externos