Hola,

Estoy de acuerdo con Juan que en particular el lenguaje de score de csound
es primitivo, en particular comparado con otras alternativas modernas.

Al lenguaje de orquesta de csound también se le ven los años, pero en mi
opinión personal, tiene una claridad que supera la de otros lenguajes como
pure data o super collider (quiero decir). Pienso que la sintaxis de csound
viene más de prácticas en la época que fue creado, más que por la necesidad
de simplificar. Hay cosas que le hacen falta, como por ejemplo arreglos de
datos (para hacer bancos de osciladores o filtros), pero aparte de eso, la
síntaxis aunque antigua, es bastante usable.

Csound, aún hoy en día tiene fortalezas que lo mantienen interesante. Por
ejemplo, para este tipo de generación algoritmica, Csound puede usar python
adentro del mismo archivo que hace la síntesis, trayendo todo el poder de
python (que puede traer el poder de octave con módulos como scipy
http://www.scipy.org/).
Otra cosa interesante es que Csound tiene una variedad muy grande de
generadores y transformadores, mucho más que chuck y algo más que
SuperCollider.
Talvez lo que es más primitivo de Csound es su falta de modelo
cliente-servidor, para el motor de síntesis. En Csound no es posible
modificar los generadores mientras el sistema está corriendo, como lo hacen
pd, sc y chuck. Sin embargo en lenguajes como sc, es bastante engorroso el
manejo y transformación del motor de síntesis para procesos complejos.

Otra fortaleza de Csound es el hecho de que es un API que puede usarse en C,
C++, Java, python y otros.

En pocas palabras, estoy de acuerdo que en términos sintácticos y en
particular en terminos del diseño del motor (en cuanto a su maleabilidad
durante la ejecución), los lenguajes modernos ofrecen ventajas sobre Csound,
pero pienso que por varias razones sigue siendo relevante y útil.

Aquí el reto:

<CsoundSynthesizer>
<CsInstruments>

sr=44100
ksmps=128
nchnls=2

pyinit

pyruni {{

n = 100
R = 3.095

def get_new_x(x):
    return R*x*(1-x)

}}


instr 1 ; instrumento generador
ioct init p5
klastx init 0 ;para guardar x entre reiteraciones
ktrig metro p4 ;generar una reitereacion en frecuencia p4
knewx pycall1t ktrig, "get_new_x", klastx ;averiguar nuevo valor de x
schedkwhen ktrig, 0, 10, 2, 0, 0.2, knewx, ioct
; se genera una nueva nota por cada reiteracion. el valor de x se usa para
; determinar el pitch class de la nota generada.
; cada nota dura 2 segundos.
klastx = knew
endin


instr 2 ;A simple sine wave instrument
;p4 = pitch class
;p5 = octave
ioct init p5
ipclass = ioct + (abs(p4) / 100) ; Pitch class of the note
ifreq = cpspch(ipclass) ;Note frequency in Hertz
aenv linen 6000, 0.05, p3, 0.1 ;Amplitude envelope
aout oscil  aenv, ifreq , 1 ;Simple oscillator
outs aout, aout
endin


</CsInstruments>
<CsScore>

f 1 0 2048 10 1 ;sine wave

;        frequency of       Octave of
;        note generation    melody
i 1 0 30      3               7
i 1 5 25      6               9
i 1 10 20     7.5             10
i 1 15 15     1               8

</CsScore>
</CsoundSynthesizer>

Saludos,
Andrés




2008/4/29 Juan I Reyes <[EMAIL PROTECTED]>:

>
>
> Los problemas de Jose Ignacio Quevedo con Csound hacen pensar sobre
> varios puntos. Por qué Csound ?, Por qué no botones y deslizadores ? y
> de hecho por qué la síntesis si las cosas suenan de por si?.
>
> La pregunta de Csound también me la hago yo mismo constantemente. Pienso
> que en parte es la nostalgia de Richard Boulanger y John Fitch por
> mantener vivo un lenguaje con una interfaz que estaba diseñada para
> mainframes con procesadores de 8 bits por lo que había que simplificar
> al máximo. Realmente creo que si la cuestión es algorítmica sobre todo
> en la parte del scorefiles hay que dar paso a Chuck y SuperCollider.
>
> Pero hay un factor mas a fondo en referencia a los MusicN como Csound.
> Esos son la alternativa a los botones y deslizadores. Sospecho que la
> pregunta de Jose Ignacio tiene también que ver sobre como aplicar un
> algoritmo de autómatas o poblaciones genéticas en Csound. De hecho puede
> ser una variación el sistema dinámico de las poblaciones.
>
> Reto a varios de los personajes en esta lista a tratar de aplicar uno de
> estos métodos de sistemas dinámicos con botones y deslizadores (a la
> Max/Pd o Logic ProTools). Pero al mismo tiempo también reto a los
> conocedores de Csound a tratar de aplicar uno de estos algoritmos para
> generar scorefiles o secuencias de notas (también podría usarse para
> parejas x,y en Processing).
>
> Yo hubiera utilizado este algoritmo en la instalación del pincel y
> dibujo virtual de la gente de Los Andes en el Festival de Manizales para
> que los resultados no fueran tan predecibles.
>
> Saludos,
>
>  --* Juan
>
>
> PD: El algoritmo del sistema dinámico de las poblaciones (en Octave o
> Matlab) es el siguiente:
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>
> N=100;  % Reiteraciones
> R=3.95; % Tasa de crecimiento  R>1 Incremento población; 2.25 Estable
>        % R < 1 Pobl. decrece; 3 Pobl. Oscilante
>        % R > 3 Bifurcation 3.6 R > 4 Pobl. decrece a cero
>
> x=0.25;                  % Inicializar x  entre 0 y 1,
>
> for i=1:N
>  newx = R*x*(1-x);
>  x = newx;
>  X(i) = x;
>  %disp(sprintf('x(%d)=%f',i,x));
> end
>
> j=1:N;
> plot(j,X(j));
> % plot(j,(X(j)-Y(j)));
>
>
> title("Expansión de una población");
> xlabel("j");
> ylabel("x");
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>
> _______________________________________________
> ____ _  _ ___  _   _ ____ ___  ___
> |___  \/  |__]  \_/  |___   /  |__]
> |___ _/\_ |      |   |___  /__ |
>
> Expyezp mailing list
> [email protected]
> http://lists.slow.tk/listinfo.cgi/expyezp-slow.tk
>
_______________________________________________
____ _  _ ___  _   _ ____ ___  ___  
|___  \/  |__]  \_/  |___   /  |__] 
|___ _/\_ |      |   |___  /__ |    
                                 
Expyezp mailing list
[email protected]
http://lists.slow.tk/listinfo.cgi/expyezp-slow.tk

Responder a