Normalizando audio

Música — Sábado 01 de Mayo de 2010, 00:23

El otro día le conté a Leito que quería emparejar el volumen de mis mp3, así cuando los escucho mezclados en el auto no tengo que andar subiendo o bajando el mismo para tener una experiencia auditiva placentera.

Me recomendó usar normalize. En particular, decidí usar la versión normalize-mp3.

Lo analicé un rato, y ví que tiene dos modos, mix y batch:
  • mix: calcula el promedio de volúmenes de todos los temas, y normaliza cada archivo por separado para alcanzar este volumen. Este modo es ideal para cuando armamos un "compilado" a partir de distintas fuentes que están a distintos volúmenes
  • batch: calcula el promedio de volúmenes de todos los temas, computa un sólo ajuste para llevar este promedio a lo deseado, y le aplica este mismo ajuste a todos los temas. Este modo es ideal para usar en las canciones de un mismo álbum, ya que el artista decidió que quizás un tema suene más fuerte que otro, y mantendríamos eso.
Entonces, vamos a contar mejor qué es lo que quiero obtener, así se entiende cómo lo obtuve. Yo tengo, por ejemplo, toda mi colección de música que son tres directorios:
  • SuiGeneris
  • Kusturica
  • IronMaiden (compilado)
Los primeros dos directorios contienen los mp3 de dos CDs que compré y bajé a la compu, manteniendo los volúmenes originales. El tercero es un compilado que armé a partir de otros CDs. Estas canciones son (expresando el volumen en valor ficticio entre 0 y 100 para que sea más fácil hacer la cuenta):
  • SuiGeneris/Tranquila.mp3     40
  • SuiGeneris/Rocanrol.mp3      60
  • Kusturica/Balada.mp3   70
  • Kusturica/Power.mp3    80
  • IronMaiden/BaladaPower.mp3    70
  • IronMaiden/TePartoElCoco.mp3  40
Como yo voy a escuchar estos álbumes mezclados, quiero que en general el volumen de los temas de IronMaiden, SuiGeneris y Kusturica sean similares, pero manteniendo las diferencias internas que se haya decidido en cada caso.

Entonces, elegí una amplitud para todos (-6dB, por ejemplo, Leito me dijo que era un standard, aunque se puede usar -3db y que quede todo en general más alto), y llevar el promedio de cada álbum a esa amplitud:

normalize-mp3 --mp3 --verbose --amplitude 6dB --batch SuiGeneris/*
normalize-mp3 --mp3 --verbose --amplitude 6dB --batch Kusturica/*
normalize-mp3 --mp3 --verbose --amplitude 6dB IronMaiden/*


Corriendo al normalize-mp3 en cada directorio, considerando para el ejemplo que le estoy indicando "50" como volumen objetivo, el tipo hace lo siguiente:

 >>> (40+60) / 2
50


(como lo llevaría a 50 justo lo de SuiGeneris me lo deja sin tocar)

 >>> (70+90)/2
75


(para llevarlo a 50, tiene que bajar -25 lo de Kusturica)

El caso de IronMaiden es más sencillo: como es un compilado y no es el caso de que el artista puso diferentes volúmenes para lograr efectos, se lleva todo al volumen indicado (fíjense que no tiene el --batch en el comando). ¿Por qué no uso --mix acá? Porque yo le estoy indicando qué volumen quiero, no que saque el promedio él.

Finalmente, me dejaría:
  • SuiGeneris/Tranquila.mp3     40
  • SuiGeneris/Rocanrol.mp3      60
  • Kusturica/Balada.mp3   45
  • Kusturica/Power.mp3    55
  • IronMaiden/BaladaPower.mp3    50
  • IronMaiden/TePartoElCoco.mp3  50
O sea, manteniendo las relaciones dentro de cada álbum, pero emparejando los promedios de los álbumes, y llevando lo compilado exactamente a eso.

Analizando los resultados, luego, vi que en algunos temas (no revisé todos), pasó a recortarme sonido. O sea, lo amplificó de manera que algunos picos se van de rango, y eso distorsiona. ¿Se nota el efecto? Sí, abrí archivos con audacity y lo comprobé visualmente, porque la canción me sonaba mal al escucharla.

Estuve viendo, y antes esta gente tenía un bug, que se suponía que estaba resuelto (parece que no del todo); teoricamente no debería recortar nunca. Por otro lado, encontré un parámetro "limiter": poniéndolo en 1 no limita nada (recorta cuando debe), y en 0 limita en todas las muestras. Más allá de que esto implicaría que con el valor default (cualquiera intermedio) recortaría en algunos casos (que es lo que me pasa a mí), si lo pongo en 0 nunca hace nada (me dice que la muestra original ya estaba normalizada).

Concluí que no me sirve este programa.

Borré todo, levanté el backup que había hecho, y pasé a probar con mp3gain.

mp3gain, a diferencia de normalize, no rearma el mp3 con el nuevo volumen, sino que luego de analizar la canción y decidir el ajuste necesario, modifica un campo en la metadata del archivo. Este campo es utilizado por los reproductores de mp3 para ajustar el volumen, entonces el efecto es similar. Tiene la ventaja (contra normalize) que no hay ninguna pérdida de calidad porque no transforma el mp3 en wav y luego a mp3 de nuevo, pero tiene la desventaja que el control es más burdo, porque este campo sólo tiene 256 valores distintos.

Por otro lado, mp3gain tiene una gran desventaja: no permite que uno le indique a qué volumen uno quiere llevar la música: el programa analiza lo que tiene que analizar, y lo equilibra a todo lo mismo, pero a un valor que él determinó como óptimo. Por lo que probé, baja el volumen aunque no sea necesario (queda rango dinámico para explotar), así que decidí no correrlo sobre toda mi música: solamente lo pasé en los compilados que había armado con canciones de distintas fuentes, para que me queden todos los temas de volumen parecido.

La forma de usarlo es sencilla:

mp3gain -r IronMaiden/*

Con -r le estamos diciendo que aplique la ganancia "Track" automáticamente (todos los archivos al mismo volumen). Pero esto seguro que no puede estar del todo bien, porque no hace un análisis de todo y luego da los resultados normalizando a lo que más conviene en función del total; lo más probable es que sea por eso que lo baja demasiado de volumen, para trabajar sobre seguro en cada uno.

Claramente, acá hay que experimentar con distintos valores, para ver cual nos conviene más. Y pensando en esto encontré easymp3gain, que es una interfaz gráfica sobre mp3gain, y nos permite analizar las canciones e intentar distintas ganancias viendo si clipea o no.

Entonces, al final, retoqué mis compilados con esto para emparejarlos en volumen, y no hice nada sobre los discos originales que tenía. No es la mejor solución, pero sí lo mejor que pude hacer según el estado actual de los programas.
Ubuntu

comentarios

  1. Hola amigo, necesito tu ayuda, como recien comienzo con el lenguaje de Python, se me complica un poco, y necesito saber como hacer un programa que muestre la cantidad de numeros que aparecen en una cadena, es decir los numeros solamente de una cadena, por ejemplo en una cadena "ayer te vi 2 veces y 4 veces salude" tiene 2 numeros:
    el 2 y el 4, y necesito que python me diga cuantos numeros tiene.

    Trate de hacerlo de la siguiente forma pero no me da, pues cometo un error en la linea 8 que no puedo solucionar, pues no se por donde encarar ese problema.

    Código:

    cadena= 'un 1, un 201 y 2 unos'
    x=range(0,9)

    while cadena!= '':
    numeros = 0
    anterior = ''
    for caracter in cadena:
    if caracter == x:
    numeros += 1
    anterior = caracter

    print 'Números: ', numeros

    cualquier cosa enviame un email a [email protected]

    Escrito por Maxi — 04 May 2010, 16:13

  2. qué hay de "201"? lo cuentas como número? o cada dígito es un número aparte?
    porque por tu algoritmia parece que comparas sólo dígitos.

    una forma es utilizar expresiones regulares:

    >>> import re
    >>> print(re.findall('\d+\.?\d*', 'un 1, un 201 y 2 unos 3.4 17.0473'))
    > 'un 1, un 201 y 2 unos 3.4 17.0473'.split()

    Escrito por reynaldo — 05 May 2010, 01:23


Añadir comentario

authimage






Powered by LifeType