Habi Hablóg
Declaro:
XML válidoXHTML válido800x600 +
RSS válidoCSS válidoNavegador digno
  Blog   Archivo   Contacto   Administración  

Acerca de

Matemático, informático, aficionado a la electrónica, friki... y otras cosas que no vienen a cuento ni pasan los filtros de palabras.

¿Queríais un blog? Ahí va.

Red antisocial

¡Me van a volver loca! 2.0
La Fragata Portuguesa

Z
¡Me van a volver loca!

Últimos posts

Crackeo preservativo
Restaurando ROMs
Una cosa lleva a la otra
Desbloqueando logros
Teclado en el PCW

Últimos comentarios

genocho
Victor Cortes Abad
Habi
Enrique
Dandare

Calendario

No hay fechas.

Categorías

Chorradas
Paranoias
Posts lúcidos
Tecnoesoterismo
Yuyus

Cenas de Abj

Abj debe 7 cenas.

Frase célebre

Abj dice: mail... 
 
Hamelín dice: mail 
 
Zarith dice: mail 
 
Habi dice: mail

Experimentos (IV)

Habi - 31/01/2009 0:53:12 - Tecnoesoterismo

Hace tiempo solía escuchar música en un lugar de internet de cuyo nombre si quiero acordarme: Pandora.

Ya no lo hago, pues restringieron su uso únicamente para gente de EEUU (debido a las restricciones legales de la música). Se puede entrar usando un proxy estadounidense, pero no es lo mismo.

En cualquier caso, es un lugar en el que te van poniendo música similar a la que escuchas, y tienes la opción de puntuar si te gusta o no la nueva que te sugiere. De esa forma, vas creando un perfil de cada cadena de radio definida de las varias que puedes tener, y vas descubriendo nuevos grupos, etc.

El otro día me acordé de eso, y me acordé de que tengo bastante música sin clasificar en el disco duro. Así que pensé hacerme algo similar a eso, sólo que un poco más... friki.

Así que empecé a programar. Primero le hice al programa el que fuese capaz de extraer audio digital de cualquier medio, usando para tal fin DirectShow; ya se trate de una entrada de línea o micrófono, sintonizadora, CD, ..., archivo mp3, wav, ogg, wma, ..., avi, mpg, wmv, flv, ... En general, cualquier cosa para la que se tengan codecs. Personalmente, tengo codecs que renderizan hasta archivos mod, s3m, it, ...

Para medir cuánto se parecía una canción a otra, pensé hacer un análisis de frecuencias. Para evitar meternos con números complejos, pasé de transformadas de Fourier clásicas e implementé una DCT (discreta de cosenos, que es siempre real).

Divido la canción por segundos y transformo; en otra dimensión, se ponen esas transformadas, lo que nos da una matriz bidimensional. A continuación se escala para todas las canciones por igual, y además los valores se transforman logarítmicamente y reescalan también para estar en las mismas condiciones de energía.

Aquí tenemos un par de ejemplos:

 

El primero pertenece a la canción "Within Temptation - Angels.mp3". Como bien se puede ver, aparecen unas franjas verticales de energía decreciente por bandas. Esto es debido a la compresión mp3, que enmascara rangos de frecuencias según sea su respuesta al oído. El caso extremo es en la derecha del todo, donde ha suprimido todas las frecuencias altas (que el oído ya no oye).

El segundo proviene de una pista de un CD, extraído directamente: "Mozart - Symphonie N°25 in g-Moll - KV 183 Allegro con brio.wav" (sí, también escucho música clásica). Aquí el decrecimiento de los coeficientes de frecuencias es gradual, y no se anulan las altas. También, como se puede ver, es menos monótono (en el tiempo) y más rico (en las frecuencias).

¿Es correcto escalar en el tiempo para poder comparar más fácilmente? Ya os contaré los resultados. De momento, ahora estoy con la última parte; pensaba hacer una matriz de pesos donde cada valor ponderase la diferencia de esa componente, definiendo el error como la suma de todos éstos. Y ajustar estos valores según lo haga de bien o mal (lo cual es equivalente a una red neural de una sola capa).

¿Alguna idea constructiva?



Post cerrado