Archive for the ‘audiosum’ Category.

Qué falló durante mi plática en el SFD2008

A todas las personas que estuvieron presentes en la plática “Invitación al Desarrollo del Software Libre”:

Quiero expresar mi agradecimiento por su presencia en mi plática; en general, en el evento SFD 2008 en Tijuana.

Recordarán que al terminar la presentación realicé en vivo un cambio al código de audiosum; específicamente, al componente audiodup. Con este cambio busqué mostrarles de manera práctica un ejemplo de cómo se desarrolla en el mundo del software libre mediante Git.

También recordarán que el experimento no funcionó del todo:

  1. descargamos el código desde repo.or.cz con git clone http://repo.or.cz/audiosum.git,
  2. compilamos audiosum y lo vimos funcionando con ./autogen.sh && ./configure && make,
  3. realizamos un cambio en audiodup,
  4. mostramos el parche resultante con git diff,
  5. revisamos el estado del repositorio local con git status,
  6. aplicamos el cambio en el repositorio local con git commit -a,
  7. observamos las diferencias entre el repositorio local y el repositorio público con git log origin..master,
  8. pero no pudimos publicar el cambio con git push.

El motivo fue muy sencillo: no tenía autorizada la laptop para enviar cambios al repositorio. En repo.or.cz se deben dar de alta las claves públicas de cada persona@computadora autorizada para enviar cambios. Tengo diferentes claves públicas en cada máquina, y sólo tenía dada de alta la PC del trabajo y la PC de la casa. Mi cuenta de la laptop no estaba autorizada para enviar cambios.

Finalmente el cambio fue aplicado con git push y pueden observar en el historial de cambios de audiosum el cambio “Added support for file pattern matching“. En el segundo enlace pueden ver que la fecha es del 13 de septiembre a las 17:56, hora local, es decir, que el commit fue realizado durante la conferencia.

Saludos.

audiosum 0.2

Ok, audiosum ha sido un excelente conejillo de indias para aprender Git, GNU Autoconf y GNU Automake. Los dos últimos me parecen demasiado confusos todavía, pero ahí la llevo.

Y se han hecho varios cambios, principalmente:

  • Se corrigió un horrible bug donde los archivos que se abrían no se cerraban, tipo memory leak, pero de descriptores.
  • Se añadió una opción, -b, para indicar que sólo se desea la firma de una parte del archivo (dado en porcentaje). Si se usa -b sin un valor, imprime sólo el tamaño del audio del archivo.
  • Se añadió una opción, -a, para indicar qué algoritmo de hash usar, como md5, sha1, etc.
  • Mejores mensajes de ayuda.
  • Se incluye audiodup, un script para encontrar duplicados más cómodamente.

El script audiodup trabaja de manera eficiente:

  1. Genera una lista de archivos a analizar, según las rutas indicadas.
  2. (Primera etapa) Descarta los archivos no duplicados según su tamaño.
  3. (Segunda etapa) Descarta los archivos no duplicados según el primer 2% del contenido.
  4. (Tercera etapa) Descarta los archivos no duplicados según el contenido completo.
  5. Los archivos restantes son duplicados. Se agrupan y se presentan.

Ejemplo de uso de audiodup, para buscar mp3 duplicados en $HOME y /mnt/music:

audiodup $HOME /mnt/music

Ejemplo de uso de audiodup, usando sha1 y que revise el 5% en la segunda etapa:

audiodup -a sha1 -b 5 $HOME /mnt/music

Descarga en .tar.gz: audiosum-0.2.tar.gz

audiosum 0.1

Me complace anunciar formalmente la liberación de audiosum 0.1.

Audiosum es una herramienta que permite calcular la firma MD5 para un archivo MP3, pero ignorando la metainformación (etiquetas ID3v1, ID3v2, Lyrics3v1 y Lyrics3v2). En este momento no existe soporte para OGG.

Audiosum surge de la idea de buscar duplicados de audio cuando los archivos difieren únicamente en sus etiquetas. Por ejemplo, en el siguiente ejemplo, existen cuatro archivos cuya firma MD5 es diferente, por lo que son diferentes. Sin embargo, su parte de audio es idéntica. Cuando audiosum muestra la firma MD5 del audio, uniq los detecta por lo que tranquilamente podemos borrar una de las copias de estos archivos.

alvarezp@alvarezp-laptop:~$ md5sum (algunos archivos)
d662def56360c1ba71975fe0858651df  other/music/ALEX UBAGO - QUE PIDES TU.mp3
4e91970580b0355b3aa7e711416d50ba  other/music/Alex Ubago.- Vuelve.mp3
07894b351ae9df4a3c8ca487169e1524  DCIM/iPod_Control/Music/F00/ASFP.mp3
82db5ed3ffe951aba19cdd2d38cbea01  other/music/no doubt - bath water.mp3

alvarezp@alvarezp-laptop:~$ find -iname "*.mp3" | audiosum | sort | uniq -D -w 41
003c6b41 36d2a24f44413f4a4ab3282e7cea1649 [I3v1] [I3v2] [----] [----] ./other/music/ALEX UBAGO - QUE PIDES TU.mp3
003c6b41 36d2a24f44413f4a4ab3282e7cea1649 [I3v1] [----] [----] [----] ./other/music/Alex Ubago.- Vuelve.mp3
0058f7a4 17df577141ae1db6384309e2e3cbe2c6 [I3v1] [I3v2] [----] [----] ./DCIM/iPod_Control/Music/F00/ASFP.mp3
0058f7a4 17df577141ae1db6384309e2e3cbe2c6 [I3v1] [----] [----] [----] ./other/music/no doubt - bath water.mp3

El primer valor que se imprime es el tamaño del audio procesado. El segundo valor es la firma MD5.

Obsérvese cómo a audiosum no se le proveen los archivos por la línea de comando sino por la entrada estándar. Se puede incluir tee audiosum.out antes de sort para que las firmas se almacenen en un archivo de texto antes de ser ordenadas. El comando uniq -D -w 41 es el que se encarga de dejar únicamente los duplicados, considerando los primeros 41 caracteres.

Descarga en .tar.gz: audiosum-0.1.tar.gz

Para compilar:

#Instalar la librería mhash.
apt-get install libmhash-dev #para Ubuntu

#Descargar el archivo audiosum-0.1.tar.gz.
wget http://alvarezp.ods.org/blog/files/audiosum-0.1.tar.gz

#Descomprimir el paquete.
tar xvzf audiosum-0.1.tar.gz
cd audiosum-0.1

#Configurar y crear
./configure && make

#Instalar
sudo make install

Ejemplos de uso de audiosum:

find -iname "*.mp3" | audiosum
find -iname "*.mp3" | audiosum > audiosum.out
find -iname "*.mp3" | audiosum | tee audiosum.out
find -iname "*.mp3" | audiosum | sort | uniq -D -w 41

Saludos.