尝试用PHP和afreiday / php-waveform-png绘制波形

时间:2014-09-16 23:20:42

标签: php generator waveform

我有一个波形播放器,但使用闪光灯生成一个甚至不准确的PNG波形,所以我决定使用PHP并在我的CentOS 6.4上安装LAME Encoder。我在github'afreiday/php-waveform-png'上找到了这个脚本,它可以工作,根据你上传的文件,你得到了录音带的波形。唯一的问题是它“达到顶峰”。一个例子: example script from github

正如你在示例中所看到的(带有唱歌部分和低音提琴硬拍部分的EDM音轨),它只是不是很有用,你不能滚动到休息,因为你看不到它的位置。除非你仔细观察中间的红色区域。所以我知道它就在那里并且脚本有效,但正如我之前所说的那样,它只是“达到顶峰”而且是随机的。

我想要的是如下图所示,您可以清楚地看到轨道中的不同部分(取自zippyshare与相同的音频文件: what i want

它绘制线条的代码部分是这样的:

$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;
    }
}

当然没有做到这一点,但我认为我有一些东西可以在那里工作,但事实并非如此。有人知道如何解决这个问题或有类似的经历吗?

如果该脚本的替代方案更好,请告诉我。无法理解这一点。

0 个答案:

没有答案