Síntesis comparada II

Robakun
#1 por Robakun el 04/07/2006
Este hilo viene de aquí:
https:/www.hispasonic.com/foros/sintesis-comparada-i-hola-mundo-ii/101055

Por ahora en estos ejercicios, sigue imperando el pensamiento aditivo: juntar cosas, sumar, añadir... Frecuentemente se usan ondas sencillas como semillas, o parciales, porque es más predecible el efecto final, pero no tiene por qué ser así; se podría partir de ondas más complejas. Por eso aquí pongo dos sugerencias, ambas aditivas, pero una sencilla y otra algo más complicada:

1) Sonido tipo órgano. Se trata de sumar parciales armónicos o armónicos a secas. Es decir, frecuencias que siguen la serie natural armónica: a una frecuencia f que llamamos fundamental, le vamos añadiendo sucesivamente otros parciales de frecuencia 2*f, 3*f, 4*f, etc... Entonces conociendo la frecuencia fundamental ya conoces la de sus armónicos. Con lo único que podemos jugar es con la frecuencia base y con las amplitudes particulares de cada uno de los armónicos.

Ejemplo a realizar:

Usaremos ondas sinusoidales como componentes. las amplitudes de la frecuencia fundamental y 6 parciales armónicos serán estas:

Amplitud de F fund: 1
armónico 1: 0.6
armónico 2: 0.8
armónico 3: 0.25
armónico 4: 0.25
armónico 5: 0.5

Añadimos también un parcial (subarmónico) que está a la mitad de la frecuencia fundamental, de amplitud

subarmónico 1: 0.5


Por ejemplo para que sea más 'divertido' se puede hacer que la frecuencia fundamental tome los valores correspondientes a do, re, mi, fa sol.

La envolvente será tipo ADSR, de un pulso, o como querais. Con la envolvente de amplitud adecuada, sonará como un organito casiotone :D tocando las teclas do,re, mi, fal, sol.


2) Síntesis aditiva partiendo de parciales más complejos. Ahora no utilizaremos senos como piezas de construcción sino una onda más compleja formada a su vez por una frecuencia sinusoidal y 9 armónicos


Amplitud Frecuencia fundamental f: 0.3
amplitud armónico 1: 0
amplitud armónico 2: 0
amplitud armónico 3: 0
amplitud armónico 4: .1
amplitud armónico 5: .1
amplitud armónico 6: .1
amplitud armónico 7: .1
amplitud armónico 8: .1
amplitud armónico 9: .1


La onda que resulte, es la que usamos para construir, adicionar, sumar, como quieras decirlo. Se trata de sumar parciales constituidos por esa última onda, con una diferencia de frecuencia muy pequeña entre ellos. Elijo 0.3 como diferencia, pero puedes tomar otra. En concreto (Si llamo F a al parcial que dejare par manipularlo)

F
F+0.3
F+0.3*2
F+0.3*3
F+0.3*4
F-0.3
F-0.3*2
F-0.3*3
F-0.3*4


Lo que estamos haciendo es sumando sucesivamente un pequeño intervalo a frecuencia F, o restando, para que la frecuencia F quede en medio.

La envolvente de volumen total, como queráis, pero que no decaiga en el tiempo al menos durante 15 segundos, para que se escuche bien. Y F puede tomar varios valores, lo que queráis.

Se trata de un efecto de armónicos en cascada sobre una frecuencia base. Un efecto muy bonito con muchas posibilidades.

El inventor de este efecto es Jean-Claude Risset (una de las referencias principales de la síntesis en el siglo XX: http://en.wikipedia.org/wiki/Jean-Claude_Risset)


No se si queda clara la explicación. Usando un esquema gráfico es muy fácil lo que que hay que hacer, pero explicado (por mí) queda más farragoso. Bueno si tengo un rato, hago un esquema y lo subo, además de subir el sonido.
Subir
OFERTAS Ver todas
  • -6%
    Elektron Digitakt II (B-Stock)
    939 €
    Ver oferta
  • -50%
    NI Komplete 15 Collector's Edition
    885 €
    Ver oferta
  • -29%
    Behringer X-Touch Compact
    263 €
    Ver oferta
Abird
#2 por Abird el 05/07/2006
Robakun escribió:





Por ejemplo para que sea más 'divertido' se puede hacer que la frecuencia fundamental tome los valores correspondientes a do, re, mi, fa sol.

La envolvente será tipo ADSR, de un pulso, o como querais. Con la envolvente de amplitud adecuada, sonará como un organito casiotone :D tocando las teclas do,re, mi, fal, sol.




Hola Robakum,
Acabo de leer este hilo, y los ejercicios que propones me parecen muy interesantes. No obstante, no entiendo muy bien esta última cita. Trabajo con Reaktor.

Un saludo
Subir
Robakun
#3 por Robakun el 06/07/2006
Hola Abird, es verdad, ahora que lo releo me suena a mi también un poco confuso. En el primer ejercicio fijo las amplitudes de los armónicos y de la frecuencia fundamental. Sin embargo, esta vez -a diferencia de los hilos anteriores- dejamos libre la envolvente de amplitud del sonido resultante, para que cada cual elija. Puedes amplicarle un ADSR o una función por trozos o "nada", o el tipo de evolución de la amplitud que tu quieras. La razón es que quería que se prestase atención sobre todo en la adición de armónicos; lo otro daría igual, en este ejemplo claro.

Respecto de las notas do,re, mi, fa, sol. No he indicado la frecuencia fundamental del sonido a generar, por tanto, por hacer algo, podríamos mostrar una secuencia sonora que "cante" do, re, mi, fa sol, en alguna octava usando ya el sonido sintetizado. Para ello, algunos sintetizadores estarán ligados a un teclado o al MIDI, entonces será coser y cantar. En otros sistemas habrá que averiguar antes cuáles son las frecuencias de do, re mi ,fa sol en una determinada octava, para poder tocarlas con nuestro nuevo sonido. Aunque si a tí se te ocurre otra cosa para hacer, pues estupendo también.

Otra cosa, si usas reaktor, y tienes ganas, échale un vistado a "síntesis comparada I", pues nadie ha puesto un ejemplo en Reaktor...

Un saludo
Subir
Robakun
#4 por Robakun el 06/07/2006
Como escribía de memoria, he puesto en el ejemplo 2 el intervalo 0.3, con lo cual ya se nota el efecto pero quizás algo rápido para ser "disfrutado". Simplemente haciendolo más pequeño como 0.03 (es decir acercando la frecuencia de los componentes) el efecto será más lento...

Bueno, el primer ejemplo organillo-casiotone, en csound se escribe así:



-odac


sr = 44100
kr = 4410
ksmps = 10
nchnls = 1

instr 1

ifrec = cpspch(p4)
iamp = 8000

k1 adsr 0.1,0.01, 0.7,0.1 ;ADSR
a1 oscili iamp*k1, ifrec, 1,-1
asub oscili iamp*0.5, ifrec/2,2,-1 ;SUBARMÓNICO
out a1+asub

endin



;TABLA DE ARMÓNICOS
f1 0 2048 10 1 0.6 0.8 0.25 0.25 0.5
;TABLA PARA SUBARMÓNICO
f2 0 2048 10 1

i1 0 1 8.00 ;DO
i1 + . 8.02 ;RE
i1 + . 8.04 ;MI
i1 + . 8.05 ;FA
i1 + . 8.07 ;SOL
e






Y para el segundo ejemplo, he tomado de frecuencia fundamental 100 Hz, y he aplicado una envolvente que suavice el ataque del sonido, que es muy "agresivo". Además el intervalo entre frecuencias lo he elegido como 0.03




-oe2.wav


sr = 44100
kr = 441
ksmps = 100
nchnls = 1

instr 1
iF = p4 ;frecuencia base
interv = 0.03 ;intervalo de diff

;Envolvente de amplitud para la onda final
k1 linseg 0, 0.2*p3, 1, 0.6*p3,1, 0.1*p3,0

;9 componentes de la onda total
a1 oscili 6000, iF,1
a2 oscili 6000, iF+interv,1
a3 oscili 6000, iF+interv*2,1
a4 oscili 6000, iF+interv*3,1
a5 oscili 6000, iF+interv*4,1
a6 oscili 6000, iF-interv,1
a7 oscili 6000, iF-interv*2,1
a8 oscili 6000, iF-interv*3,1
a9 oscili 6000, iF-interv*4,1

asum sum a1,a2,a3,a4,a5,a6,a7,a8,a9
afinal = asum*k1 ;envolvente de amplitud
out afinal*k1 ;salida

endin




;tabla con amplitudes de los armónicos base
f1 0 2048 10 0.3 0 0 0 .1 .1 .1 .1 .1 .1


i1 0 20 100 ;una nota de 20 segundos






En los adjuntos, el sonido resultante.
Archivos adjuntos ( para descargar)
e1.mp3
e2.mp3
Subir
grainsinth
#5 por grainsinth el 07/07/2006
Bueno de momento he realizado en Max el ejemplito 1, el Casiotone, en cuanto al segundo de los casos supongo que está mal la amplitud de los armónicos 1 2 y 3 que pone 0 y supongo que será 0.1 como los demás no?
Una cosa más: para que suene mejor a órgano los parciales deben ser exponentes de 2. Yo haría lo siguiente:
Fundamental sobre los 60 Hzs
armonico F*2
armónicoF*4
armónico F*8
armónico F*16
armónico F*32
Y además variaría las ADSRs de cada oscilador decayendo más ràpidamente a medida que subimos la frecuencia, y sobre todo en los dos últimos osciladores.
[ Imagen no disponible ]
Subir
grainsinth
#6 por grainsinth el 07/07/2006
Sonido anterior
Archivos adjuntos ( para descargar)
casioton.mp3
Subir
grainsinth
#7 por grainsinth el 07/07/2006
El otro órgano, el que lleva los parciales exponencialmente
Archivos adjuntos ( para descargar)
organo.mp3
Subir
grainsinth
#8 por grainsinth el 07/07/2006
El otro deber:

[ Imagen no disponible ]
Archivos adjuntos ( para descargar)
sonidocascada.mp3
Subir
Robakun
#9 por Robakun el 08/07/2006
Mas que "deber" me gusta juego :)

Sobre el organillocutre :D, no trataba de buscar realismo sino de usar la serie armónica por primera vez en "Síntesis comparada". Sin embargo tu ejemplo viene muy bien, así que lo añadimos como tercer "juego". Añade todo lo que quieras, por favor.

Estupenda la explicación que has hecho en max.

En cuanto al los parciales omitidos del segundo juego, no tienen por qué ser 0.1, pueden ser 0 perfectamente. Prueba distintas combinaciones y obtendrás distintas cascadas. Elegí esa (omitiendo esos tres armónicos), pero puedes elegir lo que quieras. Lo importante es se muestre cómo hacerlo en tu sistema favorito. Tu es que quieres una catarata de armónicos en vez de una cascada!. :D

Gracias por tu max...

A propósito de esto, los ejemplos pueden ser semillas también de los juegos particulares de cada uno. Estaría bien un catálogo de sonidos (con el mapa que indica cómo encontrarlos) hecho de forma colaborativa.


Bueno, más jugadores...
Subir
Robakun
#10 por Robakun el 08/07/2006
ah, no veo la segunda imagen, donde pone "el otro deber"
Subir
Robakun
#11 por Robakun el 08/07/2006
Los ejemplos se pueden escribir así en Nyquist:

1) Organillocutre :)

(defun org (nota)
;suma serie armónica
(let ((amp-arm ' (1.0 0.6 0.8 0.25 0.25 0.5)))
(simrep (i 6)
(scale (* 0.3 (nth i amp-arm))
(hzosc (* i (step-to-hz nota)))
))))

(defun organoi (nota)
;añade un subarmónico
(sim (scale 0.15
(hzosc (/ (step-to-hz nota) 2.0)))
(org nota)))

(defun organoide (nota)
;añade envolvente de amplitud
(mult (pwl 0 0 0.01 1 0.99 1 1 0)
(organoi nota)))
(play (seq
(organoide c4)
(organoide d4)
(organoide e4)
(organoide f4)
(organoide g4)))


2) Organo de iglesia barato pero eficaz

(defun org (nota)
;suma serie armónica
(simrep (i 6)
(scale 0.3
(mult
;caen antes parciales agudos
(pwl 0 0 0.01 1 (- 1.0 (* (/ i 10))) 0 1 0)
(hzosc (* (expt 2.0 i) (step-to-hz nota)))
))))


(defun organoide (nota)
;añade envolvente de amplitud
(scale 0.7
(mult (pwl 0 0 0.01 1 0.99 1 1 0)
(org nota))))
(play (seq
(organoide c2)
(organoide d2)
(organoide e2)
(organoide f2)
(organoide g2)))


3) Cascada (parcial) de armónicos

;USANDO UNA TABLA DE ONDAS PARA
;CREAR ONDA BASE (es sólo una posibilidad)

(defun crea-tabla ()
(setf *tabla* (sim (scale 0.3 (build-harmonic 1.0 2048))
(scale 0.1 (build-harmonic 5.0 2048))
(scale 0.1 (build-harmonic 6.0 2048))
(scale 0.1 (build-harmonic 7.0 2048))
(scale 0.1 (build-harmonic 8.0 2048))
))
(setf *tabla* (list *tabla* (hz-to-step 1) T)))

;CASCADA
(defun cascada (&key frecuencia duracion diff)
(stretch-abs duracion
(simrep (i 10)
(scale 0.2
(osc (hz-to-step (+ frecuencia (* (- i 4) diff)))
q *tabla*)))))


Para hacer funcionar este último, escribir
(crea-tabla)
y luego ya puede usarse, por ejemplo con:
(play (cascada :frecuencia 100 :duracion 20 :diff 0.03))
Subir
palurdo
#12 por palurdo el 09/07/2006
Con la actualización de GISA a la versión 1.0.5 beta, he implementado los ejercicios propuestos:

Organo Casiotone:

descripcion
>Este Script genera un sonido típico de organillo
>Casiotone. Para eso se genera por adicción varios
>armónicos. La f fundamental se calcula a partir de la
>equivalencia en escala de semitonos. Por defecto
>está configurada para C-4. Además se genera una
>envolvente ADSR usando 3 exponenciales.
>
> ADSR - Atack: Rapidez de la curva de ataque.
> ADSR - Decay: Rapidez de la curva de decaimiento.
> ADSR - Release: Duración en milisegundos de la
> curva de "release".
> ADSR - Amp.Pico: La amplitud de la combinación
> de las 2 exponenciales, Atack y Decay.
> ADSR - Sustain: Amplitud de la señal en el intervalo
> de "sustain".
> Amp.General: La ganancia global de la señal.
> Tono - Octava: El número de escala (por defecto la 4)
> Tono - Semitono: (A=0,A#=1,B=2,C=3...)
>
fin

entrada(a,"ADSR - Razón Atack",0.9996)
entrada(b,"ADSR - Razón Decay",0.9995)
entrada(c,"ADSR - Duración Release [ms]",200)
entrada(amp,"ADSR - Amplitud Pico",4)
entrada(nivel,"ADSR - Nivel de sustain",0.50)
entrada(x,"Tono - Numero de Octava",4)
entrada(f,"Tono - Transponer Semitono", 3)
entrada(g,"Amplitud General",0.5)

variable a,b,c,r,amp,nivel,v1,v2,env,g1,g2,g3,x,f,y,g

g1=1
g2=1
g3=1
c=(FM*c/1000)
r=(10/(nivel*32767))^(1/c)
c=MAXITER-c
f=440*2^((f/12)+x-4)

iterar

env=g1*(amp-nivel)-g2*(amp)+nivel
g1=g1*a
g2=g2*b
si (ITER>c) entonces hacer
env=env*g3
g3=g3*r
vale

y=0.5*sin(pi*ITER*f/FM)
y=y+sin(2*pi*ITER*f/FM)
y=y+0.6*sin(4*pi*ITER*f/FM)
y=y+0.8*sin(6*pi*ITER*f/FM)
y=y+0.25*sin(8*pi*ITER*f/FM)
y=y+0.25*sin(10*pi*ITER*f/FM)
y=y+0.5*sin(12*pi*ITER*f/FM)

grabar(g*y*env*32767)

fin


Organo de Iglesia:

descripcion
>Este Script genera un sonido típico de organo de
>Iglesia. Para eso se genera por adicción varios
>armónicos exponentes de 2. La f fundamental
>se calcula a partir de la equivalencia en escala
>de semitonos.
>Por defecto está configurada para C-4. Además se
>genera una envolvente ADSR usando 3 exponenciales,
>mas otra exponencial que controla la caida de cada
>armónico.
>
> ADSR - Atack: Rapidez de la curva de ataque.
> ADSR - Decay: Rapidez de la curva de decaimiento.
> ADSR - Release: Duración en milisegundos de la
> curva de "release".
> ADSR - Amp.Pico: La amplitud de la combinación
> de las 2 exponenciales, Atack y Decay.
> ADSR - Sustain: Amplitud de la señal en el intervalo
> de "sustain".
> ADSR - Dec.Armonicos: Rapidez de caida de los
> armónicos, en proporción a éstos.
> Amp.General: La ganancia global de la señal.
> Tono - Octava: El número de escala (por defecto la 4)
> Tono - Semitono: (A=0,A#=1,B=2,C=3...)
>
fin

entrada(a,"ADSR - Razón Atack",0.9996)
entrada(b,"ADSR - Razón Decay",0.9995)
entrada(c,"ADSR - Duración Release [ms]",200)
entrada(amp,"ADSR - Amplitud Pico",2)
entrada(nivel,"ADSR - Nivel de sustain",0.70)
entrada(x,"Tono - Numero de Octava",4)
entrada(f,"Tono - Transponer Semitono", 3)
entrada(g,"Amplitud General",0.3)
entrada(sigma,"ADSR - Decaida de armónicos",0.99998)

variable a,b,c,r,amp,nivel,v1,v2,env,g1,g2,g3,x,f,y,g,ind,sigma

g1=1
g2=1
g3=1
c=(FM*c/1000)
r=(10/(nivel*32767))^(1/c)
c=MAXITER-c
f=440*2^((f/12)+x-4)
iterar

env=g1*(amp-nivel)-g2*(amp)+nivel
g1=g1*a
g2=g2*b
si (ITER>c) entonces hacer
env=env*g3
g3=g3*r
vale

y=0.5*sin(pi*ITER*f/FM)
ind=0
mientras (indEste Script genera una escala en cascada tipo
>Casiotone. Para eso se genera una onda por adicción
>de varios armónicos y a su vez pequeñas variaciones de
>frecuencia de esa misma onda. La f fundamental se
>calcula a partir de la equivalencia en escala de semitonos
>Por defecto está configurada para C-4. Además se genera
>una envolvente ADSR usando 3 exponenciales.
>Aunque para que se aprecie el efecto es recomendable
>generar 10 segundos o más, como se suman muchas
>ondas, tener en cuenta que puede tardar varios
>minutos en generar la secuencia.
>
> ADSR - Atack: Rapidez de la curva de ataque.
> ADSR - Decay: Rapidez de la curva de decaimiento.
> ADSR - Release: Duración en milisegundos de la
> curva de "release".
> ADSR - Amp.Pico: La amplitud de la combinación
> de las 2 exponenciales, Atack y Decay.
> ADSR - Sustain: Amplitud de la señal en el intervalo
> de "sustain".
> Amp.General: La ganancia global de la señal.
> Desplazamiento de f: el desplazamiento en frecuencia
> de las componentes aditivas.
> Tono - Octava: El número de escala (por defecto la 4)
> Tono - Semitono: (A=0,A#=1,B=2,C=3...)
>
fin

entrada(a,"ADSR - Razón Atack",0.99995)
entrada(b,"ADSR - Razón Decay",0.9995)
entrada(c,"ADSR - Duración Release [ms]",500)
entrada(amp,"ADSR - Amplitud Pico",0.1)
entrada(nivel,"ADSR - Nivel de sustain",0.50)
entrada(x,"Tono - Numero de Octava",2)
entrada(f,"Tono - Transponer Semitono", 0)
entrada(g,"Amplitud General",0.5)
entrada(df,"Desplazamiento de f [Hz]",0.1)

variable a,b,c,r,amp,nivel,v1,v2,env,g1,g2,g3,x,f,y,g,df,y1,x1

g1=1
g2=1
g3=1
c=(FM*c/1000)
r=(10/(nivel*32767))^(1/c)
c=MAXITER-c
f=440*2^((f/12)+x-4)

iterar

>Generamos envolvente ADSR
env=g1*(amp-nivel)-g2*(amp)+nivel
g1=g1*a
g2=g2*b
si (ITER>c) entonces hacer
env=env*g3
g3=g3*r
vale

>Generamos la onda con armónicos

x1=-4
y=0
mientras (x1
Archivos adjuntos ( para descargar)
Secuencia Organo Casiotone.mp3
Escala en cascada.mp3
Secuencia Organo Iglesia.mp3
Subir
Robakun
#13 por Robakun el 02/08/2006
Como es veranito, parece que no es tiempo de lenguajes, ains esa playa...
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo