- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/integration/voximplant/audio.php
- Класс: Bitrix\Sender\Integration\VoxImplant\Audio
- Вызов: Audio::getMp3fileDuration
protected function getMp3fileDuration($fileId) { if (!$fileId) return false; $fileName = \CFile::GetPath($fileId); if ($this->isRemoteFile($fileName)) { $tmpFileName = \CFile::GetTempName('', 'tmpfile.mp3'); $request = new HttpClient([ "socketTimeout" => 5, "streamTimeout" => 5 ]); $request->download($fileName, $tmpFileName); $fileName = $tmpFileName; } else { $fileName = Application::getDocumentRoot() . $fileName; } $file = fopen($fileName, "rb"); $duration = 0; $header = fread($file, 100); $offset = $this->getId3v2TagLength($header); fseek($file, $offset, SEEK_SET); while (!feof($file)) { $frame = fread($file, 10); if (mb_strlen($frame, 'latin1') < 10) { break; } else { if ("\xff" == $frame[0] && (ord($frame[1]) & 0xe0)) // if 1111 1111 111x xxxx bits (header sequence) was found { list($frameLength, $frameDuration) = $this->getFrameInfo(mb_substr($frame, 0, 4, 'latin1')); if (!$frameLength) { return $duration; } $offset = $frameLength - 10; $duration += $frameDuration; } else { $offset = ('TAG' == mb_substr($frame, 0, 3, 'latin1')) ? 118 : -9; } fseek($file, $offset, SEEK_CUR); } } return round($duration); }