miércoles, 5 de enero de 2011

Replay Gain

A raíz de una reciente adquisición (Sansa Clip +) he recuperado mi pequeña colección musical y también he recuperado los malestares que me ofrecía:

¿A quien no le ha pasado que al escuchar dos canciones en .mp3 una tras otra resulta que la segunda o no se escucha o se escucha demasiado alta?

La respuesta ha sido más fácil de lo que me esperaba dado que el reproductor soporta "Replay Gain" que a groso modo viene a ser algo como:
  1. Se establece un nivel de volumen estándar (89dB).
  2. Se analiza la canción y se determina a qué volumen suena (por ejemplo: 93dB).
  3. Se calcula la diferencia entre el estandar y el volumen analizado en una etiqueta de la canción, como si del título o autor se tratara (por ejemplo: 89-93=-4dB).
Y poco más. Con esto el sonido queda intacto, nada de volver a comprimir o cambiar de formato y está listo en poco tiempo.

Cuando el reproductor llega a la canción lee la información del volumen de la canción y lo aplica al volumen de salida. También hay reproductores en el ordenador que soportan esta función, que se debe activar en modo "Canción" o modo "Album" dependiendo de como queremos que ajuste el volumen.

Existen unas cuantas aplicaciones (Foobar2000, ...) para realizar lo que comento. En el caso de los mp3 también permiten aplicar ciertos cambios al archivo que lo hacen sonar al volumen deseado incluso cuando el reproductor no soporta Replay Gain, pero esto ya no es tan inocuo.

En mi caso, como uso linux, después de probar un par de aplicaciones finalmente me preparé un pequeño script, que seguro que es mejorable, para analizar todas las canciones del tirón (volumen del album incluido) que me ha ido de perlas. En este caso es para archivos en .mp3 donde cada carpeta contiene un álbum, aunque fácilmente se puede adaptar a archivos tipo .ogg.

#!/bin/bash
maxjobs=$(cat /proc/cpuinfo | grep processor | wc -l)
analyze() {
 for arg; do 
  cd "$@"
  mp3gain -k -f -s i *.mp3
 done
}
export -f analyze
find ./ -type d -print0| xargs -0 -n 1 -P $maxjobs bash -c 'analyze "$@"' --


Fuentes:

No hay comentarios:

Publicar un comentario