2012-01-19 6 views
3

私はwavファイルの音波を描くためにphpでスクリプトを開発しました。 Althougは、画像を描くのに20分ほどかかり、2〜3分かかります。私はサンプルのグループのピーク値を使って、あるピクセルの波を表しています。また、私は長い値、すなわち4バイトを同時に取得して、負の値と正の値の両方を左、右に取得します。また、1つの改善点は、同じ繰り返しで4つの長い値を取ることです。phpで音を描く

wavはa-lawステレオ16ビットですが、私はpcm値を得るために復号化アルゴリズムを使用しているので、16ビットは8ビットになります。

8000Hz、サンプル当たり8ビット、64 Kbpsの、 ステレオ、則

Iが1500個のピクセルにワイド画像を生成する必要があります。

また、スクリプトのパフォーマンスを向上させる方法については、いくつかのalghoritmまたはwebページに役立つでしょう。

Audacityは約2~3秒:)

おかげで同じ音の画像を生成します。私は必要に応じていくつかのコードを投稿します。ここ

for ($i = 0; $i < $this->blocktotal/4; $i+=4) 
    { 
     // unpack 32 bit numbers from the sound data in groups of 4 
     $blocks[] = @unpack('L', substr($this->data, $i * 4, 4)); 
     $blocks[] = @unpack('L', substr($this->data, ($i + 1) * 4, 4)); 
     $blocks[] = @unpack('L', substr($this->data, ($i + 2) * 4, 4)); 
     $blocks[] = @unpack('L', substr($this->data, ($i + 3) * 4, 4)); 
    } 

32ビット= 4 * 8ビット音声データのブロックを読み出すためのサイクルのためであり、各ビットは、左、右、右チャンネルを残しています。したがって、上記のサイクルの1行につき、左の2つの値と右のチャネルの2つの値を取る。しかし、20MBのファイルに対して$ this-> blocktotal = 20147456を得るので、上記のサイクルは約5百万回繰り返されます。改善のための任意のアイデア?私は同時に8つのロング値を読み込もうとしましたが、それは予想以上に他のイメージを与えます。理由はわかりません。

+0

コードは –

+1

が問題を解決するのに役立つ可能性があります。ファイルが20 MBのように大きいときには、何らかのバイトを読み込むことはできません。なぜなら、とにかく私はaproximationが必要だからです。私はサウンドデータから10番目の長い番号を取ります。小さなファイルの場合、私はすべての秒の長い番号を取る。このように私はこれを解決しました。 – Vlad

+0

良い溶液;)。 –

答えて

0

が問題を解決しました。ファイルが20 MBのように大きいときには、何らかのバイトを読み込むことはできません。なぜなら、とにかく私はaproximationが必要だからです。私はサウンドデータから10番目の長い番号を取ります。小さなファイルの場合、私はすべての秒の長い番号を取る。このように私はこれを解決しました。