Nyquist (lenguaje de programación)

De Wikipedia, la enciclopedia libre

Nyquist es un lenguaje de programación para composición y síntesis de sonido. Desciende del lenguaje Fuge, creado por Chris Fraley. Uno de los desarrolladores posteriores de Fugue , Roger Dannenberg, implementó Nyquist como extensión sonora, del intérprente de Xlisp de David Michael Betz.

Como dialecto de Lisp, incluye todas las bendiciones y dificultades de la programación funcional. Siendo una característica relevante, que incluye el control del tiempo en la semántica misma del lenguaje. Además, es extensible mediante la programación orientada a objeto, implementeada en Xlisp.

Actualmente funciona en las plataformas de Unix/linux, MacOS y Windows.

Rudimentos de Xlisp[editar]

Xlisp es una variante eXperimental de common lisp. El autor se propuso añadir la potencia de la programación orientada a objetos, en el entorno lisp, corriendo en una máquina pequeña. Excepto en algunos detalles sintácticos, lo aprendido en Xlisp, puede extenderse a Common Lisp.

El entorno de Nyquist, es en concreto un intérprete de xlisp, ya que aquel es una extensión de este. Una simple suma de variables, típica de los tutoriales de cualquier lenguaje de programación, quedariá así:

   >;esto es una etiqueta no tenida en cuenta
   >(setf a 5)
   5
   >(setf b 3)
   3
   >(+ a b)
   8

O una definición de una función genérica, que sume dos pares de números

   >(defun suma-par (a b) (+ a b))
   SUMA-PAR
   >(suma-par 5 3)
   8

En general, la programación en Lisp, y en concreto en Nyquist, es muy intuitiva, y permite muchos grados de abstracción, propiciando proyectos de cierta complejidad en programas sencillos y legibles. Si bien no puede obviarse, la dificutad visual del manejo de paréntesis.

Proceso de sonido y composición[editar]

Dentro de Nyquist, los procesos y sonidos son usados en contexto de listas de lisp. Por ejemplo, para hacer sonar un oscilador con la frecuencia de la nota c4, no hay más que escribir:

   >(play (osc c4))

o también

   >(setf mi-sonido (osc c4))
   MI-SONIDO
   >(play mi-sonido)

Un ejemplo de función sencilla definida para tocar, n notas al azar entre c4 y c5, es esta:

   ;definimos la función n-notas
   (defun n-notas (n)
      (seqrep (i n)
           (osc (+ 60 (random 12)))))
   ;llamamos a la función para que toque 10 notas
   (play (n-notas 10))

Sin embargo el grado de complejidad no se queda evidentemente aquí, sino que recorre desde el proceso de sonido en bajo nivel, hasta el uso de distintas primitivas específicas de síntesis sonora. La plasticidad de lisp, lo hace un entorno especialmente versátil.

Nyquist en Audacity[editar]

Audacity es un editor de sonidos tan ligero como potente. Entre sus opciones está precisamente, la posibilidad de programar en una versión especial del lenguaje Nyquist. Para comprobarlo, vaya al menú efecto, tras crear una pista de audio y seleccionar una porción de tiempo. Allí seleccione "Comando Nyquist...", lo cual le permitirá programar en Nyquist, dentro del entorno de Audacity. (Para probar los ejemplos anteriores, omita la función play)

Otra característica muy interesante de la relación Nyquist-Audacity es la posibilidad de desarrollar plugins con interfaz visual, de manera rápida y sencilla.

Enlaces[editar]