Primeros pasos programando plugins LV2

anecochea
#1 por anecochea el 27/07/2014
Atendiendo a la sugerencia de lgarrido he subido mis primeros plugins lv2 a un repositorio en GIT.
Ojo que es un trabajo muy incipiente y estoy a la par aprendiendo c y aprendiendo sobre audio.
Se trata entonces de un proyecto de aprendizaje más que para lograr resutados reales en el corto plazo.
Hay muchos bugs que no tengo idea como resolver. Y de hecho gran parte del código son intentos de solución a estos bugs.
Así que como advertencia: úsese bajo su propio riesgo :D

He reciclado el nombre puyen, para este proyecto.
Hay tres plugins:
- Eco Delay: Produce un delay cíclico con 0 a 3 segundos de duración.
- Overdrive: hace un clip sobre una señal.
- Synth: sintetizador simple con un oscilador

Sin más preámbulo aquí está el repo:
http://sourceforge.net/p/puyen-lv2/code/ci/master/tree/

El bug que más me complica es un molestísimo ruido que genera el delay al cargarlo en Ardour. He probado de todo y no doy con la solución.
En fin, tengo miles de cosas que hacer así que voy a dejar este tema de lado por un par de semanas y luego lo retomo.
Subir
1
OFERTASVer todas
  • -40%
    Roland SPD-20 Pro BK Octapad
    398 €
    Ver oferta
  • -11%
    Arturia Minilab 3
    85 €
    Ver oferta
  • -29%
    Sinte analógico de bajos Donner B1
    99 €
    Ver oferta
vagar
#2 por vagar el 27/07/2014
Estupendo, así se facilita todo mucho.

Así a primera vista un par de optimizaciones triviales (que posiblemente te las haga el propio compilador) serían inicializar el buffer con memset y calcular sample_rate*3 una sola vez al crear el plugin.

También tienes que usar el operador lógico && en los condicionales en lugar del aritmético binario &, es un error frecuente puede dar resultados inesperados. Luego intento seguirle un poco el flujo a ver si veo algo más que pueda dar problemas.

Y quitar los printf en la versión de producción, claro.
Subir
anecochea
#3 por anecochea el 28/07/2014
lgarrido escribió:
calcular sample_rate*3 una sola vez al crear el plugin

No sé si hice lo que me sugeriste pero al hacerlo se arregló el error en Ardour. El problema es que al principio grababa solo un segundo (sample_rate) luego cambié a tres segundos (sample_rate * 3) pero al hacer este cambio olvidé multiplicar por tres en la línea que rellena record con ceros.
Un error totalmente absurdo :oops:

lgarrido escribió:
tienes que usar el operador lógico &&

Hecho, es que vengo de otro lenguaje y me acostumbré a usar &.

Ahora me queda organizar el código, lamentablemente yo programo de una forma intuitiva así que mis códigos son un completo caos :desdentado:

En resumen arreglado el problema con ardour :yuju:
Como dije dejaré de lado este proyecto por dos semanas, pero una vez que me desocupe un poco de mis quehaceres retomo, tengo hartas expectativas, ojala pueda concretarlas :D
Subir
anecochea
#4 por anecochea el 30/07/2014
Ups, hice los cambios localmente pero no hice el commit. todavía no me manejo con git :oops:
Ahora sí funciona en Ardour.
Subir
baltardesign
#5 por baltardesign el 03/08/2014
Guau! :D aprovechando el estado en lo que se encuentran te voy a hacer unas preguntitas un día de estos, todo desde el punto de vista de alguien muy novato en programación :D

Son unos proyectos con muy buena pinta para el aprendizaje, desde luego. :D
Subir
anecochea
#6 por anecochea el 05/08/2014
Pregunta no más, si ya me estoy peinando con los algoritmos de sonido y DSP (sí poh) :^o

Fuera de webeo creo que he logrado aprender un par de cosas interesantes pero me queda muchísimo camino por recorrer, de todas formas, intentaré responder en la medida de mis conocimientos.

En mi experiencia (humilde todavía) creo que es importante manejarse con tres cosas. La primera, por supuesto, es la programación en c o c++. La segunda es el sonido. Y la tercera son los conceptos sobre el DSP.

La primera se resuelve con tutoriales de programación.
La segunda y tercera, hay mucha bibliografía en Internet. Dentro de todo eso, te recomiendo un libro que considero una pieza fundamental (quizás ya lo has leído):
http://www.pd-tutorial.com/

Si bien es un libro principalmente enfocado en Pure Data, los principios que se enseñan ahí son aplicables a cualquier lenguaje. Y los explica de un modo sumamente didáctico.
Subir
vagar
#7 por vagar el 06/08/2014
Otros dos libros interesantes son:

"The Scientist and Engineer's Guide to Digital Signal Processing" de Steven W. Smith

http://dspguide.com/

"The Theory and Technique of Electronic Music" de Miller Puckette (el autor de PureData):

http://msp.ucsd.edu/techniques.htm

Y todas las recetas y ejemplos de:

http://musicdsp.org/
Subir
anecochea
#8 por anecochea el 09/08/2014
#7
Muy buen material. Vamos a ir digiriendo de a poco, Gracias.

--- o ---

He actualizado mi proyecto:
- En el delay: Introduje algunas simplificaciones al código que, en teoría, lo harán más legible y eficiente.
- Añadí un nuevo plugin, es un filtro lowpass que utiliza las fórmulas de la siguiente página:
http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt

Todavía me falta mucho para aprender a diseñar mis propios filtros, así que por el momento estoy haciendo puro copypaste.

Mis dos objetivos a corto plazo son los siguientes:
- Organizar el código para que las funciones que sirvan a varios plugins queden en librerías separadas.
- Hacer el código más legible y escribir comentarios para que el código sea "didáctico" para los novatos.
- El overdrive actualmente es un simple clip, no es útil para distorsionar una guitarra. Mi idea es hacer un overdrive real.

Queda mucho trabajo, pero ha sido un ejercicio muy entretenido :D
Subir
vagar
#9 por vagar el 05/09/2014
Xavier Serra, del Music Theory Group de la Universidad Pompeu Fabra y Julius O. Smith de Stanford imparten un curso online gratuito sobre proceso de señal para aplicaciones musicales:

https://www.coursera.org/course/audio

Todo el software y los contenidos utilizados en el curso tienen licencias abiertas, la plataforma de desarrollo es Python sobre Ubuntu.

Temario:

Week 1: Introduction; basic mathematics
Week 2: Discrete Fourier transform
Week 3: Fourier transform properties
Week 4: Short-time Fourier transform
Week 5: Sinusoidal model
Week 6: Harmonic model
Week 7: Sinusoidal plus residual modeling
Week 8: Sound transformations
Week 9: Sound/music description
Week 10: Concluding topics; beyond audio signal processing
Subir
1
anecochea
#10 por anecochea el 09/09/2014
Gracias por el dato :)
Intentaré hacerme el tiempo para participar, aunque últimamente estoy sobrecargado en mi trabajo.
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo