Una FFT muy pedagógica 
He encontrado una implementación muy sencilla y pedagógica (aunque no muy eficiente en términos de memoria) del algoritmo de Cooley-Tukey de FFT para arrays de tamaño potencia de 2. Se pueden obtener del depatramento de informática de la universidad de Princeton, más concretamente en los siguientes enlaces: FFT.java y Complex.java.

He estado haciendo pruebas calculado el error cuadrático medio entre x y IFFT(FFT(x)) y se obtienen valores inferiores a 1E-30 para tamaños de entrada lo suficientemente grandes (65536 o más). El algoritmo no es muy eficiente en términos de memoria ya que hace varios new en cada llamada recursiva, pero eso facilitará la comprensión del mismo.

El siguiente paso será utilizar esta implementación de la FFT para implementar el algoritmo que dejé aparcado a un lado hace algunas semanas: el de separación de fuentes de sonido mediante discriminación por acimut. El objetivo final es extraer la voz de una grabación comercial estéreo. A ver si sale. Ya iré contando mis logros y mis sinsabores :-).

[ 9 comentarios ] ( 2216 visualizaciones )   |  [ 0 trackbacks ]   |  enlace permanente
  |    |    |    |   ( 3 / 2653 )
La FFT de la sección soft está mal 
Ayer estuve haciendo una pruebas para implementar el algoritmo de separación de fuentes de sonido mediante acimut que comenté en el anterior post y me di cuenta de que el algoritmo de la FFT/IFFT que tengo colgado en la sección soft está mal. Hice unas pruebas de error cuadrático medio entre x e IFFT(FFT(x)) y los resultados fueron bastante desastrosos :-(. Afortunadamente pillé un buen pseudocódigo por internet y en estos días a ver si puedo implementarlo.

Aparte de esto, Mari me acaba de llamar pa decirme que el ordenata está pitando que da gusto; me da que porque el ventilador está ya el pobre que no da pa más. Espero que limpiándolo un poco vuelva a enfriar como es debido. Ha tenido que apagarlo :-(.

[ 19 comentarios ] ( 1564 visualizaciones )   |  [ 0 trackbacks ]   |  enlace permanente
  |    |    |    |   ( 3 / 4161 )
Documentación sobre síntesis y procesado de audio 
Ayer descubrí una joya de la documentación :-). Se trata de la DAFx o International Conference on Digital Audio Effects. La última ha sido la celebrada en Madrid, en la Politécnica (http://dafx05.ssr.upm.es). De esta última conferencia no he podido encontrar PDFs ni documentación útil asociada. Sin embargo la anterior edición fue en Naples (Italia) y ellos sí que dejaron un buen popurrí de PDFs para deleite de los aficionados, como yo, al audio digital 8-).

La página principal de la conferencia es http://dafx04.na.infn.it y los PDFs se pueden obtener de http://dafx04.na.infn.it/WebProc/Proc/. En fichero Contents.pdf es un índice de los artículos presentados en dicha conferencia y los ficheros P_xxx.pdf son los susodichos artículos :-). El que más me ha gustado es el 240: Sound source separation: Azimuth discrimination and resynthesis. Donde explican un método para extraer voces e instrumentos aislados de grabaciones estéreo. Creo que voy a intentar implementarlo, no tiene pinta de ser difícil.

[ añadir comentario ] ( 1245 visualizaciones )   |  [ 0 trackbacks ]   |  enlace permanente
  |    |    |    |   ( 3 / 3879 )
MOD player en punto fijo 
Hacía tiempo que no posteaba algo por aquí. Lo cierto es que estoy algo estresadillo ya que voy a comprarme un piso en Las Palmas y estoy de papel en papel y tiro porque me toca.. :-). Sin embargo el estrés no me impide el loable ejercicio de la programación y acabo de subir a la sección "soft" un reproductor de fichero de música MOD (si, si, los del Amiga ^_^) recién salidito del horno que he hecho en C y que utiliza un algoritmo de mezcla en punto fijo. El reproductor no soporta todos los efectos (aún no tiene trémolo ni vibrato, por ejemplo) y el objetivo final es portarlo para Gameboy Advance y en eso estoy trabajando ahora.

El problema de la Gameboy Advance es que si quieres que la rutina de interrupción del DMA para el audio te vaya a toda hostia la tienes que alojar en la IWRAM (In-Chip Work RAM) y ahí sólo tienes 32 Kbytes para código. Tal cual está escrito el reproductor, el código compilado no cabe en estos 32 Kbytes y estoy optimizando algunos cálculos de 32 bits y evitando en lo posible realizar divisiones (el procesador ARM7TDMI de la GBA no sabe dividir :-) ) para no generar código en exceso.

Ya iré comentando los avances.

[ añadir comentario ] ( 1352 visualizaciones )   |  [ 0 trackbacks ]   |  enlace permanente
  |    |    |    |   ( 3 / 2016 )
ShakeTracker para gcc3 
Hola. Cansado de esperar a que Juan Linietsky parchee su fantástico programa secuenciador MIDI ShakeTracker para Linux para que compile con gcc3 y superiores; me he puesto manos a la obra y lo he parcheado yo. Ahora ya compila perfectamente con gcc3, aunque cuando intentas exportar la canción a fichero MIDI pega un rebentón y termina el proceso :-(. De resto funciona muy bien y ya lo he estado usando pa hacer algunos temas con el Fantom XR. Va de cojones ;-)

Por cierto, cambié la asignación de la tecla NOTE OFF para que fuese el carácter "<", ya que es más accesible en los teclados en español que la tecla "acento agudo" que tenía antes :-)

Se lo pueden bajar en el nuevo enlace "soft" del menú principal. El ShakeTracker original está en http://www.reduz.com.ar/cheesetronic y tiene licencia GPL. A disfrutarlo ^_^

[ añadir comentario ] ( 1340 visualizaciones )   |  [ 0 trackbacks ]   |  enlace permanente
  |    |    |    |   ( 3 / 2927 )

<< <Anterior | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |