я пытаюсь создать волновые формы из 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));
}
любая помощь приветствуется …
Задача ещё не решена.
Других решений пока нет …