PD Patch convertir señal de Audio en Midi para activar Vsti

  • 1
mnugenty
#1 por mnugenty el 16/12/2011
Hola a todos, un saludo afectuoso.

Les explico, soy guitarrista y me he planteado el proyecto de elaborar un Patch en PD para conectar mi guitarra a la tarjeta de sonido (via plug - señal de audio)y al tocar , hacer sonar mi guitarra como un teclado, viento, etc , con un Vsti.

La idea es recibir la señal de audio e identificar la nota que se esta tocando (siguiendo la idea de un digi tuner), una vez identificada la nota enviar una señal midi a un vsti que pueda hacer sonar un instrumento en tiempo real con las notas correctas.

Lo pienso trabajar en Pure Data.

Seria interesante recibir algunas ideas , sugerencias , o incluso diagramas que pudieran ayudarme en este proyecto.

Mil gracias .

Estaremos comunicandonos.
Subir
OFERTASVer todas
  • -26%
    Slate Digital ML-1 Matte Black
    325 €
    Ver oferta
  • -7%
    Modal Argon8 (B-Stock)
    559 €
    Ver oferta
  • -11%
    Focusrite Scarlett 8i6 3rd Gen
    177 €
    Ver oferta
mnugenty
#2 por mnugenty el 16/12/2011
Estuve investigando un poco acerca de mi proyecto y encontre estos patches en la web .

Los puse a funcionar pero no me suena nada.

Creo que me esta faltando la manera de enviar la señal al programa o Vsti. Tengo instalado el Midi Yoke .

Por otro lado creo que el fiddle2midi seria el que mas me podria servir . Que opinan ??
Archivos adjuntos ( para descargar)
02b fiddle2MIDI.pd
02fidd.jpg
00b Triggering MIDI with Audio (env~).pd
trigger.jpg
Subir
Jordi Torres
#3 por Jordi Torres el 16/12/2011
Investiga también el objeto sigmund~ (similar a fiddle~).

Saludos,

J.
Subir
mnugenty
#4 por mnugenty el 16/12/2011
Por lo que he podido investigar fiddle podria hacer que falle el patch. Seria mejor utilizar {sigmund[ para que consuma menos CPU , debido a la cantidad de muestras que puede manejar .
Subir
Roberto Aramburu
#5 por Roberto Aramburu el 16/12/2011
siguiendo :comer:
Subir
mnugenty
#6 por mnugenty el 16/12/2011
Estoy trabado , despues de todo lo que he estado estudiando e investigando p mi proyecto.

Cuando quiero hacer la prueba , abro PD primero y configuro Midi Yoke 1 , luego abro Sample tank (vst) o Ableton live y me sale un error por el cual se desconfigura la salida de audio y se desasigna la tarjeta . La vuelvo a asignar en la configuracion del vst o live y no me deja . Vuelve a aparecer el mismo error.

He tenido que restaurar el sistema para que funcione de nuevo.

Quizas alguien pueda guiarme con este problema.

Trabajo en PC con Live Suite 8.2.2 , mi tarjeta M audio fast track , con ASIO , Pd ver 0.42.5 .


Antes he trabajado con Pd un sistema para enviar valores aleatorios a los knobs de live y me ha funcionado bien .

No se que pasa !!
Subir
pd_sergio
#7 por pd_sergio el 12/01/2012
Saludos mnugenty, me alegra que utilizes PD para tan nobles propositos, hace tiempo hice un path parecido, metia la guitarra le hacia una eq para que llegasen solo los armonicos fundamentales, entre 164 y 1500 Hz. luego el fiddle~ y le conectaba varios senos, funcionaba pero un poco caotico asi que lo deje, a ver si lo encuentro.
Subir
pd_sergio
#8 por pd_sergio el 13/01/2012
He probado algunas cosas, lo de convertir audio a midi siempre a sido dificil, con este path he conseguido mandar note on y note off a Qsynth, y el tiempo mas o menos lo cumple, pero no consigo que me de la nota correcta, varia como 4 o 5 semitonos por arriba o por abajo aleatoriamente, al ponerle un delay al disparador mejora un poco pero no llega a afinar bien, posiblemente sacrificando mas tiempo de respuesta mejore mas.
Archivos adjuntos ( para descargar)
Guitarra midi.png
Subir
pd_sergio
#9 por pd_sergio el 13/01/2012
Este otro pach curiosamente si es muy exacto en la afinacion, en vez de disparar midi, hace sonar 3 osciladores pero hace muchos ruidos al comenzar la nota.
Archivos adjuntos ( para descargar)
Guitarra sint.png
Subir
Nox
#10 por Nox el 14/01/2012
Aún a riesgo de meter la pata, ya que no trabajo con PD, para pasar audio a midi lo primero que tienes que hacer es un algoritmo que reconozca el tono de lo que tocas, y ese tono ya lo envías por midi según permita la plataforma. Después tienes que hacer algo como una envelope follower, con la cual reconoces el ritmo.

En el último post de este hilo que abrí buscando algoritmos está lo que yo intenté en Reaktor, contando la cantidad de veces que la onda cruza el 0. Según he leído por ahí hacerlo vía FFT da resultados más estables y ahí paré de investigar... fourier tiene el problema de siempre, a mayor es la ventana para hacer los cálculos mayor precisión tiene, pero también aumenta la latencia y/o el consumo de CPU, así todo, por lo que he visto por ahí, si lo dominas se consiguen buenos resultados.

Saludos.
Subir
pd_sergio
#11 por pd_sergio el 15/01/2012
Saludos Nox, y desde luego no temas meter la pata que para eso posteamos, lo peor siempre es cuando no responde nadie. Me gusta mucho tu solucion de contar las veces q la señal cruza el 0, yo tambien pense algo asi, pero no se me ocurre como desarroyarlo matematicamente, he leido el post "Algoritmos a palo seco" esta muy bien, yo empeze con Reaktor pero me pase a Linux y tras provar PD estoy enganchado. En este pach el objeto "fiddle" hace un analisis fft, y te puede dar asta 3 armonicos distintos, puedes cambiarle el tamaño de ventana y no sé cuantas cosas mas, funciona muy bien, un poquito de latencia, pero para mi aceptable, el problema es el ataque del instrumento, porque son entre 10 y 100 milisegundos en el que el golpe de pua (mas rapido que los dedos) genera un ruido de amplio espectro que confunde al fft , cuando pasa este ruido y se quedan los armonicos bien definidos entonces no hay problema, incluso reconoce el cambio de afinacion o bending al momento.

Otra idea que tengo para hacer esto mismo es pasar el sonido por varios filtros paso banda con el Q muy alto, cada filtro con la fq de una nota midi y cuando un filtro de una salida muy fuerte dispara esa nota midi, (no se si me he explicado), esto implica poner un filtro por cada nota midi, una solucion un poco bruta, y si los filtros fuesen analogicos no habria latencia, pero al ser por software no se si dara mas latencia que por FFT. Bueno a ver si lo pruebo.

Y otra cosa es el trigger para disparar la nota midi, en este path funciona con un detector de Rms que cuando pasa de -60 db dispara note on y cuando baja de -60 db dispara el note off, es decir que no diferncia entre notas fuertes o debiles, intente un seguidor de picos que sirve para darle distinta intensidad a cada nota, pero no termina de funcionar.
Bueno poco a poco. Un saludo Nox, ¿ Como hiciste lo de cruze 0 ?
Subir
Nox
#12 por Nox el 15/01/2012
Pues no sé cómo funciona PD, así que no sé si podréis usarlo igual; en Reaktor es bastante fácil por que dispones de los valores de la onda a cada sample, de esa forma en cada sample miras a ver si la onda ha cambiado de positiva a negativa(o viceversa), y si ha cambiado es que ha cruzado el eje, cuentas el número de samples que ha tardado en cruzarlo, formulita y obtienes la frecuencia. El algoritmo en pseudo código sería algo así:

1. Creas dos variables, por ejemplo "Positivo" y "Cambio", y dos contadores que cada vez que reciban una señal sumen uno.
2. A cada sample:
2.3. Sumas 1 al primer contador
2.2. If (valor de onda) > 0 entonces Positivo = 1 ; else Positivo = 0
2.3. If Positivo = Cambio entonces no hace nada; else suma uno al segundo contador y haces Exor Cambio (Exor es como un flipFlop, si la variable era 1 la convierte en 0, y si era 0 la convierte en 1)


Por otro lado, sabes que si divides la sample rate entre un número de samples, obtienes la frecuencia correspondiente (la sample rate es el número de samples por segundo, y la frecuencia es el número de ciclos por segundo), así que queda un tercer paso.

3. A cada sample haces la siguiente fórmula: SampleRate / número de samples transcurridos a cada cruce(samples del primer contador)

Y esa fórmula te da la frecuencia que pasas a pitch.
Faltarían un par de pasos para resetear los contadores, quizás algún detalles más y, como decía antes, no sale bien en todos los sonidos si solo tienes en cuenta un cruce, así que tienes que cambiar el número de cruces en el cual cuentas los samples para usar la fórmula. Pero bueno, en general así es cómo funciona.
Lo bueno es que es prácticamente instantaneo, sin latencia audible. Lo malo es que no tengo la más mínima idea de cómo determinar el número de cruces de forma automática :desdentado: , así que hay que ir probando a mano con cada sonido #-o . También es verdad que si lo usas tal cual, tiende a bascular entre 1, 2 o 3 tonos alrededor del tono verdadero; yo resolví esto haciendo una media. Al final, descubriendo el número de cruces a mano y en mi caso usando ARIMA para la media, el resultado es muy bueno y estable... pero lo de los cruces es un coñazo tremendo, a veces no aciertas ni de coña :???:

Lo de los filtros está bien pensado, pero necesitarías demasiados para llegar solo a un tono ¿No?... son 127 notas... si el fiddle este tiene una buena latencia, yo ni me lo pensaría, por que se supone que si la ventana es lo suficientemente grande, el FFT te da siempre el resultado más cercano a la onda real.
El problema del ataque es un buen problema, se me ocurren dos posibilidades: que establezcas un threshold en tonos y en milisegundos, y si el cambio de tono en esos milisegundos es mayor que ese threshold el patch no envía la nota midi; que directamente el patch no tome en cuenta los primeros milisegundos de cada nota, usando un envelope follower por ejemplo. Las dos cosas seguro que te darán más latencia, pero no se me ocurre nada más.
Para la intensidad de la nota yo directamente usé el envelope follower que viene en Reaktor "de fábrica", así que ni idea.

Saludos... y perdón por el tocho de post :shock:
Subir
pd_sergio
#13 por pd_sergio el 17/01/2012
Un buen tocho, y muy instructivo. Es la primera vez que veo pseudo codigo, pero mas o menos lo entiendo, he intentado pasarlo a Pd pero los objetos de audio que conozco no me permiten realizarlo, con objetos de control si, pero al ir a una velocidad mucho mas baja que los sampler no me sirve para nada, bueno seguro que en un futuro me servira para algo.

He intentado con los filtros pasabanda, solo con 6, y es muy dificil calibrarlos para que actuen bien, ademas es un follon, asi que voy a quedarme con lo del "fiddle" con 60 ms. de latencia va bastante bien, afina casi todas las notas, aunque para controlar un vst es demasiado. Lo de establecer un umbral minimo me va a servir para el seguidor de picos, porque salta a cada momento.
He llegado a la conclusión que es poco practico pasar audio a midi en tiempo real, pero para controlar sintes dentro de PD si esta muy bien, a ver cuando tengo un poco de tiempo para depurarlo y lo publico por aqui.
Saludos Nox y buen trabajo con los articulos de Reaktor.
Subir
Nox
#14 por Nox el 17/01/2012
#13 Sí, tienes que hacerlo mínimo a la velocidad de tu sample rate, no hay otra manera... pero me resulta extraño que PD no tenga nada para trabajar a esa velocidad... ¿no?

Gracias por lo de Reaktor ;)

Saludos.
Subir
pd_sergio
#15 por pd_sergio el 18/01/2012
Pd trabaja igual que Reaktor con objetos de datos y otros de audio, los que trae Pd son pocos, aunque tampoco los se manejar todos, pero en ampliaciones que ha ido programando la comunidad seguro que esta, pero hay que meterse en las ayudas de cada objeto a ver que hace.
Rebuscando he encontrado un objeto que detecta picos, bueno, esto es asi , poco a poco.
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo