Síntesis comparada I (hola-mundo II)

faelitox
#16 por faelitox el 18/05/2006
Pues lo he hecho de una manera que no es muy funcional que digamos...

Cree las 7 ondas intentando que tuvieran los mismos parámetros que los que proponias, con el sinte FM del sound forge, 7 archivos de audio, para luego pegarlos todos en uno.

Adjunto el dibujito de la primera onda que cree...


Tambien pongo el link a un mini tutorial, para hacer kicks con este pequeño sinte del sound forge, antes tenia texto explicando un poco el tema, pero parece ser que ya no, una pena...

http://www.infected.co.il/futureCitySki ... 0Tutorials
Subir
OFERTAS Ver todas
  • -6%
    Elektron Digitakt II (B-Stock)
    939 €
    Ver oferta
  • -7%
    Modal Argon8 (B-Stock)
    559 €
    Ver oferta
  • -29%
    Behringer X-Touch Compact
    263 €
    Ver oferta
faelitox
#17 por faelitox el 18/05/2006
Y ahora me doy cuenta que el pequeño sinte tiene para crear 4 ondas distintas y sumarlas, esqueeee, que garrulo soy, haciendo una a una...
Subir
durt
#18 por durt el 23/05/2006
Buenos días,

He estado intentando hacer este ejercício con audacity

y sin no utilizo la funcion pwe la señal me satura y no cae exponencialmente, podrías por favor explicarnos la función pwe.

Gracias

,
mira...
Subir
durt
#19 por durt el 23/05/2006
otra cosa, con la función Pluck se podría llegar al resultado?

si

(stretch-abs 6 (pluck (hz-to-step 240)))


me dá el sonido de una cuerda pulsada no hay alguna forma de utilizar la función SIM e ir añadiendo ondas?

¿ O no es lo mismo?

Saludos
Subir
Robakun
#20 por Robakun el 24/05/2006
Sobre pluck:

Es una versión especial de un algoritmo que se usa mucho en síntesis (Karplus-Strong). Simula una cuerda pulsada. Lo que sumamos aquí son ondas senoidales. Lo que si es verdad que pluck cae exponencialmente también, pero la forma de la onda no es senoidal, es más complicada (usa la lupa de audacity para verla de cerca)

Sobre lo demás contesto en el siguiente:
Subir
Robakun
#21 por Robakun el 24/05/2006
Pongo aquí la explicación que colgué en otro sitio...


Funciones por trozos: la faja sonora

Tanto pwe como pwl son funciones por trozos (en inglés piece wise fuctions). pwl es acrónimo de piece-wise-lineal, y pwe, piece-wise-exponential.

Las funciones por trozos se comportan de distinta manera según en la zona de qué hablemos. La siguiente función es una función por trozos o segmentos lineales, que simula el típico ADSR.

[ Imagen no disponible ]

Cuando x vale 0 y vale 0. Con valor 0.2 en la x, la y toma el valor 1, así sucesivamente. Podríamos resumir la función en esta lista de valores
x y
0 0
0.2 1
0.4 0.5
0.8 0.5
1 0

Sólo hay que apuntar los puntos de cambios, que se unen por segmentos lineales.

Parecida a esta función por trozos lineales, se podrían definir otras funciones por trozos, pero que en vez de cambiar linealmente, varien de otra manera, por ejemplo exponencial. Esta figura representa una función de ese tipo:

[ Imagen no disponible ]

Cuando x vale 0, y vale 1. Cuando x vale 0.4 y 0.5 etc. Sólo que ahora, el dibujo entre punto y punto se hace con una función de caida exponencial. Como imaginarás los tipos de funciones por trozos son infinitas, según eligas el sistema que quieras para dibuajar entre punto y punto.

Es muy usual este tipo de funciones para el control de parámetros. En el caso de la informática musical, el plugin Cristal VST tiene un pequeño panel donde se usan estás funciones para modular parámetros sonoros.

[ Imagen no disponible ]

--------------------------------------------------------------
Sonido y Audacity

En audacity puedes dibujar las funciones anteriores. Desde el comando nyquist se pueden generar funciones piece-wise. Por ejemplo para hacer la primera función escribiríamos:

(pwl 0 0 0.2 1 0.4 0.5 0.8 0.5 1 0)

Sólo que lo que antes llamábamos x ahora es tiempo. Tiempo relativo, es decir 0.5 significa la mitad del sonido 0.75 significa el 75% del sonido...

De igual manera se usan las pwe, versión exponencial. (nota: pwe no puede tomar el valor 0)

Imagina la situación de una onda sinusoidal de una determinada frecuencia.

[ Imagen no disponible ]

Aunque para concretar, sólo nos quedaremos con la onda entre 0 y 1.
Eso en Audacity lo escribimos así, -por ejemplo 300 hz- :
(hzosc 300)


Podemos variar la amplitud de la onda, multiplicándola por otra función. Si multiplicamos la función por 0.5, todos los valores se reducirán a la mitad, y en la gráfica queda escalada, encogida. Ahora bien, genero la función por trozos (en este caso un sólo trozo) como esta:

[ Imagen no disponible ]

En nyquist/audacity eso se escribe así

(pwe 0 1 1 0.01)

es decir, al principio valdrá 1, y al 100% o 1, valdrá 0.01 -recuerda que pwe no puede valer 0. ¿Y para qué sirve?. Si multiplico la onda por esta función, varío (modulo) su amplitud, así:

[ Imagen no disponible ]

Multiplicando entonces ambas funciones obtenemos ese efecto de caída. lo cual se escribe así:

(mult (pwe 0 1 1 0.01) (hzosc 300))


Dicho en cristiano: "multiplicar ese pwe por ese oscilador"

--------------------------------------------------
En lo que venimos haciendo en este hilo, se trata de sumar siete parciales y darle al sonido resultante un efecto de caída. Podría parecer, que es todo muy complicado explicado así, pero en realidad es muy sencillo. En el tema de la síntesis no es ni el tema 0: sumar ondas y multiplicar -intentando que no saturen :). Creo que la única manera de que "no nos den gato por liebre", es que intentemos comprender qué es un gato y qué es una libre :D

(ah para no saturar, tienes que escalar el resultado, para encajonarlo entre -1 y 1. O bien escalar cada uno de los parciales. Tienes entre -1 y 1 para repartir entre todos)

espero que te sirva.
Subir
Robakun
#22 por Robakun el 24/05/2006
ah, para explicarlo bien, en vez de funciones habría que hablar de series de muestras... a ver si alguien se anima a escribir una introducción al sonido digital para hispasonic...
Subir
durt
#23 por durt el 25/05/2006
Gracias por la explicación, ahora comprendo las funciones pwl y pwe


En audacity:

generar silencio=6

(mult
(pwe 0 1 1 0.01)
(sim
(hzosc 240)
(scale 0.83
(hzosc 277 ))
(scale 0.66
(hzosc 385))
(scale 0.33
(hzosc 605))
(scale 0.33
(hzosc 340))
(scale 0.33
(hzosc 670))
(scale 0.33
(hzosc 812))))


Me ha saturado la señal
:)

voy a seguir probando
Subir
Robakun
#24 por Robakun el 25/05/2006
Si, eso es. Ahora se trata de escalar el resultado final para que tenga una amplitud máxima menor que 1. Eso lo puedes hacer de dos formas.

1- "a ojo", aplicando un escale a todo hasta que no sature (mucha gente funciona así, en su programa favorito, ajustando el potenciómetro del master para que no se le escapen saturaciones). Para cosas simples como estas da buen resultado. Piensa que no te puedes pasar de 1: suma las amplitudes de los parciales y ya de antemano sabrás que con los dos primeros ya te pasas.

2- Normalizando automáticamente. Hay funciones para detectar el pico más alto, y normalizar el resultado , pero tienes que aprender a usar defun. Este método es ideal para proyectos grandes en que ya pierdes la cuenta de tantos detalles, y se simplifica todo mucho, si normalizas automáticamente.


Para aprenderlo te recomiendo primero el sistema 1. Métele un scale a lo bestia (scale 0.01 ...). donde están los puntos suspensivos mete tu programa, seguro que así captas la idea.


(por cierto qué foto tan grande has puesto, hispasonic ha engordado)
Subir
durt
#25 por durt el 26/05/2006
Bueno, entonces si lo escalo a 0.99
Subir
durt
#26 por durt el 26/05/2006
:idea: pues sí que han salido grandes !





subo el sonido
Subir
durt
#27 por durt el 26/05/2006
me empieza a gustar, el problema es el primerísimo contacto Nyquist.
Ahora me voy enterando más y audacity es más cómodo, ya que se puede ver lo que hace el sonido,
Los parentesis empiezan a ser un lío.


! la Próxima vez voy a recortar a imagen¡¡

Se me ha visto todo


Gracias y saludos Robakun
Subir
Robakun
#28 por Robakun el 26/05/2006
para manipular paréntesis usa un editor que te ayude. Por ejemplo scite
http://prdownloads.sourceforge.net/scin ... p?download
Simplemente ejecuta el archivo wscite.exe. En el menú "language" elige lisp, y escribe tu programa. Se avisa sobre qué paréntesis estás cerrando, para no perder la cuenta. Además colorea algunas palabras de lisp.
Subir
aha
#29 por aha el 29/05/2006
Bueno, esta podría ser una versión Haskell del invento. Es más interesante ver como trabaja este lenguaje que el ejemplo concreto.... en fin, es una cusiosidad. Lo que va con "--" son comentarios

==============

f_muest = 44100.0 -- frecuencia de muestreo

-- oscilador sinusoidal para una frecuencia dada -> produce infinitas muestras
-- en forma de lista [ _ , _ , _ .... ]
osc frec = map (\x->cos (frec*2.0*pi*x)) [(0+z)/f_muest|z produce la señal correspondiente
sumaOscs o1 o2 = zipWith (+) o1 o2

-- suma de una lista de osciladores
sumaLstOscs (o:os) = foldl (sumaOscs) o os

-- señal de un oscilador dado durante el tiempo especificado
oscT o tiempo = take (round (tiempo*f_muest)) o

-- lo que nos propone Robakun
parcialesRobakun = [(240.0,1.0),(277.0,0.83),(385.0,0.66),(605.0,0.33),(340.0,0.33),(670.0,0.33),(812.0,0.33)]

-- oscilador complejo que toma datos en el formato anterior y produce la señal correspondiente
oscComp parcs = sumaLstOscs [map (*snd p) (osc (fst p)) | p
Subir
grainsinth
#30 por grainsinth el 01/06/2006
En MaxMsp:

[ Imagen no disponible ]
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo