-1

オーディオ トラックにエンベロープを適用するために、オーディオ アンプをコーディングしています。オーディオは、生の 44100 KHz 16 ビット ステレオ サンプルを含むファイルから取得されます。以下のようなコードを書きました。例を単純化するために、増幅率は一定ですが、実際のプロジェクトでは変化しています。

<?php

$arrRawSamples = unpack('s*', fread($resAudio, 4096));
$fltAmpFactor = 0.8;

foreach (array_keys($arrSamples) as $intKey) {
    $arrRawSamples[$intKey] = $arrRawSamples[$intKey] * $fltAmpFactor;
}

$strAmpSamples = call_user_func_array('pack', array_merge(array('s*'), $arrRawSamples));

php>

これはうまく機能し、乗算係数が適用された後にオーディオを再生できますが、ループは大量の CPU を消費します (増幅ループを使用しないアンパック/パックのみで約 2%、ループを使用すると 25% の CPU)。CPUの消費量が少ないソリューションを知っているかどうか教えてください。

4

1 に答える 1

0

匿名関数で array_map を使用してみることができます。これにより、パフォーマンスがわずかに向上する可能性があります。

array_map(function($a) { return $a * fltAmpFactor; }, $arrRawSamples);

ただし、アプリケーションでパフォーマンスが重要な場合は、より適切な言語を使用するようにしてください。

于 2013-11-05T09:13:41.577 に答える