From acfbcfb5d2690db71946073f1a18073b09cc9390 Mon Sep 17 00:00:00 2001 From: wapmorgan Date: Tue, 3 Dec 2019 03:57:41 +0300 Subject: [PATCH] Fix checking vbr for 2.5 codec --- src/Mp3Info.php | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/Mp3Info.php b/src/Mp3Info.php index c43f879..8bfa8cb 100644 --- a/src/Mp3Info.php +++ b/src/Mp3Info.php @@ -62,13 +62,22 @@ class Mp3Info { */ static private $_sampleRateTable; + /** + * @var array + */ + static private $_vbrOffsets = [ + self::MPEG_1 => [21, 36], + self::MPEG_2 => [13, 21], + self::MPEG_25 => [13, 21], + ]; + /** * @var int Limit in bytes for seeking a mpeg header in file */ public static $headerSeekLimit = 2048; /** - * MPEG codec version (1 or 2) + * MPEG codec version (1 or 2 or 2.5 or undefined) * @var int */ public $codecVersion; @@ -344,15 +353,10 @@ class Mp3Info { case 0b11: $this->channel = self::MONO; break; } - switch ($this->codecVersion.($this->channel == self::MONO ? 'mono' : 'stereo')) { - case '1stereo': $offset = 36; break; - case '1mono': $offset = 21; break; - case '2stereo': $offset = 21; break; - case '2mono': $offset = 13; break; - } + $vbr_offset = self::$_vbrOffsets[$this->codecVersion][$this->channel == self::MONO ? 0 : 1]; // check for VBR - fseek($fp, $pos + $offset); + fseek($fp, $pos + $vbr_offset); if (fread($fp, 4) == self::VBR_SYNC) { $this->isVbr = true; $flagsBytes = $this->readBytes($fp, 4);