私は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つのロング値を読み込もうとしましたが、それは予想以上に他のイメージを与えます。理由はわかりません。
コードは –
が問題を解決するのに役立つ可能性があります。ファイルが20 MBのように大きいときには、何らかのバイトを読み込むことはできません。なぜなら、とにかく私はaproximationが必要だからです。私はサウンドデータから10番目の長い番号を取ります。小さなファイルの場合、私はすべての秒の長い番号を取る。このように私はこれを解決しました。 – Vlad
良い溶液;)。 –