我有一个波形播放器,但使用闪光灯生成一个甚至不准确的PNG波形,所以我决定使用PHP并在我的CentOS 6.4上安装LAME Encoder。我在github'afreiday/php-waveform-png'上找到了这个脚本,它可以工作,根据你上传的文件,你得到了录音带的波形。唯一的问题是它“达到顶峰”。一个例子:
正如你在示例中所看到的(带有唱歌部分和低音提琴硬拍部分的EDM音轨),它只是不是很有用,你不能滚动到休息,因为你看不到它的位置。除非你仔细观察中间的红色区域。所以我知道它就在那里并且脚本有效,但正如我之前所说的那样,它只是“达到顶峰”而且是随机的。
我想要的是如下图所示,您可以清楚地看到轨道中的不同部分(取自zippyshare与相同的音频文件:
它绘制线条的代码部分是这样的:
$v = (int) ($data / 255 * $height);
if (!($v / $height == 0.5 && !$draw_flat))
// draw the line on the image using the $v value and centering it vertically on the canvas
imageline(
$img,
// x1
(int) ($data_point / DETAIL),
// y1: height of the image minus $v as a percentage of the height for the wave amplitude
$height * $wav - $v,
// x2
(int) ($data_point / DETAIL),
// y2: same as y1, but from the bottom of the image
$height * $wav - ($height - $v),
imagecolorallocate($img, $r, $g, $b)
);
其中$ v是音量。 现在我尝试添加一些东西来摆脱峰值但是效果不好:
if(isset($previous)) {
$diff = abs($v-$previous);
$perc = $diff / $v * 100;
if($perc>40) {
$v = $previous;
}
}
当然没有做到这一点,但我认为我有一些东西可以在那里工作,但事实并非如此。有人知道如何解决这个问题或有类似的经历吗?
如果该脚本的替代方案更好,请告诉我。无法理解这一点。