terça-feira, 27 de novembro de 2007

Normalizando Arquivos de Audio (Mp3 Ogg Vorbis, e outros)

Poxa, três dias sem postar !! Tou sem criatividade pra escrever ultimamente, sabia ?? Mas, vamos lá !!

Uma coisa eu tenho que confessar. Eu tenho uma queda considerável por baixar álbuns completos em mp3 da internet (e meus amigos adoram isso). No entanto, grande parte da minha coleção de mp3 foi baixada em épocas que você não tinha um sistema de torrent ou o DC++ para baixar todos os mp3 de uma mesma fonte. Daí, muitos destes arquivos são de tipos diferentes, bitrates diferentes e, o que mais me irrita quando estou ouvindo randomicamente minha lista de músicas, nível de volume bastante diferentes. Mesmo entre álbuns diferentes isso acontece muito, com álbuns com volume muito baixo e outros com o volume lá em cima, mesmo que entre as músicas de um álbum estejam em um volume igual.

E como eu tenho o bom e velho costume de dormir ouvindo música (claro, qdo há a possibilidade, né), as vezes um música muito alta aparece e quase me derruba da cama. Foi numa dessas, no final de semana que resolvi procurar (finalmente) uma forma fácil de fazer a normalização da minha coleção inteira, de forma a ficarem todas num volume, digamos, agradável, para ouvir direto e por várias horas, como faço muito.


É aí que entra os programas vorbisgain, mp3gain e normalize-audio. Os três fazem a mesma coisa, mas para arquivos específicos.
vorbisgain -- para arquivos ogg-vorbis
mp3gain -- para arquivos mp3
normalize-audio -- para normalizar arquivos WAV antes de converter

Como os três tem a mesma sintaxe, vou me resumir ao funcionamento do mp3gain, que acredito, deva ser o mais procurado.

Normalizando o ganho (nível de volume) de arquivos Mp3

Fazendo algumas pesquisas pela internet, eu levantei três aspectos fundamentais que eu queria que minha biblioteca tivesse:
1 - Meus arquivos não devem ser alterados sem a possibilidade de voltar para o estado original. Odiaria alterar um arquivo e não poder ter a possibilidade de reverter as mudanças caso não desse certo;
2 - Eu não quero minhas músicas tão altas quanto a música mais alta. Quero que as músicas tenham um bom nível sonoro, sem exageros;
3 - O algoritmo usado seja independente da aplicação usada para reproduzir. Já não basta o mp3pro com aquelas frescuras de geração de parte do audio.

É aí que surgem as escolhas. Duas aplicações apareceram sob os termos da busca. O primeiro é o Normalize e o segundo o Mp3gain. Agora, como escolher qual dos dois é melhor sem aprender sobre processamento de sinais digitais? Simples, só acompanhe.

Para minha sorte, em alguns fóruns e listas de discussão sobre o assunto, eu encontrei um material sobre o que chamam de técnica de "replay gain outline". Em resumo, a alteração do volume do arquivo de audio é feito levando-se em consideração o modo como o ouvido humano reage a altura dos sons em diferentes faixas de frequência, e demonstra quanto de ganho negativo e positivo deve ser aplicado no arquivo de audio para "consertá-lo".
mp3gain works by figuring out how loud the music actually sounds to the human ear, and then figuring out how much positive or negative gain to apply to the mp3 file to “fix” it. I was happy to note that it does not use the peak volume in a file as a benchmark for normalization. It applies changes by modifying the mp3 file in some fashion, but I read that the change is reversible since mp3gain writes some tags (not ID3 tags) to the mp3s for possible later undoing. This fact also means that one you use mp3gain on a file, if you try doing it again, it takes a lot less time - almost no time. So in the future if I add files to the collection, and I don’t remember what files I added, I can run mp3gain on the entire collection, and it will complete much faster than the first time.

Bom, depois de ler esse material (relacionado nos links ao final da página), eu resolvi então usar o mp3gain, que é uma implementação desse método citado.

Para normalizar os seus arquivos, o comando a seguir pode ser usado para uma quantidade pequena de arquivos, como por exemplo, uma única discografia ou mesmo um único álbum:
$find . -type f -iname '*.mp3' -print0 | xargs -0 mp3gain -r -k

Essa linha busca todos os arquivos .mp3 dentro da pasta e subpastas ($find . -type f -iname '*.mp3'), e cria uma lista da mesma (-print0). A lista é então usada como entrada para a aplicação xargs, que é responsável por chamar o aplicativo mp3gain para fazer a normalização de cada arquivo individualmente (xargs -0 mp3gain -r -k).

Para listas de arquivos muito grandes, essa técnica pode originar um erro, sendo necessária outra abordagem:
find . -iname '*.mp3' -execdir mp3gain -r -k "{}" \; &

Caso você queira fazer a normalização de todos os álbuns (espalhados em diversas pastas), vc pode usar o seguinte comando:
find . -iname '*.mp3' -execdir mp3gain -r -k -a "{}" + &

O que o comando faz:

1 - find . -iname '*.mp3' busca todos os mp3 no diretório corrente e em todos os subdiretórios;

2 - -execdir mp3gain -r -k "{}" \; & executa o comando "mp3gain -r -k" em cada arquivo (onde o nome do arquivo é inserido onde o símbolo {} está colocado). O ponto-e-virgula indica que o comando será executado para cada arquivo, mas como ele é um símbolo importante para o bash, vc precisa escapá-lo com a barra inversa (\). O & no final indica que a tarefa deve ser feita em background.

Bom pessoal, por hoje é só ... Espero que vcs tenham boas experiências com seus mp3 todos organizadinhos e com o volume acertado !!

Referências:
http://jwz.livejournal.com/370342.html
http://replaygain.hydrogenaudio.org//technical_outline.html
http://www.delodder.be/howto/mp3gain-normalize-mp3-volume/
http://www.jwz.org/hacks/