私は、wavファイルの音波を描画するためにphpでスクリプトを開発しました。うまく機能しますが、画像を描画するのに約20分から2〜3分かかります。サンプルのグループのピーク値を使用して、特定のピクセルの波を表します。また、負の値と正の値の両方を取得するために、長い値、つまり同時に4バイトを取得します。また、1つの改善点は、同じ反復で4つの長い値を取ることです。
wavはa-lawステレオ16ビットですが、デコードアルゴリズムを使用してpcm値を取得するため、16ビットは8ビットになります。
8000Hz、サンプルあたり8ビット、64 Kbps、ステレオ、A-law
1500ピクセル幅の画像を生成する必要があります。
スクリプトのパフォーマンスを向上させる方法は、アルゴリズムやWebページにも役立ちます。
Audacityは約2〜3秒で同じサウンドの画像を生成します:)
ありがとう。必要に応じてコードを投稿します。
これがサウンドデータのブロックを読み取るためのforサイクルです
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になるので、上記のサイクルは約500万回繰り返されます。改善のためのアイデアはありますか?同時に8つのLong値を読み取ろうとしましたが、予想とは異なる画像が表示されます。理由はわかりません。