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


PHP: Applying multiplication factor to a broad number of values

我正在编写音频放大器,以便在音轨上应用信封。音频来自包含原始 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 的解决方案?

您可以

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

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

但是,如果性能在您的应用程序中至关重要,请真正尝试使用更合适的语言。