2012-01-06 18 views
0

私は現在、アーティスト名、ファイルサイズ、期間などのmp3タグデータを読み込むためにgetID3()を使用しています。Linuxコマンドライン/ PHP bpm検出

しかし、私は自分のデータベースに保存するために、各曲のbpmのテンポを自動的に検出したいと思います。

したがって、私はcentOSサーバーまたはmp3またはwavファイルをとり、それを分析してbpmとしてテンポを戻すPHPベースのスクリプトから実行できるコマンドラインユーティリティを探しています。

私はsoundstretchを見つけましたが、明らかにそれを行うことはできますが、何らかの理由でインストールできないようです。

誰にもアイデアはありますか?

EDIT:私は最終的にsoundtouch/soundstretchのインストールに成功しました。

戻り値のbpm値をデータベースに追加できるように、PHPアップロードスクリプトの中から動的に呼び出したいと思います。

私は、変数$ BPMは今、BPMが含まれているだろうと仮定して...ない成功を収めて、次へ

$bpm = exec("soundstretch $filename -bpm"); 

を試してみました。私は、サウンドタッチの仕組みを誤解しているに違いない。残念ながら、ドキュメントは最小限です。

返されたbpmを収集し、それをデータベースに保存するために変数として保存するにはどうすればよいでしょうか。

+1

「何らかの理由で」、代わりにそのエラーを送信してください。 –

+0

読んだところでは、サウンドタッチ/サウンドストレッチのbpm検出は最高でもフレークであるようです。私は誰か他の提案があることを望んでいた。 – gordyr

+1

すべてのbpm検出はフレークであり、できることは1つ少ないことを見つけることです。 –

答えて

2

古いスレッドですが、多分それが誰かを助けます。

まずmp3をwavに変換します。私はそれが最高のそれと動作することに気づいた。 soundstretchは結果をshell_execのresutlに返さないと思われますので、私は追加のファイルを使用しています。あなたが私よりもLinuxを良く知っているなら、いくつかの改良ができます;-)。トラックのbpmが1つ後に必要な場合は、それが機能します。

// create new files, because we don't want to override the old files 
$wavFile = $filename . ".wav"; 
$bpmFile = $filename . ".bpm"; 

//convert to wav file with ffmpeg 
$exec = "ffmpeg -loglevel quiet -i \"" . $filename . "\" -ar 32000 -ac 1 \"" . $wavFile . "\""; 
$output = shell_exec($exec); 

// now execute soundstretch with the newly generated wav file, write the result into a file 
$exec = "soundstretch \"" . $wavFile . "\" -bpm 2> " . $bpmFile; 
shell_exec($exec); 

// read and parse the file 
$output = file_get_contents($bpmFile); 
preg_match_all("!(?:^|(?<=\s))[0-9]*\.?[0-9](?=\s|$)!is", $output, $match); 

// don't forget to delete the new generated files 
unlink($wavFile); 
unlink($bpmFile); 

// here we have the bpm 
echo $match[0][2]; 
0

、それは非常に単純なPHPのラッパーで、素晴らしい作品、desevenによってphp-bpm-detectをチェックしてください。あなただけのffmpegとsoundstrechの依存性をインストールする必要があります。

基本的な使い方:

$bpm_detect = new bpm_detect("file.mp3"); 
echo $bpm_detect->detectBPM(); 
ここ
0

をbashのコマンドラインはSoundStretchとテキストとしてBPMを取得することです。

soundstretch audio.wav -bpm 2>&1 | grep "Detected BPM" | awk '{print $4}' 

SoundStretchは、コマンドライン出力としてstderr代わりにstdoutを使用しています。 ソースコード(SoundStretch/main.cpp)で詳細を確認できます。

関連する問題