Pergunta

Eu preciso saber o volume médio de um arquivo mp3 para que quando eu convertê-lo para mp3 (a uma taxa de bits diferente) eu posso dimensionar o volume também, para normalizá-lo ...

Por isso eu preciso de uma biblioteca de ferramentas de linha de comando / ruby ??que me dá o volume médio em dB.

Foi útil?

Solução

Você pode usar Sox (uma ferramenta de áudio de linha de comando open source http://sox.sourceforge.net /sox.html ) para normalizar e transcodificar seus arquivos ao mesmo tempo.

Editar

Parece que ele não tem opções para bit-rate. De qualquer forma, sox é provavelmente um exagero se LAME faz normalização.

Outras dicas

Você pode usar LAME para codificar para mp3. Tem opções para a normalização, escala e bitrate. LAME também compila a praticamente qualquer plataforma.

http://mp3gain.sourceforge.net/ é uma solução bem pensada para isso.

Eu escrevi um script wrapper pouco, com base na entrada acima:

#!/bin/sh

# Get the current volume (will reset to this later).
current=`amixer -c 0 get Master 2>&1 |\
    awk '/%/ {
              p=substr($4,2,length($4)-2);
              if( substr(p,length(p)) == "%" )
                 {
                 p = substr(p,1,length(p)-1)
                 }
             print p
             }'`

# Figure out how loud the track is.  The normal amplitude for a track is 0.1. 
#   Ludicrously low values are 0.05, high is 0.37 (!!?)
rm -f /tmp/$$.out
/usr/bin/mplayer -vo null -ao pcm:file=/tmp/$$.out $1 >/dev/null 2>&1
if [ $? = 0 ] ; then
    amplitude=`/usr/bin/sox /tmp/$$.out -n stat 2>&1 | awk '/RMS.+amplitude/ {print $NF}'`
fi
rm -f /tmp/$$.out

# Set an appropriate volume for the track.
to=`echo $current $amplitude | awk '{printf( "%.0f%%", $1 * 0.1/$2 );}'`
echo $current $amplitude | awk '{print "Amplitude:", $2, "  Setting volume to:", 10/$2 "%,  mixer volume:", $1 * 0.1/$2}'
amixer -c 0 set Master $to  >/dev/null 2>&1

mplayer -quiet -cache 2500 $1

# Reset the volume for next time.
amixer -c 0 set Master "$current%"  >/dev/null 2>&1

É preciso um segundo extra para iniciar a reprodução do arquivo, e se baseia em alsamixer para ajustar o volume, mas ele faz um trabalho muito bom de mantê-lo de ter que ajustar constantemente o volume principal. E isso realmente não importa o que o formato de entrada é, desde que se mplayer pode jogá-lo em tudo, ele pode extrair o áudio, por isso deve funcionar bem com MP3, Ogg, AVI, qualquer que seja.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top