⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module.audio.ogg.php

📁 CMS系统 提供学习研究修改最好了 比流行的一些CMS简单 但是更容易理解 是帮助你学习PHPCMS系统的好东东哦
💻 PHP
📖 第 1 页 / 共 2 页
字号:
				if (feof($fd) || (($filedata .= fread($fd, GETID3_FREAD_BUFFER_SIZE)) === false)) {					// get some more data, unless eof, in which case fail					return false;				}			}		}		$filedataoffset += strlen('OggS') - 1; // page, delimited by 'OggS'		$oggheader['stream_structver']  = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1));		$filedataoffset += 1;		$oggheader['flags_raw']         = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1));		$filedataoffset += 1;		$oggheader['flags']['fresh']    = (bool) ($oggheader['flags_raw'] & 0x01); // fresh packet		$oggheader['flags']['bos']      = (bool) ($oggheader['flags_raw'] & 0x02); // first page of logical bitstream (bos)		$oggheader['flags']['eos']      = (bool) ($oggheader['flags_raw'] & 0x04); // last page of logical bitstream (eos)		$oggheader['pcm_abs_position']  = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 8));		$filedataoffset += 8;		$oggheader['stream_serialno']   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));		$filedataoffset += 4;		$oggheader['page_seqno']        = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));		$filedataoffset += 4;		$oggheader['page_checksum']     = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));		$filedataoffset += 4;		$oggheader['page_segments']     = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1));		$filedataoffset += 1;		$oggheader['page_length'] = 0;		for ($i = 0; $i < $oggheader['page_segments']; $i++) {			$oggheader['segment_table'][$i] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1));			$filedataoffset += 1;			$oggheader['page_length'] += $oggheader['segment_table'][$i];		}		$oggheader['header_end_offset'] = $oggheader['page_start_offset'] + $filedataoffset;		$oggheader['page_end_offset']   = $oggheader['header_end_offset'] + $oggheader['page_length'];		fseek($fd, $oggheader['header_end_offset'], SEEK_SET);		return $oggheader;	}	function ParseVorbisCommentsFilepointer(&$fd, &$ThisFileInfo) {		$OriginalOffset = ftell($fd);		$CommentStartOffset = $OriginalOffset;		$commentdataoffset = 0;		$VorbisCommentPage = 1;		switch ($ThisFileInfo['audio']['dataformat']) {			case 'vorbis':				$CommentStartOffset = $ThisFileInfo['ogg']['pageheader'][$VorbisCommentPage]['page_start_offset'];  // Second Ogg page, after header block				fseek($fd, $CommentStartOffset, SEEK_SET);				$commentdataoffset = 27 + $ThisFileInfo['ogg']['pageheader'][$VorbisCommentPage]['page_segments'];				$commentdata = fread($fd, getid3_ogg::OggPageSegmentLength($ThisFileInfo['ogg']['pageheader'][$VorbisCommentPage], 1) + $commentdataoffset);				$commentdataoffset += (strlen('vorbis') + 1);				break;			case 'flac':				fseek($fd, $ThisFileInfo['flac']['VORBIS_COMMENT']['raw']['offset'] + 4, SEEK_SET);				$commentdata = fread($fd, $ThisFileInfo['flac']['VORBIS_COMMENT']['raw']['block_length']);				break;			case 'speex':				$CommentStartOffset = $ThisFileInfo['ogg']['pageheader'][$VorbisCommentPage]['page_start_offset'];  // Second Ogg page, after header block				fseek($fd, $CommentStartOffset, SEEK_SET);				$commentdataoffset = 27 + $ThisFileInfo['ogg']['pageheader'][$VorbisCommentPage]['page_segments'];				$commentdata = fread($fd, getid3_ogg::OggPageSegmentLength($ThisFileInfo['ogg']['pageheader'][$VorbisCommentPage], 1) + $commentdataoffset);				break;			default:				return false;				break;		}		$VendorSize = getid3_lib::LittleEndian2Int(substr($commentdata, $commentdataoffset, 4));		$commentdataoffset += 4;		$ThisFileInfo['ogg']['vendor'] = substr($commentdata, $commentdataoffset, $VendorSize);		$commentdataoffset += $VendorSize;		$CommentsCount = getid3_lib::LittleEndian2Int(substr($commentdata, $commentdataoffset, 4));		$commentdataoffset += 4;		$ThisFileInfo['avdataoffset'] = $CommentStartOffset + $commentdataoffset;		$basicfields = array('TITLE', 'ARTIST', 'ALBUM', 'TRACKNUMBER', 'GENRE', 'DATE', 'DESCRIPTION', 'COMMENT');		for ($i = 0; $i < $CommentsCount; $i++) {			$ThisFileInfo['ogg']['comments_raw'][$i]['dataoffset'] = $CommentStartOffset + $commentdataoffset;			if (ftell($fd) < ($ThisFileInfo['ogg']['comments_raw'][$i]['dataoffset'] + 4)) {				$VorbisCommentPage++;				$oggpageinfo = getid3_ogg::ParseOggPageHeader($fd);				$ThisFileInfo['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo;				// First, save what we haven't read yet				$AsYetUnusedData = substr($commentdata, $commentdataoffset);				// Then take that data off the end				$commentdata     = substr($commentdata, 0, $commentdataoffset);				// Add [headerlength] bytes of dummy data for the Ogg Page Header, just to keep absolute offsets correct				$commentdata .= str_repeat("\x00", 27 + $ThisFileInfo['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']);				$commentdataoffset += (27 + $ThisFileInfo['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']);				// Finally, stick the unused data back on the end				$commentdata .= $AsYetUnusedData;				//$commentdata .= fread($fd, $ThisFileInfo['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length']);				$commentdata .= fread($fd, getid3_ogg::OggPageSegmentLength($ThisFileInfo['ogg']['pageheader'][$VorbisCommentPage], 1));			}			$ThisFileInfo['ogg']['comments_raw'][$i]['size']       = getid3_lib::LittleEndian2Int(substr($commentdata, $commentdataoffset, 4));			// replace avdataoffset with position just after the last vorbiscomment			$ThisFileInfo['avdataoffset'] = $ThisFileInfo['ogg']['comments_raw'][$i]['dataoffset'] + $ThisFileInfo['ogg']['comments_raw'][$i]['size'] + 4;			$commentdataoffset += 4;			while ((strlen($commentdata) - $commentdataoffset) < $ThisFileInfo['ogg']['comments_raw'][$i]['size']) {				if (($ThisFileInfo['ogg']['comments_raw'][$i]['size'] > $ThisFileInfo['avdataend']) || ($ThisFileInfo['ogg']['comments_raw'][$i]['size'] < 0)) {					$ThisFileInfo['error'][] = 'Invalid Ogg comment size (comment #'.$i.', claims to be '.number_format($ThisFileInfo['ogg']['comments_raw'][$i]['size']).' bytes) - aborting reading comments';					break 2;				}				$VorbisCommentPage++;				$oggpageinfo = getid3_ogg::ParseOggPageHeader($fd);				$ThisFileInfo['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo;				// First, save what we haven't read yet				$AsYetUnusedData = substr($commentdata, $commentdataoffset);				// Then take that data off the end				$commentdata     = substr($commentdata, 0, $commentdataoffset);				// Add [headerlength] bytes of dummy data for the Ogg Page Header, just to keep absolute offsets correct				$commentdata .= str_repeat("\x00", 27 + $ThisFileInfo['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']);				$commentdataoffset += (27 + $ThisFileInfo['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']);				// Finally, stick the unused data back on the end				$commentdata .= $AsYetUnusedData;				//$commentdata .= fread($fd, $ThisFileInfo['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length']);				$commentdata .= fread($fd, getid3_ogg::OggPageSegmentLength($ThisFileInfo['ogg']['pageheader'][$VorbisCommentPage], 1));				//$filebaseoffset += $oggpageinfo['header_end_offset'] - $oggpageinfo['page_start_offset'];			}			$commentstring = substr($commentdata, $commentdataoffset, $ThisFileInfo['ogg']['comments_raw'][$i]['size']);			$commentdataoffset += $ThisFileInfo['ogg']['comments_raw'][$i]['size'];			if (!$commentstring) {				// no comment?				$ThisFileInfo['warning'][] = 'Blank Ogg comment ['.$i.']';			} elseif (strstr($commentstring, '=')) {				$commentexploded = explode('=', $commentstring, 2);				$ThisFileInfo['ogg']['comments_raw'][$i]['key']   = strtoupper($commentexploded[0]);				$ThisFileInfo['ogg']['comments_raw'][$i]['value'] = @$commentexploded[1];				$ThisFileInfo['ogg']['comments_raw'][$i]['data']  = base64_decode($ThisFileInfo['ogg']['comments_raw'][$i]['value']);				$ThisFileInfo['ogg']['comments'][strtolower($ThisFileInfo['ogg']['comments_raw'][$i]['key'])][] = $ThisFileInfo['ogg']['comments_raw'][$i]['value'];				$imagechunkcheck = getid3_lib::GetDataImageSize($ThisFileInfo['ogg']['comments_raw'][$i]['data']);				$ThisFileInfo['ogg']['comments_raw'][$i]['image_mime'] = getid3_lib::image_type_to_mime_type($imagechunkcheck[2]);				if (!$ThisFileInfo['ogg']['comments_raw'][$i]['image_mime'] || ($ThisFileInfo['ogg']['comments_raw'][$i]['image_mime'] == 'application/octet-stream')) {					unset($ThisFileInfo['ogg']['comments_raw'][$i]['image_mime']);					unset($ThisFileInfo['ogg']['comments_raw'][$i]['data']);				}			} else {				$ThisFileInfo['warning'][] = '[known problem with CDex >= v1.40, < v1.50b7] Invalid Ogg comment name/value pair ['.$i.']: '.$commentstring;			}		}		// Replay Gain Adjustment		// http://privatewww.essex.ac.uk/~djmrob/replaygain/		if (isset($ThisFileInfo['ogg']['comments']) && is_array($ThisFileInfo['ogg']['comments'])) {			foreach ($ThisFileInfo['ogg']['comments'] as $index => $commentvalue) {				switch ($index) {					case 'rg_audiophile':					case 'replaygain_album_gain':						$ThisFileInfo['replay_gain']['album']['adjustment'] = (double) $commentvalue[0];						unset($ThisFileInfo['ogg']['comments'][$index]);						break;					case 'rg_radio':					case 'replaygain_track_gain':						$ThisFileInfo['replay_gain']['track']['adjustment'] = (double) $commentvalue[0];						unset($ThisFileInfo['ogg']['comments'][$index]);						break;					case 'replaygain_album_peak':						$ThisFileInfo['replay_gain']['album']['peak'] = (double) $commentvalue[0];						unset($ThisFileInfo['ogg']['comments'][$index]);						break;					case 'rg_peak':					case 'replaygain_track_peak':						$ThisFileInfo['replay_gain']['track']['peak'] = (double) $commentvalue[0];						unset($ThisFileInfo['ogg']['comments'][$index]);						break;					default:						// do nothing						break;				}			}		}		fseek($fd, $OriginalOffset, SEEK_SET);		return true;	}	function SpeexBandModeLookup($mode) {		static $SpeexBandModeLookup = array();		if (empty($SpeexBandModeLookup)) {			$SpeexBandModeLookup[0] = 'narrow';			$SpeexBandModeLookup[1] = 'wide';			$SpeexBandModeLookup[2] = 'ultra-wide';		}		return (isset($SpeexBandModeLookup[$mode]) ? $SpeexBandModeLookup[$mode] : null);	}	function OggPageSegmentLength($OggInfoArray, $SegmentNumber=1) {		for ($i = 0; $i < $SegmentNumber; $i++) {			$segmentlength = 0;			foreach ($OggInfoArray['segment_table'] as $key => $value) {				$segmentlength += $value;				if ($value < 255) {					break;				}			}		}		return $segmentlength;	}	function get_quality_from_nominal_bitrate($nominal_bitrate) {		// decrease precision		$nominal_bitrate = $nominal_bitrate / 1000;		if ($nominal_bitrate < 128) {			// q-1 to q4			$qval = ($nominal_bitrate - 64) / 16;		} elseif ($nominal_bitrate < 256) {			// q4 to q8			$qval = $nominal_bitrate / 32;		} elseif ($nominal_bitrate < 320) {			// q8 to q9			$qval = ($nominal_bitrate + 256) / 64;		} else {			// q9 to q10			$qval = ($nominal_bitrate + 1300) / 180;		}		//return $qval; // 5.031324		//return intval($qval); // 5		return round($qval, 1); // 5 or 4.9	}}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -