PHP:将乘法因子应用于大量值

时间:2013-11-05 09:05:44

标签: php performance audio pack

我正在编码音频放大器,以便在音轨上应用信封。音频来自包含原始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%的CPU仅在没有放大循环的情况下解包/打包,25%的循环)。如果您知道CPU消耗较少的解决方案,请告诉我?

1 个答案:

答案 0 :(得分:0)

您可以尝试将array_map与匿名函数一起使用。可能这会给你带来很小的性能提升。

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

但如果性能在您的应用程序中是必不可少的,那么请尝试使用更合适的语言。