SuperCollider: Envolventes
Ejemplos en SuperCollider
SuperCollider: el lenguaje
  Índice General
  Índice de Materias
SuperCollider: Unidades generadoras
TUTORIAL DE SUPERCOLLIDER 3 - PARTE 3
Rodrigo F. Cadiz, basado en apuntes de Gary S. Kendall
Northwestern University
(
Server.default = Server.internal;
s = Server.default;
s.boot;
)
Unidades generadoras (UGen)
- Objetos que procesan o generan sonidos
- Pueden tener muchas entradas, pero una sola salida
- Canales multiples se pueden hacer mediante arreglos de unidades generadoras
Creacion, tasa de audio, tasa de control
- Se crean a traves de los mensajes ar o kr
FSinOsc.ar(800, 0.0, 0.2); // crear un oscilador sinusoidal a 800 Hz, fase 0.0, amplitud 0.2
Argumentos
- Pueden ser otras UGen, escalares (numeros) o arreglos de UGen o escalares
- Por convencion, los ultimos dos argumentos de la mayoria de las UGen son mul (multiplicador) y add (suma)
- Valores por defecto de mul=1.0 y add=0.0
- Usar mul y add es mas eficiente que escribir expresiones con multiplicaciones y adiciones
Notacion funcional
{ SinOsc.ar(440, 0, 0.2) }.play;
- Objeto se espefica entre { y } y se llama al metodo play
- Como no se especifica servidor, se usa el por defecto (variable "s").
- Tampoco se almaceno nada en una variable, por lo que no se puede reusar.
(
{ // Abrir la funcion
SinOsc.ar( // Crear un objeto SinOsc a tasa de audio
440, // frecuencia de 440 Hz, LA
0, // fase inicial 0
0.2) // mul (amplitud) of 0.2
}.play; // cerrar la funcion y llamar 'play' sobre ella
)
Otro ejemplo,
(
{ var ampOsc; // Abrir la funcion y declarar una variable
ampOsc = SinOsc.kr(0.5, 1.5pi, 0.5, 0.5); // Crear un objeto SinOsc a tasa de control
// asignar su resultado a una variable
SinOsc.ar(440, 0, ampOsc); // crear un objecto SinOsc a tasa de audio
// y usar la variable para controlar amplitud
}.play;
)
Conceptos basicos de osciladores
Forma mas facil de generar sonido
{ SinOsc.ar(800, 0, 0.1) }.play;
Que pasa en caso de errores
{ SinOsc.ar(800, 0, 0.1) },.play;
Ejemplo de ruido browniano:
{ BrownNoise.ar(0.1) }.play;
Server, BrownNoise y SinOsc son objetos
play, y ar son mensajes
800, 0, y 0.1 son literales
Ejemplo con aliasion (alasing o foldover)
{ SinOsc.ar(Line.kr(1,43000,6), 0, 0.1) }.play;
Frecuencia lineal versus tono (pitch)
Line crea una interpolacion lineal entre dos puntos
XLine crea una interpolacion exponenial, usualmente usada para frecuencia
ar es tasa de audio
kr es tasa de control
{ SinOsc.ar(Line.kr(400,4000,5), 0, 0.3) }.play; // Suena como una curva
{ SinOsc.ar(XLine.kr(400,4000,5), 0, 0.3) }.play; // Suena lineal
freq, phase, mul, and add are the names of arguments
Otros ejemplos:
{ SinOsc.ar(freq: 440, phase: 0, mul: 0.4, add: 0) }.play;
{ SinOsc.ar(phase: 0, freq: 440, add: 0, mul: 0.4) }.play;
{ SinOsc.ar(freq: 440, mul: 0.4) }.play;
freq:440 es un ejemplo de argumento clave
SC tiene muchos otros objetos que son osciladores:
Por ejemplo:
SinOsc FSinOsc Osc Buffer OscN
Tambien son utiles:
Impulse Blip Pulse LFPulse
Saw LFSaw
Klang Formant
VOsc VOsc3
Algunos un poco mas complicados:
SyncSaw VarSaw
LFPar LFCub
Gendy1 Gendy2 Gendy3
TUTORIAL DE SUPERCOLLIDER 3 - PARTE 4
Rodrigo F. Cadiz, basado en apuntes de Gary S. Kendall
Northwestern University
(
Server.internal.boot;
Server.default = Server.internal;
s = Server.default;
)
Mas sobre generadores de senal
Sumar sinusoides es ineficiente:
({
var f=200;
a = SinOsc.ar(f,0,0.1);
b = SinOsc.ar(2*f,0,0.1);
c = SinOsc.ar(3*f,0,0.1);
d = SinOsc.ar(4*f,0,0.1);
e = SinOsc.ar(5*f,0,0.1);
a+b+c+d+e;
}.play;
)
Look at the Help pages for the following:
SinOsc FSinOsc Osc Buffer OscN
These are also useful:
Impulse Blip Pulse LFPulse
Saw LFSaw
Klang Formant
VOsc VOsc3
Generadores de senal de banda limitada
SinOsc, FSinOsc, Blip, Saw, Pulse, Formant no produciran aliasion.
SinOsc, FSinOsc
arguments: frequency, phase, mul, add
{ SinOsc.ar(800,0,0.5) }.play;
{ FSinOsc.ar(800,0,0.5) }.play;
Saw
argumentos: frequency, mul, add
{ Saw.ar(800, 0.5) }.play;
{ Saw.ar(XLine.kr(200,20000,6),0.5) }.play; // no aliasing
Blip
argumentos: frequency, numHarmonics, mul, add
{ Blip.ar(800, 10, 0.5) }.play;
{ Blip.ar(XLine.kr(200,20000,6),10,0.5) }.play; // no aliasing
// modular el numero de armonicos
{ Blip.ar(400,Line.kr(1,30,20),0.2) }.play;
// a traves de un fitro pasa bajos resonante
{ RLPF.ar(Blip.ar(400,30,0.5), XLine.kr(400,8000,5), 0.1) }.play;
Pulse
argumentos: frequency, width, mul, add
{ Pulse.ar(800,0.3, 0.5) }.play;
{ Pulse.ar(XLine.kr(200,20000,6),0.3,0.5) }.play;
// modulate pulse width
{ Pulse.ar(400, Line.kr(0.01,0.99,8), 0.5) }.play;
Klang - banco sinusoidal de osciladores
argumentos: `[ frequencies, amplitudes, phases ], mul, add
{ Klang.ar(`[ [800, 1000, 1200],[0.3, 0.3, 0.3],[pi,pi,pi] ], 1, 0) * 0.4}.play;
// 8 frecuencias aleatorias
{ Klang.ar(`[ {exprand(400, 2000)}.dup(8), nil, nil ], 1, 0) * 0.04 }.play;
Formant oscilador de formante
argumentos: kfundfreq, kformfreq, kwidthfreq, mul, add
Generates un set de armonicos sobre una frecuencia de formante, dada una frecuencia fundamental
kfundfreq - fundamental frequency in Hertz.
kformfreq - formant frequency in Hertz.
kwidthfreq - pulse width frequency in Hertz. Controla el ancho de banda del formante.
// modula frec fund, frec.formantes constante
{ Formant.ar(XLine.kr(400,1000, 8), 2000, 800, 0.125) }.play;
// modula frec formante, frec fundamental constante
{ Formant.ar(200, XLine.kr(400, 4000, 8), 200, 0.125) }.play;
// modula mediante frecuencia, otras quedan constantes
{ Formant.ar(400, 2000, XLine.kr(800, 8000, 8), 0.125) }.play;
Generadores de senal basados en tablas
Osc, COsc, VOsc, VOsc3
Es necesario usar un buffer alocado en el servidor
(
// allocate buffer with server, size, numChans, bufferNumber
b = Buffer.alloc(s, 2048, 1, bufnum: 80);
// fill buffer with array of amplitudes, 3 * true (default)
b.sine1([1,0.5,0.33,0.25,0.2], true, true, true);
)
// se puede escribir tambien cmo
b.sine1(1.0/[1,2,3,4,5], true, true, true);
// o:
b.sine1(1.0/(1..12));
b.sine1(1.0/(1..24));
b.sine1(1.0/(1..32));
Osc
argumentos: buffer number, frequency, phase, mul, add.
{ Osc.ar(b.bufnum, 400, 0, 0.5) }.play;
COsc - dos osciladores, detuned
argumentos: buffer number, frequency, beat frequency, mul, add.
{ COsc.ar(b.bufnum, 200, 0.4, 0.3) }.play;
// change buffer as above.
{ COsc.ar(b.bufnum, 200, MouseX.kr(0.0,20.0,'linear'), 0.3) }.play;
VOsc - oscilador crossface de multiples wavetables
argumentos: buffer number, frequency, phase, mul, add.
(
// allocar buffers 80 a 87
b = Array.new(8);
8.do {arg i; b = b.add(Buffer.alloc(s, 2048, 1, bufnum: 80+i))};
)
(
// llenar buffers 80 a 87
8.do({arg i;
var n, a;
// generar arreglo de amplitudes armonicas
n = (i+1)**2; // armonicos: [1,4,9,16,25,36,49,64]
a = {arg j; ((n-j)/n).squared }.dup(n);
// llenar tabla
b[i].sine1(a);
});
)
// go!
{ VOsc.ar(MouseX.kr(80,87), 120, 0, 0.5) }.play;
VOsc3 - tres VOscs sumados.
argumentos: buffer number, freq1, freq2, freq3, beat frequency, mul, add.
// chorusing
{ VOsc3.ar(MouseX.kr(80,87), 120, 121.04, 119.37, 0.2) }.play;
// acordes
{ VOsc3.ar(MouseX.kr(80,87), 120, 151.13, 179.42, 0.2) }.play;
Generadores de baja frecuencia (LF)
LFTri, Impulse, LFSaw, LFPulse, VarSaw, SyncSaw
Formas de onda geometricas, no limitados en banda
LFTri, LFSaw, Impulse
argumentos: frequency, phase, mul, add
{ LFTri.ar(200,0,0.5) }.play;
{ LFSaw.ar(200,0,0.5) }.play;
{ Impulse.ar(200,0,0.5) }.play;
// aliasion?
{ LFTri.ar(XLine.kr(200,20000,6), 0, 0.5) }.play;
LFPulse, VarSaw
argumentos: frequency, phase, width, mul, add
{ LFPulse.ar(200,0,0.3,0.5) }.play;
{ VarSaw.ar(200,0,0.3,0.5) }.play;
// pulso con modulacion
{ LFPulse.ar(200,0,MouseX.kr(0,1),0.5) }.play;
{ VarSaw.ar(200,0,MouseX.kr(0,1),0.5) }.play;
SyncSaw
argumentos: syncFreq, sawFreq, mul, add
Onda diente de sierra vinculada con una frecuencia fundamental.
Efecto similar a formantes que se mueven o puls con modulacion.
{ SyncSaw.ar(100, MouseX.kr(100, 1000), 0.1) }.play;
SuperCollider: Envolventes
Ejemplos en SuperCollider
SuperCollider: el lenguaje
  Índice General
  Índice de Materias
Copyright © 2008-06-05
Rodrigo F. Cádiz
-
Centro de Investigación en Tecnologías de Audio,
Instituto de Música,
Pontificia Universidad Católica de Chile