-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% 的 CPU 仅在没有放大循环的情况下解包/打包,25% 的循环使用)。您能否告诉我您是否知道 CPU 消耗较少的解决方案?

4

1 回答 1

0

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

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

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

于 2013-11-05T09:13:41.577 回答