2009-06-16 8 views
0

Мне нужно знать средний объем mp3-файла, так что, когда я конвертировать его в mp3 (на другой битрейт) Я могу масштабировать объем тоже, чтобы нормализовать его ...высчитывает средний объем mp3

Поэтому Мне нужен инструмент командной строки/рубиновая библиотека, которая дает мне средний объем в дБ.

+1

Вам не нужен средний объем, но максимальная амплитуда для нормализации звукового файла. –

ответ

3

Вы можете использовать sox (инструмент командной строки с открытым исходным кодом http://sox.sourceforge.net/sox.html) для нормализации и перекодировки файлов одновременно.

EDIT

Похоже, он не имеет возможности для битрейта. Во всяком случае, sox, вероятно, будет излишним, если LAME нормализуется.

1

Вы можете использовать LAME для кодировки в mp3. Он имеет опции для нормализации, масштабирования и битрейта. LAME также компилируется практически на любую платформу.

+2

lame делает масштабирование, но нормализуется ли он? Я имею в виду, может ли он оценивать средний объем на дорожку? Если да, то как? Я прочитал этого человека и не смог его решить ... – luca

1

Я написал небольшой скрипт обертки, на основе выше ввод:

#!/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 

Он принимает дополнительную секунду, чтобы начать воспроизведение файла, и полагается на alsamixer для регулировки громкости, но это действительно Хорошая работа, чтобы не дать вам постоянно настраивать мастер-громкость. И на самом деле неважно, что такое формат ввода, поскольку, если mplayer может вообще его воспроизвести, он может извлечь аудио, поэтому он должен отлично работать с MP3, Ogg, AVI, что угодно.