Algoritmos a palo seco

Nox
#1 por Nox el 09/09/2011
Buenas, creo recordar haber visto un hilo como este, pero en todo caso está perdido en la marabunta de hilos, así que abro este nuevo con la esperanza de compartir algoritmos (y/o links, libros, info del tema), obviamente de audio, y con la particularidad de que no sean para una plataforma en específico como max/msp, supercollider, reaktor, etc., sino "a palo seco": el algoritmo explicado matemáticamente o intuitivamente (tienes que multiplicar esto por lo otro, meterle un delay por aquí y filtrarlo así).

También valdrían aplicados a alguna plataforma en concreto, siempre que no se ponga solo una screen del programa en cuestión... mínimo que se explique su funcionamiento someramente, para no tener que saber 20 lenguajes o dominar 15 softwares distintos ;) Aunque bueno, pensándolo bien, pues tampoco sería tan malo aprovechar el hilo para hacer ingenieria inversa entre todos, por ejemplo si está en C, C++ es relativamente fácil traducirlo.

Todo esto viene porque ultimamente he necesitado un par de algoritmos (stereo y filtros de los llamados "resonators"), y a parte de ficheros concretos de plataformas concretas, encontré muy poca cosa y casi todo en KVR. Y oye, KVR está muy bien, pero si ya buscar en una página taan grande es un coñazo, pues si está en inglés peor. Además, que por muy grande que sea no todo está ahí, a veces incluso te encuentras el vst pero no cómo hacerlo.

En fin, si no hay ganas pues ya se irá el hilo pal fondo del foro :P , pero por intentarlo que no quede, que estaría cojonudo tener una relación curiosa de algoritmos, y ya después que cada uno los traduzca a su plataforma ;)

Saludos.
Subir
OFERTASVer todas
  • -37%
    Behringer SU9920
    69 €
    Ver oferta
  • -20%
    Focusrite Scarlett 18i20 3rd Gen
    398 €
    Ver oferta
  • -25%
    Focusrite Scarlett 18i8 3rd Gen
    298 €
    Ver oferta
Lisboetas
#2 por Lisboetas el 09/09/2011
Supongto que ya la conoceras,Lleva bastante tiempo funcionando

http://www.musicdsp.org/
(en la lengua del imperio)



Saludos
Subir
Nox
#3 por Nox el 09/09/2011
Sí, esa la conocía, en mi busqueda del otro día también encontré http://www.synthmaker.co.uk/dokuwiki/doku.php?id=useful_urls:useful_urls#dsp , que es una relación de links de dsp y algoritmos, y algo que los usuarios de max/msp conocerán bien http://www-crca.ucsd.edu/~msp/techniques/latest/book.pdf , que es el libro del Miller Puckette.

Por cierto, me olvidaba que también necesitaba ruido rosa, y buscando encontré http://www.firstpr.com.au/dsp/pink-noise/ , que es una discusión sobre dos métodos para generarlo: pasando ruido blanco por un LPF de 3db/octava, con dos problemas, primer problema hacer este filtro, porque siempre se ven filtros de 2, 4, 8... db/octava, no de 3, y segundo que el cómo de "rosa" sea el ruido generado, depende directamente del filtro; y otro método que consiste en añadir osciladores de ruido blanco uno encima de otro, si no recuerdo mal, bajando octavas a los osciladores.

A ver si esta tarde pongo algo más, para empezar con buen pie el hilo.

Saludos.
Subir
Nico Auvieux
#4 por Nico Auvieux el 09/09/2011
Yo la verdad que no entiendo muy bien la idea pero creo que por lo menos se va a poner interesante... :-k
Yo estoy metiendole mano a Pure Data armando los patchs directamente, pero creo que estaria bueno pensarlos primero en "papel y lapiz" para despues traducirlos a PD (como para ver las cosas de otro modo).

Voy a estar atento y si puedo aporto
Saludos
Subir
Nox
#5 por Nox el 09/09/2011
#4 A ver, yo cuando hago algo a Reaktor de mi propia cosecha, rara vez lo hago antes a papel a no ser que no lo tenga muy claro, la coña de este hilo es, simplemente, acumular un poco el conocimiento para no tener que pegarnos megabusquedas.
De todas formas, voy a poner un par de ejemplillos para hacer cosas típicas, que son fáciles de encontrar (incluso en la wikipedia inglesa, que no es tan mala pa estas cosas, por cierto) y de hacer, para que se vea un poco más claro.

Vibrato: Por pura lógica, si tienes acceso al pitch el vibrato se hace modulando el pitch con un LFO. Pero si no tienes acceso al pitch original, por ejemplo si estás haciendo un efecto a tiempo real para cualquier fuente de audio como un sinte hard o un sample, conectas la fuente de sonido a un delay, y modulas el tiempo de retardo con un LFO. De esta forma, la velocidad del vibrato es igual a la velocidad del LFO, y la cantidad de vibrato igual a la cantidad de modulación del LFO.

Filtro Comb: Se consigue añadiendo a la señal original, la misma señal retardada unos cuantos milisegundos (yo suelo dejarlo entre 0 y 30). Los milisegundos que se retarda la señal son el cutoff del filtro, la cantidad de señal retardada que añades (feedback de toda la vida) es la resonancia. Además puedes hacer 2 tipos de filtro comb, uno retardando la señal original pura y sumando, y otro retardando la señal ya sumada y volviendo a sumar... con las imágenes que aparecen en la wikipedia se entiende mejor, y además está toda la parafernalia matemática.

No son algoritmos matemáticos tal cual (sinceramente, a esta hora acabo de levantarme de una mega siesta :shock: así que no hay ganas :desdentado: ), pero si se entienden, valen.

Saludos.
Subir
Nox
#6 por Nox el 11/09/2011
Algo curioso que he encontrado sobre la superwav de roland, usando PD: http://www.ghostfact.com/jp-8000-supersaw/
Subir
Nox
#7 por Nox el 03/10/2011
Bueno, creo que o la idea no interesa, o como decía un profe mío sobre la bolsa "el que se sabe el truco no te lo va a decir a ti" :mrgreen:
Así todo voy a probar a darle un último empujón con un post que ha surjido en los foros de reaktor de NI (http://www.native-instruments.com/forum/showthread.php?t=149876) que ha provocado mi curiosidad, donde se pedía una manera de obtener la frecuencia de un sonido, por ejemplo de un sample vocal, con alguien cantando vamos.

Yo, si bien es verdad que he leído del tema en algún foro, no tengo ni idea de lo que puede decir la teoría sobre esto, así que pensándolo un poco, directamente hice una core cell en reaktor que cuenta los samples que tarda la onda en cruzar 0, y dividiendo la sample rate entre el número de samples debería obtenerse la frecuencia.

En la práctica esto funciona... con un par de peros:

1 La frecuencia obtenida siempre tiene pequeñitas variaciones sobre la real, algo como lo que los guiris llaman "jitter". Por ejemplo si la frecuencia es 440, el resultado siempre va variando entre distintos decimales de 439/440/441.
2 Para ondas simples no debería haber problema, pero si la onda es un pizco diferente de lo normal (prácticamente todas), no va a cruzar el 0 un mismo número de veces en cada ciclo, una lo cruzara 2 veces y otra 6...

El primer problema lo resolví haciendo una media de los distintos valores, concretamente crei lo más correcto hacerlo por medias móviles (modelo ARIMA si lo buscáis en la wikipedia), así que hice una simplificación de dicho modelo y se acabó el "jitter" completamente en ondas simples, dando un resultado estable. El problema que tiene esto es que las medias móviles necesitan un poco de tiempo para estabilizarse, así que si hay cambios rápidos de frecuencias (una melodía un poco más rápida de lo normal), acaba haciendo cosas raras.

El segundo problema todavía no lo he resuelto... simplemente le puse un knob para controlar ese número de veces que la onda debe cruzar 0, y efectivamente hay que cambiarlo según el tipo de onda. Por ejemplo cuando usas una onda simple de un oscilador de reaktor, con 2 veces que cruze 0 reconoce la frecuencia perfectametne, sin embargo usando un sample que tengo en el HD de un violín manteniendo un Do4 hay que ponerlo a 3 :shock: , y para samples de batería hay que poner más todavía.

En fin... ¿Alguna idea, referencia para leer, comentario?

Saludos.
Subir
Dan_Vates
#8 por Dan_Vates el 19/03/2012
algo que podría servir mucho para esto es el siguiente libro.
De paso si alguien lo encuentra en i-net porfa que pegue el link para descargarlo, ahí sale practicamente todo.

"the computer music tutorial"
Curtis Roads

http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&tid=8218

Honestamente a mi parecer es el mejor que hay sobre esto.
Subir
Nox
#9 por Nox el 19/03/2012
#8 Gracias Dan, con ese autor seguro que vale la pena, echaré un vistazo por ahí.
Subir
Dan_Vates
#10 por Dan_Vates el 22/03/2012
Pensaba que, para dar ms vida a este post, podríamos hacer preguntas sobre como hacer tal o cual cosa, por ejemplo que alguien pregunte ¿como aplicamos una modulación de anillo a un sonido entrante?" entonces alguien responde "tienes la señal de entrada y la utilizas como portadora, entonces la multiplicas por un oscilador que hará de moduladora, a baja frecuencia obtienes una especie de tremolo y a altas frecuencias un nuevo timbre (como una distorsión del sonido), la amplitud de la moduladora es también el indice de modulación"

De esa forma, pregunta respeusta, sabremos que poner, personalmente tengo mucha info, pero no sé como o por donde empezar a entregarla :P

P.D. Este año aprendo a realizar convolución en tiempo real, busquen sobre convolución en el sonido, es bastante entrete e interesante, a penas lo maneje bien lo posteo :P
Subir
vagar
#11 por vagar el 19/04/2012
Nox escribió:
obtener la frecuencia de un sonido


http://en.wikipedia.org/wiki/Pitch_detection_algorithm

Yo uso un algoritmo basado en autocorrelación en "Orfeo y los Argoflautas":

http://vagar.org/wordpress/?tag=orfeo-y-los-argoflautas&lang=es

Si usas un algoritmo temporal y quieres más resolución siempre puedes sobremuestrear la señal (intercalas ceros y metes un filtro paso bajo).
Subir
Roberto Aramburu
#12 por Roberto Aramburu el 14/05/2012
en mi blog hay varios algoritmos a palo seco, aplicados a pure data pero la teoría se aplica a cualquiera lenguaje...
Están muy buenos tus sonidos en Csound Dan_Vates. Porfa no pidas una "copia para libre descarga" de un libro que sabemos que no es gratuito en un foro público, pones en riesgo a toda la comunidad. Mal, mal, mal, mal...
Subir
Dan_Vates
#13 por Dan_Vates el 14/05/2012
Ardot Adot escribió:
Porfa no pidas una "copia para libre descarga" de un libro que sabemos que no es gratuito en un foro público, pones en riesgo a toda la comunidad. Mal, mal, mal, mal...


Lo siento O.o no sabía que no era para libre descarga.
Subir
Nox
#14 por Nox el 14/05/2012
A ver, que tenía muy olvidado este post yo.

#10 Es una buena idea, el problema es que alguien tiene que venir a preguntar :P
Por cierto, lo de la convolución es algo que me ha intrigado siempre. A lo mejor es que no termino de entender el concepto, pero no le veo la utilidad práctica :| ... es decir, he leído que se usa para varias cosas, típico de reverbs, pero no veo cómo ni por qué.
Lo que me sorprende es que en la wikipedia diga que es un tipo de media móvil :shock: , yo he usado mucho medias moviles en estadística, y no le veo el parecido por ningún lado, la verdad.

#11 Ya no estoy con lo de detectar la frecuencia, pero así todo es interesante, nunca pensé que se pudiera hacer mediante correlación. De todas formas, por pura curiosidad y ya que lo has usado, ¿cómo lo haces? ¿desplazas la señal original en una frecuencia determinada, si hay autocorrelación esa es la frecuencia de la onda y si no hay vas aproximando?

Lo de sobremuestrear la señal lo leí en un artículo en algún blog en inet, si no recuerdo mal incluso daba coeficientes para el filtro, pero los filtros son una asignatura que tengo pendiente, más que nada por desinterés... es que ya hay tantos disponibles :roll:

#12 Los he visto Ardot ;) , ya he probado alguna cosilla de las que has puesto, por ejemplo me llamó la atención lo de filtrar la señal moduladora en síntesis FM, dándole resonancia, da resultados interesantes. No se por qué no lo hice al final (se me olvidaría), pero en http://en.wikipedia.org/wiki/FM_synthesis sale algo interesante que yo desconocía: una fórmula que relaciona la cantidad de modulación aplicada a la onda carrier, con la frecuencia de la onda moduladora: I=d/Fm. Siguiendo esa fórmula consigues ajustes en los armónicos muy precisos sin tener que usar 15 knobs.

Saludos.
Subir
vagar
#15 por vagar el 14/05/2012
#14 No la desplazo una frecuencia, la autocorrelación es una técnica temporal. La voy desplazando un instante, cada vez mayor, hasta que obtengo un pico de correlación. Ese desplazamiento en el que se detecta el pico es el periodo de la señal, y su inversa es la frecuencia.

Después para hacer el proceso eficiente algorítmicamente aplico una batería de optimizaciones más o menos sofisticadas, pero ésa es la base.
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo