Lines Matching refs:ThisFileInfo

1212 	function CalculateCompressionRatioVideo(&$ThisFileInfo) {  argument
1213 if (empty($ThisFileInfo['video'])) {
1216 …if (empty($ThisFileInfo['video']['resolution_x']) || empty($ThisFileInfo['video']['resolution_y'])…
1219 if (empty($ThisFileInfo['video']['bits_per_sample'])) {
1223 switch ($ThisFileInfo['video']['dataformat']) {
1232 $BitrateCompressed = $ThisFileInfo['filesize'] * 8;
1236 if (!empty($ThisFileInfo['video']['frame_rate'])) {
1237 $FrameRate = $ThisFileInfo['video']['frame_rate'];
1241 if (!empty($ThisFileInfo['playtime_seconds'])) {
1242 $PlaytimeSeconds = $ThisFileInfo['playtime_seconds'];
1246 if (!empty($ThisFileInfo['video']['bitrate'])) {
1247 $BitrateCompressed = $ThisFileInfo['video']['bitrate'];
1253 …$BitrateUncompressed = $ThisFileInfo['video']['resolution_x'] * $ThisFileInfo['video']['resolution…
1255 $ThisFileInfo['video']['compression_ratio'] = $BitrateCompressed / $BitrateUncompressed;
1261 function CalculateCompressionRatioAudio(&$ThisFileInfo) { argument
1262 …($ThisFileInfo['audio']['bitrate']) || empty($ThisFileInfo['audio']['channels']) || empty($ThisFil…
1265ThisFileInfo['audio']['compression_ratio'] = $ThisFileInfo['audio']['bitrate'] / ($ThisFileInfo['a…
1583 function getMP3headerFilepointer(&$fd, &$ThisFileInfo) { argument
1585 getOnlyMPEGaudioInfo($fd, $ThisFileInfo, $ThisFileInfo['avdataoffset']);
1587 if (isset($ThisFileInfo['mpeg']['audio']['bitrate_mode'])) {
1588 …$ThisFileInfo['audio']['bitrate_mode'] = strtolower($ThisFileInfo['mpeg']['audio']['bitrate_mode']…
1591ThisFileInfo['id3v2']) && ($ThisFileInfo['avdataoffset'] > $ThisFileInfo['id3v2']['headerlength'])…
1593 $ThisFileInfo['warning'] .= "\n".'Unknown data before synch ';
1594 if (isset($ThisFileInfo['id3v2']['headerlength'])) {
1595 …$ThisFileInfo['warning'] .= '(ID3v2 header ends at '.$ThisFileInfo['id3v2']['headerlength'].', the…
1597 $ThisFileInfo['warning'] .= '(should be at beginning of file, ';
1599 $ThisFileInfo['warning'] .= 'synch detected at '.$ThisFileInfo['avdataoffset'].')';
1600 if ($ThisFileInfo['audio']['bitrate_mode'] == 'cbr') {
1601 … (!empty($ThisFileInfo['id3v2']['headerlength']) && (($ThisFileInfo['avdataoffset'] - $ThisFileInf…
1602 …$ThisFileInfo['warning'] .= '. This is a known problem with some versions of LAME (3.91, 3.92) DLL…
1603 $ThisFileInfo['audio']['codec'] = 'LAME';
1604 …} elseif (empty($ThisFileInfo['id3v2']['headerlength']) && ($ThisFileInfo['avdataoffset'] == $This…
1605 …$ThisFileInfo['warning'] .= '. This is a known problem with some versions of LAME (3.91, 3.92) DLL…
1606 $ThisFileInfo['audio']['codec'] = 'LAME';
1612 …if (isset($ThisFileInfo['mpeg']['audio']['layer']) && ($ThisFileInfo['mpeg']['audio']['layer'] == …
1613 $ThisFileInfo['audio']['dataformat'] = 'mp2';
1614 …} elseif (isset($ThisFileInfo['mpeg']['audio']['layer']) && ($ThisFileInfo['mpeg']['audio']['layer…
1615 $ThisFileInfo['audio']['dataformat'] = 'mp1';
1617 if ($ThisFileInfo['fileformat'] == 'mp3') {
1618 switch ($ThisFileInfo['audio']['dataformat']) {
1622 $ThisFileInfo['fileformat'] = $ThisFileInfo['audio']['dataformat'];
1626 …$ThisFileInfo['warning'] .= "\n".'Expecting [audio][dataformat] to be mp1/mp2/mp3 when fileformat …
1631 if (empty($ThisFileInfo['fileformat'])) {
1632 $ThisFileInfo['error'] .= "\n".'Synch not found';
1633 unset($ThisFileInfo['fileformat']);
1634 unset($ThisFileInfo['audio']['bitrate_mode']);
1635 unset($ThisFileInfo['avdataoffset']);
1636 unset($ThisFileInfo['avdataend']);
1640 $ThisFileInfo['mime_type'] = 'audio/mpeg';
1641 $ThisFileInfo['audio']['lossless'] = false;
1644 …if (!isset($ThisFileInfo['playtime_seconds']) && isset($ThisFileInfo['audio']['bitrate']) && ($Thi…
1645 …$ThisFileInfo['playtime_seconds'] = ($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset']) *…
1648 if (isset($ThisFileInfo['mpeg']['audio']['LAME'])) {
1649 $ThisFileInfo['audio']['codec'] = 'LAME';
1650 if (!empty($ThisFileInfo['mpeg']['audio']['LAME']['long_version'])) {
1651 $ThisFileInfo['audio']['encoder'] = trim($ThisFileInfo['mpeg']['audio']['LAME']['long_version']);
1659 function decodeMPEGaudioHeader($fd, $offset, &$ThisFileInfo, $recursivesearch=true, $ScanAsCBR=fals… argument
1678 if ($offset >= $ThisFileInfo['avdataend']) {
1679 $ThisFileInfo['error'] .= "\n".'end of file encounter looking for MPEG synch';
1709 $ThisFileInfo['mpeg']['audio']['raw'] = $MPEGheaderRawArray;
1711 $ThisFileInfo['error'] .= "\n".'Invalid MPEG audio header at offset '.$offset;
1717 …$ThisFileInfo['mpeg']['audio']['version'] = $MPEGaudioVersionLookup[$ThisFileInfo['mpeg']['a…
1718 …$ThisFileInfo['mpeg']['audio']['layer'] = $MPEGaudioLayerLookup[$ThisFileInfo['mpeg']['aud…
1720 …$ThisFileInfo['mpeg']['audio']['channelmode'] = $MPEGaudioChannelModeLookup[$ThisFileInfo['mpeg'…
1721 …$ThisFileInfo['mpeg']['audio']['channels'] = (($ThisFileInfo['mpeg']['audio']['channelmode'] …
1722 …$ThisFileInfo['mpeg']['audio']['sample_rate'] = $MPEGaudioFrequencyLookup[$ThisFileInfo['mpeg'][…
1723 …$ThisFileInfo['mpeg']['audio']['protection'] = !$ThisFileInfo['mpeg']['audio']['raw']['protecti…
1724 …$ThisFileInfo['mpeg']['audio']['private'] = (bool) $ThisFileInfo['mpeg']['audio']['raw']['pr…
1725 …$ThisFileInfo['mpeg']['audio']['modeextension'] = $MPEGaudioModeExtensionLookup[$ThisFileInfo['mpe…
1726 …$ThisFileInfo['mpeg']['audio']['copyright'] = (bool) $ThisFileInfo['mpeg']['audio']['raw']['co…
1727 …$ThisFileInfo['mpeg']['audio']['original'] = (bool) $ThisFileInfo['mpeg']['audio']['raw']['or…
1728 …$ThisFileInfo['mpeg']['audio']['emphasis'] = $MPEGaudioEmphasisLookup[$ThisFileInfo['mpeg']['…
1730 $ThisFileInfo['audio']['channels'] = $ThisFileInfo['mpeg']['audio']['channels'];
1731 $ThisFileInfo['audio']['sample_rate'] = $ThisFileInfo['mpeg']['audio']['sample_rate'];
1733 if ($ThisFileInfo['mpeg']['audio']['protection']) {
1734 $ThisFileInfo['mpeg']['audio']['crc'] = BigEndian2Int(substr($headerstring, 4, 2));
1739 if ($ThisFileInfo['mpeg']['audio']['raw']['bitrate'] == 15) {
1741 …$ThisFileInfo['warning'] .= "\n".'Invalid bitrate index (15), this is a known bug in free-format M…
1742 $ThisFileInfo['mpeg']['audio']['raw']['bitrate'] = 0;
1744 …$ThisFileInfo['mpeg']['audio']['padding'] = (bool) $ThisFileInfo['mpeg']['audio']['raw']['padding'…
1745ThisFileInfo['mpeg']['audio']['bitrate'] = $MPEGaudioBitrateLookup[$ThisFileInfo['mpeg']['audio'][…
1747 …if (($ThisFileInfo['mpeg']['audio']['bitrate'] == 'free') && ($offset == $ThisFileInfo['avdataoffs…
1754 if (!$FastMPEGheaderScan && ($ThisFileInfo['mpeg']['audio']['layer'] == 'II')) {
1756 $ThisFileInfo['audio']['dataformat'] = 'mp2';
1757 switch ($ThisFileInfo['mpeg']['audio']['channelmode']) {
1760 …if (($ThisFileInfo['mpeg']['audio']['bitrate'] == 'free') || ($ThisFileInfo['mpeg']['audio']['bitr…
1763 …$ThisFileInfo['error'] .= "\n".$ThisFileInfo['mpeg']['audio']['bitrate'].'kbps not allowed in Laye…
1771 …if (($ThisFileInfo['mpeg']['audio']['bitrate'] == 'free') || ($ThisFileInfo['mpeg']['audio']['bitr…
1774 …$ThisFileInfo['error'] .= "\n".$ThisFileInfo['mpeg']['audio']['bitrate'].'kbps not allowed in Laye…
1784 if ($ThisFileInfo['audio']['sample_rate'] > 0) {
1785ThisFileInfo['mpeg']['audio']['framelength'] = MPEGaudioFrameLength($ThisFileInfo['mpeg']['audio']…
1788 if ($ThisFileInfo['mpeg']['audio']['bitrate'] != 'free') {
1790 $ThisFileInfo['audio']['bitrate'] = 1000 * $ThisFileInfo['mpeg']['audio']['bitrate'];
1792 if (isset($ThisFileInfo['mpeg']['audio']['framelength'])) {
1793 $nextframetestoffset = $offset + $ThisFileInfo['mpeg']['audio']['framelength'];
1795 $ThisFileInfo['error'] .= "\n".'Frame at offset('.$offset.') is has an invalid frame length.';
1810 $ThisFileInfo['mpeg']['audio']['bitrate_mode'] = 'vbr';
1811 $ThisFileInfo['mpeg']['audio']['VBR_method'] = 'Fraunhofer';
1812 $ThisFileInfo['audio']['codec'] = 'Fraunhofer';
1818 …$ThisFileInfo['mpeg']['audio']['VBR_encoder_version'] = BigEndian2Int(substr($headerstring, $F…
1819 …$ThisFileInfo['mpeg']['audio']['VBR_encoder_delay'] = BigEndian2Int(substr($headerstring, $F…
1820 …$ThisFileInfo['mpeg']['audio']['VBR_quality'] = BigEndian2Int(substr($headerstring, $F…
1821 …$ThisFileInfo['mpeg']['audio']['VBR_bytes'] = BigEndian2Int(substr($headerstring, $F…
1822 …$ThisFileInfo['mpeg']['audio']['VBR_frames'] = BigEndian2Int(substr($headerstring, $F…
1823 …$ThisFileInfo['mpeg']['audio']['VBR_seek_offsets'] = BigEndian2Int(substr($headerstring, $F…
1825 …$ThisFileInfo['mpeg']['audio']['VBR_seek_offsets_stride'] = BigEndian2Int(substr($headerstring, $F…
1827 $ExpectedNumberOfAudioBytes = $ThisFileInfo['mpeg']['audio']['VBR_bytes'];
1830 for ($i = 0; $i < $ThisFileInfo['mpeg']['audio']['VBR_seek_offsets']; $i++) {
1833 $ThisFileInfo['mpeg']['audio']['VBR_offsets_relative'][$i] = $Fraunhofer_OffsetN;
1834 …$ThisFileInfo['mpeg']['audio']['VBR_offsets_absolute'][$i] = $Fraunhofer_OffsetN + $previousbyteof…
1844 if ($ThisFileInfo['mpeg']['audio']['version'] == '1') {
1845 if ($ThisFileInfo['mpeg']['audio']['channelmode'] == 'mono') {
1855 if ($ThisFileInfo['mpeg']['audio']['channelmode'] == 'mono') {
1870 $ThisFileInfo['mpeg']['audio']['bitrate_mode'] = 'vbr';
1871 $ThisFileInfo['mpeg']['audio']['VBR_method'] = 'Xing';
1873 …$ThisFileInfo['mpeg']['audio']['xing_flags_raw'] = BigEndian2Int(substr($headerstring, $VBRidOffse…
1875 …$ThisFileInfo['mpeg']['audio']['xing_flags']['frames'] = (bool) ($ThisFileInfo['mpeg']['audio']…
1876 …$ThisFileInfo['mpeg']['audio']['xing_flags']['bytes'] = (bool) ($ThisFileInfo['mpeg']['audio']…
1877 …$ThisFileInfo['mpeg']['audio']['xing_flags']['toc'] = (bool) ($ThisFileInfo['mpeg']['audio']…
1878 …$ThisFileInfo['mpeg']['audio']['xing_flags']['vbr_scale'] = (bool) ($ThisFileInfo['mpeg']['audio']…
1880 if ($ThisFileInfo['mpeg']['audio']['xing_flags']['frames']) {
1881 …$ThisFileInfo['mpeg']['audio']['VBR_frames'] = BigEndian2Int(substr($headerstring, $VBRidOffset + …
1883 if ($ThisFileInfo['mpeg']['audio']['xing_flags']['bytes']) {
1884 …$ThisFileInfo['mpeg']['audio']['VBR_bytes'] = BigEndian2Int(substr($headerstring, $VBRidOffset + …
1887 …if (($ThisFileInfo['mpeg']['audio']['bitrate'] == 'free') && !empty($ThisFileInfo['mpeg']['audio']…
1888 …$framelengthfloat = $ThisFileInfo['mpeg']['audio']['VBR_bytes'] / $ThisFileInfo['mpeg']['audio']['…
1889 if ($ThisFileInfo['mpeg']['audio']['layer'] == 'I') {
1891 …$ThisFileInfo['audio']['bitrate'] = ((($framelengthfloat / 4) - intval($ThisFileInfo['mpeg']['audi…
1894 …$ThisFileInfo['audio']['bitrate'] = (($framelengthfloat - intval($ThisFileInfo['mpeg']['audio']['p…
1896 $ThisFileInfo['mpeg']['audio']['framelength'] = floor($framelengthfloat);
1899 if ($ThisFileInfo['mpeg']['audio']['xing_flags']['toc']) {
1902 $ThisFileInfo['mpeg']['audio']['toc'][$i] = ord($LAMEtocData[$i]);
1905 if ($ThisFileInfo['mpeg']['audio']['xing_flags']['vbr_scale']) {
1906 …$ThisFileInfo['mpeg']['audio']['VBR_scale'] = BigEndian2Int(substr($headerstring, $VBRidOffset + 1…
1911 …$ThisFileInfo['mpeg']['audio']['LAME']['long_version'] = substr($headerstring, $VBRidOffset + 120…
1912 …$ThisFileInfo['mpeg']['audio']['LAME']['short_version'] = substr($ThisFileInfo['mpeg']['audio']['L…
1913 …$ThisFileInfo['mpeg']['audio']['LAME']['long_version'] = rtrim($ThisFileInfo['mpeg']['audio']['LA…
1915 if ($ThisFileInfo['mpeg']['audio']['LAME']['short_version'] >= 'LAME3.90.') {
1928 unset($ThisFileInfo['mpeg']['audio']['VBR_scale']);
1929 …$ThisFileInfo['mpeg']['audio']['LAME']['vbr_quality'] = BigEndian2Int(substr($headerstring, $LAMEt…
1932 …$ThisFileInfo['mpeg']['audio']['LAME']['short_version'] = substr($headerstring, $LAMEtagOffsetCont…
1933 …$ThisFileInfo['mpeg']['audio']['LAME']['long_version'] = $ThisFileInfo['mpeg']['audio']['LAME']['…
1938 …$ThisFileInfo['mpeg']['audio']['LAME']['tag_revision'] = ($LAMEtagRevisionVBRmethod & 0xF0) >…
1939 … $ThisFileInfo['mpeg']['audio']['LAME']['raw']['vbr_method'] = $LAMEtagRevisionVBRmethod & 0x0F;
1940 …$ThisFileInfo['mpeg']['audio']['LAME']['vbr_method'] = LAMEvbrMethodLookup($ThisFileInfo['m…
1943 …$ThisFileInfo['mpeg']['audio']['LAME']['lowpass_frequency'] = BigEndian2Int(substr($headerstring, …
1948 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['peak_amplitude'] = BigEndian2Float(substr($headers…
1949 …$ThisFileInfo['mpeg']['audio']['LAME']['raw']['RGAD_radio'] = BigEndian2Int(substr($headers…
1950 …$ThisFileInfo['mpeg']['audio']['LAME']['raw']['RGAD_audiophile'] = BigEndian2Int(substr($headers…
1952 if ($ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['peak_amplitude'] == 0) {
1953 $ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['peak_amplitude'] = false;
1956 if ($ThisFileInfo['mpeg']['audio']['LAME']['raw']['RGAD_radio'] != 0) {
1959 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['radio']['raw']['name'] = ($ThisFileInfo['mp…
1960 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['radio']['raw']['originator'] = ($ThisFileInfo['mp…
1961 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['radio']['raw']['sign_bit'] = ($ThisFileInfo['mp…
1962 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['radio']['raw']['gain_adjust'] = $ThisFileInfo['mp…
1963 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['radio']['name'] = RGADnameLookup($ThisFileIn…
1964 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['radio']['originator'] = RGADoriginatorLookup($This…
1965ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['radio']['gain_db'] = RGADadjustmentLookup($ThisF…
1967 if ($ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['peak_amplitude'] !== false) {
1968 …$ThisFileInfo['replay_gain']['radio']['peak'] = $ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['…
1970 …$ThisFileInfo['replay_gain']['radio']['originator'] = $ThisFileInfo['mpeg']['audio']['LAME']['RGAD…
1971 …$ThisFileInfo['replay_gain']['radio']['adjustment'] = $ThisFileInfo['mpeg']['audio']['LAME']['RGAD…
1973 if ($ThisFileInfo['mpeg']['audio']['LAME']['raw']['RGAD_audiophile'] != 0) {
1976 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['audiophile']['raw']['name'] = ($ThisFileInf…
1977 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['audiophile']['raw']['originator'] = ($ThisFileInf…
1978 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['audiophile']['raw']['sign_bit'] = ($ThisFileInf…
1979 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['audiophile']['raw']['gain_adjust'] = $ThisFileInfo
1980 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['audiophile']['name'] = RGADnameLookup($ThisF…
1981 …$ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['audiophile']['originator'] = RGADoriginatorLookup(…
1982ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['audiophile']['gain_db'] = RGADadjustmentLookup($
1984 if ($ThisFileInfo['mpeg']['audio']['LAME']['RGAD']['peak_amplitude'] !== false) {
1985 …$ThisFileInfo['replay_gain']['audiophile']['peak'] = $ThisFileInfo['mpeg']['audio']['LAME']['RGA…
1987 …$ThisFileInfo['replay_gain']['audiophile']['originator'] = $ThisFileInfo['mpeg']['audio']['LAME'][…
1988 …$ThisFileInfo['replay_gain']['audiophile']['adjustment'] = $ThisFileInfo['mpeg']['audio']['LAME'][…
1994 …$ThisFileInfo['mpeg']['audio']['LAME']['encoding_flags']['nspsytune'] = (bool) ($EncodingFlagsAT…
1995 …$ThisFileInfo['mpeg']['audio']['LAME']['encoding_flags']['nssafejoint'] = (bool) ($EncodingFlagsAT…
1996 …$ThisFileInfo['mpeg']['audio']['LAME']['encoding_flags']['nogap_next'] = (bool) ($EncodingFlagsAT…
1997 …$ThisFileInfo['mpeg']['audio']['LAME']['encoding_flags']['nogap_prev'] = (bool) ($EncodingFlagsAT…
1998 …$ThisFileInfo['mpeg']['audio']['LAME']['ath_type'] = $EncodingFlagsAT…
2002 … if ($ThisFileInfo['mpeg']['audio']['LAME']['raw']['vbr_method'] == 2) { // Average BitRate (ABR)
2003 $ThisFileInfo['mpeg']['audio']['LAME']['bitrate_abr'] = $ABRbitrateMinBitrate;
2005 $ThisFileInfo['mpeg']['audio']['LAME']['bitrate_min'] = $ABRbitrateMinBitrate;
2010 $ThisFileInfo['mpeg']['audio']['LAME']['encoder_delay'] = ($EncoderDelays & 0xFFF000) >> 12;
2011 $ThisFileInfo['mpeg']['audio']['LAME']['end_padding'] = $EncoderDelays & 0x000FFF;
2015 $ThisFileInfo['mpeg']['audio']['LAME']['raw']['noise_shaping'] = ($MiscByte & 0x03);
2016 $ThisFileInfo['mpeg']['audio']['LAME']['raw']['stereo_mode'] = ($MiscByte & 0x1C) >> 2;
2017 $ThisFileInfo['mpeg']['audio']['LAME']['raw']['not_optimal_quality'] = ($MiscByte & 0x20) >> 5;
2018 $ThisFileInfo['mpeg']['audio']['LAME']['raw']['source_sample_freq'] = ($MiscByte & 0xC0) >> 6;
2019 …$ThisFileInfo['mpeg']['audio']['LAME']['noise_shaping'] = $ThisFileInfo['mpeg']['audio']['LA…
2020 …$ThisFileInfo['mpeg']['audio']['LAME']['stereo_mode'] = LAMEmiscStereoModeLookup($ThisFile…
2021 …$ThisFileInfo['mpeg']['audio']['LAME']['not_optimal_quality'] = (bool) $ThisFileInfo['mpeg']['audi…
2022 …$ThisFileInfo['mpeg']['audio']['LAME']['source_sample_freq'] = LAMEmiscSourceSampleFrequencyLooku…
2025 …$ThisFileInfo['mpeg']['audio']['LAME']['raw']['mp3_gain'] = BigEndian2Int(substr($headerstring, $L…
2026 …$ThisFileInfo['mpeg']['audio']['LAME']['mp3_gain_db'] = 1.5 * $ThisFileInfo['mpeg']['audio']['…
2027 …$ThisFileInfo['mpeg']['audio']['LAME']['mp3_gain_factor'] = pow(2, ($ThisFileInfo['mpeg']['audio']…
2032 … $ThisFileInfo['mpeg']['audio']['LAME']['raw']['surround_info'] = ($PresetSurroundBytes & 0x3800);
2033 …$ThisFileInfo['mpeg']['audio']['LAME']['surround_info'] = LAMEsurroundInfoLookup($ThisFileI…
2034 … $ThisFileInfo['mpeg']['audio']['LAME']['preset_used_id'] = ($PresetSurroundBytes & 0x07FF);
2037 …$ThisFileInfo['mpeg']['audio']['LAME']['audio_bytes'] = BigEndian2Int(substr($headerstring, $LAMEt…
2038 …oBytes = (($ThisFileInfo['mpeg']['audio']['LAME']['audio_bytes'] > 0) ? $ThisFileInfo['mpeg']['aud…
2041 …$ThisFileInfo['mpeg']['audio']['LAME']['music_crc'] = BigEndian2Int(substr($headerstring, $LAME…
2044 …$ThisFileInfo['mpeg']['audio']['LAME']['lame_tag_crc'] = BigEndian2Int(substr($headerstring, $LAME…
2048 if ($ThisFileInfo['mpeg']['audio']['LAME']['raw']['vbr_method'] == 1) {
2050 $ThisFileInfo['mpeg']['audio']['bitrate_mode'] = 'cbr';
2051 …if (empty($ThisFileInfo['mpeg']['audio']['bitrate']) || ($ThisFileInfo['mpeg']['audio']['LAME']['b…
2052 … $ThisFileInfo['mpeg']['audio']['bitrate'] = $ThisFileInfo['mpeg']['audio']['LAME']['bitrate_min'];
2063 $ThisFileInfo['mpeg']['audio']['bitrate_mode'] = 'cbr';
2065 $ThisFileInfo['mpeg']['audio']['bitrate_mode'] = 'vbr';
2066 if (RecursiveFrameScanning($fd, $ThisFileInfo, $offset, $nextframetestoffset, true)) {
2068 $ThisFileInfo['mpeg']['audio']['bitrate_mode'] = 'cbr';
2070 if ($ThisFileInfo['mpeg']['audio']['bitrate_mode'] == 'vbr') {
2071 …$ThisFileInfo['warning'] .= "\n".'VBR file with no VBR header. Bitrate values calculated from actu…
2079 …rOfAudioBytes > 0) && ($ExpectedNumberOfAudioBytes != ($ThisFileInfo['avdataend'] - $ThisFileInfo[…
2080 …if (($ExpectedNumberOfAudioBytes - ($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset'])) =…
2081 …$ThisFileInfo['warning'] .= "\n".'Last byte of data truncated (this is a known bug in Meracl ID3 T…
2082 …} elseif ($ExpectedNumberOfAudioBytes > ($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset'…
2083ThisFileInfo['warning'] .= "\n".'Probable truncated file: expecting '.$ExpectedNumberOfAudioBytes.…
2085ThisFileInfo['warning'] .= "\n".'Too much data in file: expecting '.$ExpectedNumberOfAudioBytes.' …
2089 …if (($ThisFileInfo['mpeg']['audio']['bitrate'] == 'free') && empty($ThisFileInfo['audio']['bitrate…
2090 …if (($offset == $ThisFileInfo['avdataoffset']) && empty($ThisFileInfo['mpeg']['audio']['VBR_frames…
2091 $framebytelength = FreeFormatFrameLength($fd, $offset, $ThisFileInfo, true);
2093 $ThisFileInfo['mpeg']['audio']['framelength'] = $framebytelength;
2094 if ($ThisFileInfo['mpeg']['audio']['layer'] == 'I') {
2096 …$ThisFileInfo['audio']['bitrate'] = ((($framebytelength / 4) - intval($ThisFileInfo['mpeg']['audio…
2099 …$ThisFileInfo['audio']['bitrate'] = (($framebytelength - intval($ThisFileInfo['mpeg']['audio']['pa…
2102 …$ThisFileInfo['error'] .= "\n".'Error calculating frame length of free-format MP3 without Xing/LAM…
2107 …if (($ThisFileInfo['mpeg']['audio']['bitrate_mode'] == 'vbr') && isset($ThisFileInfo['mpeg']['audi…
2108 $ThisFileInfo['mpeg']['audio']['VBR_frames']--; // don't count the Xing / VBRI frame
2109 …if (($ThisFileInfo['mpeg']['audio']['version'] == '1') && ($ThisFileInfo['mpeg']['audio']['layer']…
2110ThisFileInfo['mpeg']['audio']['VBR_bitrate'] = ((($ThisFileInfo['mpeg']['audio']['VBR_bytes'] / $T…
2111 …} elseif ((($ThisFileInfo['mpeg']['audio']['version'] == '2') || ($ThisFileInfo['mpeg']['audio']['…
2112ThisFileInfo['mpeg']['audio']['VBR_bitrate'] = ((($ThisFileInfo['mpeg']['audio']['VBR_bytes'] / $T…
2114ThisFileInfo['mpeg']['audio']['VBR_bitrate'] = ((($ThisFileInfo['mpeg']['audio']['VBR_bytes'] / $T…
2116 if ($ThisFileInfo['mpeg']['audio']['VBR_bitrate'] > 0) {
2117 $ThisFileInfo['audio']['bitrate'] = 1000 * $ThisFileInfo['mpeg']['audio']['VBR_bitrate'];
2118 …$ThisFileInfo['mpeg']['audio']['bitrate'] = $ThisFileInfo['mpeg']['audio']['VBR_bitrate']; // to a…
2127 if (!RecursiveFrameScanning($fd, $ThisFileInfo, $offset, $nextframetestoffset, $ScanAsCBR)) {
2239 function RecursiveFrameScanning(&$fd, &$ThisFileInfo, &$offset, &$nextframetestoffset, $ScanAsCBR) { argument
2242 if (($nextframetestoffset + 4) >= $ThisFileInfo['avdataend']) {
2247 …array('error'=>'', 'warning'=>'', 'avdataend'=>$ThisFileInfo['avdataend'], 'avdataoffset'=>$ThisFi…
2252 …itrate']) || !isset($ThisFileInfo['mpeg']['audio']['bitrate']) || ($nextframetestarray['mpeg']['au…
2262 $ThisFileInfo['error'] .= "\n".'Frame at offset ('.$offset.') is has an invalid frame length.';
2269 …$ThisFileInfo['error'] .= "\n".'Frame at offset ('.$offset.') is valid, but the next one at ('.$ne…
2277 function FreeFormatFrameLength($fd, $offset, &$ThisFileInfo, $deepscan=false) { argument
2310 …$ThisFileInfo['error'] .= "\n".'Cannot find next free-format synch pattern ('.PrintHexBytes($SyncP…
2313 …$ThisFileInfo['warning'] .= "\n".'ModeExtension varies between first frame and other frames (known…
2314 $ThisFileInfo['audio']['codec'] = 'LAME';
2315 $ThisFileInfo['audio']['encoder'] = 'LAME3.88';
2325 while ($nextoffset < ($ThisFileInfo['avdataend'] - 6)) {
2340 …$ThisFileInfo['error'] .= "\n".'Did not find expected free-format sync pattern at offset '.$nextof…
2353 function getOnlyMPEGaudioInfo($fd, &$ThisFileInfo, $avdataoffset, $BitrateHistogram=false) { argument
2378 …if (($SynchSeekOffset > $header_len) && (($avdataoffset + $SynchSeekOffset) < $ThisFileInfo['avda…
2382 $ThisFileInfo['error'] .= "\n".'could not find valid MPEG synch within the first 131072 bytes';
2383 if (isset($ThisFileInfo['audio']['bitrate'])) {
2384 unset($ThisFileInfo['audio']['bitrate']);
2386 if (isset($ThisFileInfo['mpeg']['audio'])) {
2387 unset($ThisFileInfo['mpeg']['audio']);
2389 …if (isset($ThisFileInfo['mpeg']) && (!is_array($ThisFileInfo['mpeg']) || (count($ThisFileInfo['mpe…
2390 unset($ThisFileInfo['mpeg']);
2401 $ThisFileInfo['error'] .= "\n".'could not find valid MPEG synch before end of file';
2402 if (isset($ThisFileInfo['audio']['bitrate'])) {
2403 unset($ThisFileInfo['audio']['bitrate']);
2405 if (isset($ThisFileInfo['mpeg']['audio'])) {
2406 unset($ThisFileInfo['mpeg']['audio']);
2408 …if (isset($ThisFileInfo['mpeg']) && (!is_array($ThisFileInfo['mpeg']) || (count($ThisFileInfo['mpe…
2409 unset($ThisFileInfo['mpeg']);
2417 $ThisFileInfo['error'] .= "\n".'could not find valid MPEG synch before end of file';
2423 if (!isset($FirstFrameThisfileInfo) && !isset($ThisFileInfo['mpeg']['audio'])) {
2424 $FirstFrameThisfileInfo = $ThisFileInfo;
2432 $dummy = $ThisFileInfo; // only overwrite real data if valid header found
2436 $ThisFileInfo = $dummy;
2437 $ThisFileInfo['avdataoffset'] = $avdataoffset + $SynchSeekOffset;
2438 switch ($ThisFileInfo['fileformat']) {
2443 $ThisFileInfo['fileformat'] = 'mp3';
2444 $ThisFileInfo['audio']['dataformat'] = 'mp3';
2447 …if (!CloseMatch($ThisFileInfo['audio']['bitrate'], $FirstFrameThisfileInfo['audio']['bitrate'], 1)…
2450 $ThisFileInfo = $FirstFrameThisfileInfo;
2451 $ThisFileInfo['avdataoffset'] = $FirstFrameAVDataOffset;
2452 $ThisFileInfo['fileformat'] = 'mp3';
2453 $ThisFileInfo['audio']['dataformat'] = 'mp3';
2454 $dummy = $ThisFileInfo;
2460 $ThisFileInfo = $dummy;
2461 $ThisFileInfo['avdataoffset'] = $GarbageOffsetEnd;
2462 …$ThisFileInfo['warning'] .= "\n".'apparently-valid VBR header not used because could not find '.MP…
2466 …$ThisFileInfo['warning'] .= "\n".'using data from VBR header even though could not find '.MPEG_VAL…
2472 …if (isset($ThisFileInfo['mpeg']['audio']['bitrate_mode']) && ($ThisFileInfo['mpeg']['audio']['bitr…
2479 …$ThisFileInfo['mpeg']['audio']['stereo_distribution'] = array('stereo'=>0, 'joint stereo'=>0, 'du…
2480 $ThisFileInfo['mpeg']['audio']['version_distribution'] = array('1'=>0, '2'=>0, '2.5'=>0);
2482 if ($ThisFileInfo['mpeg']['audio']['version'] == '1') {
2483 if ($ThisFileInfo['mpeg']['audio']['layer'] == 'III') {
2484 …$ThisFileInfo['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32=>0, 40=>0, 48=>0, 56=…
2485 } elseif ($ThisFileInfo['mpeg']['audio']['layer'] == 'II') {
2486 …$ThisFileInfo['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32=>0, 48=>0, 56=>0, 64=…
2487 } elseif ($ThisFileInfo['mpeg']['audio']['layer'] == 'I') {
2488 …$ThisFileInfo['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32=>0, 64=>0, 96=>0, 128…
2490 } elseif ($ThisFileInfo['mpeg']['audio']['layer'] == 'I') {
2491 …$ThisFileInfo['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32=>0, 48=>0, 56=>0, 64=…
2493 …$ThisFileInfo['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 8=>0, 16=>0, 24=>0, 32=>…
2496 …('error'=>$ThisFileInfo['error'], 'warning'=>$ThisFileInfo['warning'], 'avdataend'=>$ThisFileInfo[…
2497 $synchstartoffset = $ThisFileInfo['avdataoffset'];
2504 $ThisFileInfo['mpeg']['audio']['bitrate_distribution'][$thisframebitrate]++;
2505 … $ThisFileInfo['mpeg']['audio']['stereo_distribution'][$dummy['mpeg']['audio']['channelmode']]++;
2506 $ThisFileInfo['mpeg']['audio']['version_distribution'][$dummy['mpeg']['audio']['version']]++;
2508 … $ThisFileInfo['warning'] .= "\n".'Invalid/missing framelength in histogram analysis - aborting';
2517 …foreach ($ThisFileInfo['mpeg']['audio']['bitrate_distribution'] as $bitratevalue => $bitratecount)…
2524 $ThisFileInfo['error'] .= "\n".'Corrupt MP3 file: framecounter == zero';
2527 $ThisFileInfo['mpeg']['audio']['frame_count'] = $framecounter;
2528 $ThisFileInfo['mpeg']['audio']['bitrate'] = 1000 * ($bittotal / $framecounter);
2530 $ThisFileInfo['audio']['bitrate'] = $ThisFileInfo['mpeg']['audio']['bitrate'];
2535 …foreach ($ThisFileInfo['mpeg']['audio']['bitrate_distribution'] as $bitrate_value => $bitrate_coun…
2541 $ThisFileInfo['mpeg']['audio']['bitrate_mode'] = 'vbr';
2543 $ThisFileInfo['mpeg']['audio']['bitrate_mode'] = 'cbr';
2545 $ThisFileInfo['audio']['bitrate_mode'] = $ThisFileInfo['mpeg']['audio']['bitrate_mode'];
2554 if (($avdataoffset + $SynchSeekOffset) >= $ThisFileInfo['avdataend']) {
2557 if (empty($ThisFileInfo['mpeg']['audio'])) {
2559 $ThisFileInfo['error'] .= "\n".'could not find valid MPEG synch before end of file';
2560 if (isset($ThisFileInfo['audio']['bitrate'])) {
2561 unset($ThisFileInfo['audio']['bitrate']);
2563 if (isset($ThisFileInfo['mpeg']['audio'])) {
2564 unset($ThisFileInfo['mpeg']['audio']);
2566 …if (isset($ThisFileInfo['mpeg']) && (!is_array($ThisFileInfo['mpeg']) || empty($ThisFileInfo['mpeg…
2567 unset($ThisFileInfo['mpeg']);
2576 $ThisFileInfo['audio']['bits_per_sample'] = 16;
2577 $ThisFileInfo['audio']['channels'] = $ThisFileInfo['mpeg']['audio']['channels'];
2578 $ThisFileInfo['audio']['channelmode'] = $ThisFileInfo['mpeg']['audio']['channelmode'];
2579 $ThisFileInfo['audio']['sample_rate'] = $ThisFileInfo['mpeg']['audio']['sample_rate'];