Создавать формы волны барного типа с помощью ffmpeg

Я пытаюсь создать волновые формы из mp3, используя ffmpeg. я успешно создал формы волны, как показано ниже

Теперь у меня проблемы с генерацией, как показано ниже пример изображения...

код, который я использую для генерации вертикальной линии, представлен ниже...

while (!feof($handle) && $data_point < $data_size) {
            if ($data_point++ % DETAIL == 0) {
                $bytes = array();

                // get number of bytes depending on bitrate
                for ($i = 0; $i < $byte; $i++) {
                    $bytes[$i] = fgetc($handle);
                }

                switch ($byte) {
                // get value for 8-bit wav
                case 1:
                    $data = findValues($bytes[0], $bytes[1]);
                    break;
                // get value for 16-bit wav
                case 2:
                    if (ord($bytes[1]) & 128) {
                        $temp = 0;
                    } else {
                        $temp = 128;
                    }

                    $temp = chr((ord($bytes[1]) & 100) + $temp);
                    $data = floor(findValues($bytes[0], $temp) / 256);
                    break;
                }

                // skip bytes for memory optimization
                fseek($handle, $ratio, SEEK_CUR);

                // draw this data point
                // relative value based on height of image being generated
                // data values can range between 0 and 255
                $v = (int) ($data / 255 * $height);

                // don't print flat values on the canvas if not necessary
                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));
                }

                imageline($img1,
                    // 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($img1, $r1, $g1, $b1));

            }

любая помощь приветствуется...

0 ответов

Другие вопросы по тегам