$br && ! $found_br) { $delta = self::$_bitrates[$i] - $br; $br_delta = self::$_bitrates[$i] - self::$_bitrates[$i-1]; if (round($br_delta / 3) > $delta) { $found_br = self::$_bitrates[$i]; } else { $found_br = self::$_bitrates[$i-1]; } } elseif ($i == count(self::$_bitrates) - 1 && self::$_bitrates[$i] < $br && ! $found_br) { $delta = $br - self::$_bitrates[$i]; if ($delta < 32) { $found_br = self::$_bitrates[$i]; } else { $found_br = $br; } } } return $found_br; } /** * Проверяет файлы, рассчитывает битрейт и релевантность * * @param array $files Массив файлов для обработки * @return array Обработанный массив файлов * @author chez **/ public static function check($files) { $m = new Match(); $m->setTrackData('Blondie', 'Call Me', 210); $m->setFiles($files); $m->calculateWeight(); $files = $m->getFiles(); uasort($files, function($a, $b){ return $a['weight'] < $b['weight']; }); foreach ($files as $i => $file) { $files[$i]['length'] = self::convertDuration($file['duration']); $files[$i]['bitrate'] = self::calculateBitrate($file['size'], $files[$i]['length']); } return $files; } /** * Чистит строку для максимально точного сравнения * * @param string $str Необработанная строка * @return string Чистая строка * @author chez **/ public static function prepareQuery($str) { $str = trim($str); while(strpos($str, ' ') !== false) { $str = str_replace(' ', ' ', $str); } return $str; } /** * Преобразует длину из формата мм:сс в ссс * * @param string $duration Читабельная длина * @return int Длина в секундах * @author chez **/ public static function convertDuration($duration) { } }