Seccion previa: Tipos de archivos de Cmix
Estructura de una partitura de Cmix
Las instrucciones de Instrumento de Cmix son interpretadas por un lenguaje que interpreta-comandos que se llama Minc
(un acronismo de Minc - No es C). Minc , escrita por un estudiante de Princeton Lars Graf, es invocada automaticamente
como "interfase" para cada instrumento de Cmix. Cada instrumento tiene un set de subcomandos o instrucciones que son
entendidas por Minc. Estos subcomandos son similares en apariencia a las llamadas a funcion de C.
Considere como un ejemplo la siguiente partitura para el instrumento de Cmix playinst (playinst es un simple instrumento
tipo oscilador wavetable-lookup; el codigo fuente es distribuido en el directorio cmix/proto en el paquete cmix):
output("funsound.snd")
makegen(1, 10, 1000, 1, 0.5, 0.3)
makegen(2, 7, 1000, 0, 1000, 1)
playinst(0, 7, 8.05, 10000, 0.3, 0.4)
El instrumento playinst usa tres subcomandos: output, makegen, y playinst. La funcion del subcomando output es obvia --
da el nombre al archivo de salida. Notese que los nombres de los archivos y otras cadenas de caracteres estan escritas
entre comillas.
Los dos comandos makegen definen la forma de onda del oscilador y el crecimiento/decrecimiento de la envolvente de
amplitud y otras envolventes de control. Los parametros de makegen varian dependiendo de que rutina gen se usa, con
la exepcion de que los primeros tres parametros complen un rol fijo. El primer parametro (o, p-field) es el numero de
slot del generador, el cual es determinado por el instrumento particular de Cmix que esta siendo usado. En el ejemplo
de playinst arriba, es asignado el slot numero 1 como el makegen forma de onda (makegen(1,...)), y el slot numero 2
define el crecimiento/decrecimiento de la envolvente (makegen(2,...)). El segundo p-field (parametro) del subcomando
makegen es siempre interpretado como el numero de rutina del gen que se va a usar para construirla forma de onda o la
envolvente. La rutina 10 de gen (makegen(1, 10,...)) especifica la fuerza en armonicos de la forma de onda, a partir
del parametro numero 4. el ejemplo:
makegen(1, 10, 1000, 1, 0.5, 0.3)
creara una forma de onda con la amplitud del primer armonico 1, un segundo armonico con una amplitud 0.5, y un tercer
armonico con una amplitud 0.3. la rutina gen 7 (makegen(2, 7,...)) construira una envolvente con segmento rectilineos:
makegen(2, 7, 1000, 0, 1000, 1)
construira una linea desde 0 a 1 con 1000 puntos en la tabla de envolvente, mientras:
makegen(2, 7, 1000, 0, 500, 1, 500, 0)
especifica una envolvente que crece desde 0 a 1 con 500 puntos de la tabla, y que despues desde 1 a 0 por los
siguientes 500 puntos. El tercer p-field del subcomando makegen determina el numero total de puntos de la tabla gen.
En Cmix esto puede ser determinado con un numero arbitrario. 1000 es un buen numero de default para muchas aplicaciones.
El uso de los p-fields 4 y mayores depende de la rutina gen que esta siendo usada (otra vez, la rutina gen que se usa es
especificada en el parametro p2 del subcomando makegen). El archivo makegen.man1 (en cmix/man) contine una descripcion
de muchas rutinas gen usadas en Cmix. El codigo fuente para todos las rutinas gen de Cmix se puede encontrar (junto
con la fuente del comando makegen (en si mismo)) en el directorio cmix/sys.
El subcomando playinst del instrumento playinst tiene un grupo de parametros:
playinst(start_time, duration, pitch, amplitude, rise_time, decay_time) --
(tiempo_inicial, duracion, altura, amplitud, tiempo_crecimiento, tiempo_decrecimiento)
Como puede ser encontrada la informacion acerca de los intrumentos de Cmix (como los parametros de playinst)?
Desafortunadamente, existe documentacion detallada para los instrumentos de Cmix. . El mejor metodo es consultar el
codigo fuente para un instrumento dado. Por convencion, los parametros p-field de los instrumentos estan listados como
comentario en la parte mas alta del codigo fuente. En el directorio cmix/proto el archivo playinst.c contiene esta
informacion:
/* p0=start, p1=dur, p2=pitch, p3=amp, p4=riset, p5=decayt,
p6=porcentaje en el canal izquierdo (si es un archivo de salida estereo) */
/* asume que la funcion 1 es una forma de onda y que la funcion 2 es una funcion de envolvente */
Los parametros del instrumento se dan, junto con la informacion que el gen en el slot 1 debe contener la forma de onda
y que el gen en el slot 2 debe de ser el que contiene la envolvente creciente/decreciente. Cualquier numero de
subcomandos playinst pueden ser adicionados en esta partitura de playinst. El orden temporal no importa (cmix permite
tiempo de acceso arbitrario sea al archivo de entrada como al archivo de salida), pero los subcomandos output y makegen
deben preceder el primer comando playinst. Estas definiciones de output y makegen seran efectivas para cualquier
subcomando playinst subsiguiente, pero seran sobrepasados a un cierto punto en la partitura de Cmix por un nuevo
output o makegen.
Corriendo el instrumento de Cmix playinst con la partitura del ejemplo "playinst.sco":
probablemente reportara lo siguiente:
CMIX: cannot access file funsound.snd (no puedo acceder al archivo funsound.snd)
headersize = 0
Esto es porque el archivo de salida debe existir antes que el instrumento pueda correr. La siguiente secuencia de
comandos:
sfcreate -r 44100 -c 1 -i funsound.snd
playinst < playinst.sco
producira la siguiente salida en el terminal:
( 9.25) 0.0000 .. 7.0000 MM c0=9.999000e+03
Este reporte muetra los tiempos de comienzo y final del archivo de sonidos generado (0.0000 .. 7.0000), el numero
de segundos que la CPU usa para producir el sonido de salida (9.25), y el pico de amplitud para el canal 0 en ese
segmento de archivo (c0=9.999000e+03). Si ela rchivo de salida hubiera sido esetero, Cmix hubiera reportado picos
de amplitud separados para canal 0 y canal 1.
Proxima seccion: Usando los subcomandos integrados de Cmix
Que es Cmix? -Index-