34 0 =>
"\x7F\xFE\x80\x01",
35 1 =>
"\xFE\x7F\x01\x80",
36 2 =>
"\x1F\xFF\xE8\x00",
37 3 =>
"\xFF\x1F\x00\xE8");
40 $info = &$this->getid3->info;
41 $info[
'fileformat'] =
'dts';
44 $DTSheader = $this->
fread(20);
47 $sync = substr($DTSheader, 0, 4);
48 if (($encoding = array_search(
$sync, self::$syncwords)) !==
false) {
51 $this->readBinDataOffset = 32;
57 $this->readBinDataOffset = 0;
61 unset(
$info[
'fileformat']);
68 for ($word_offset = 0; $word_offset <= strlen($DTSheader); $word_offset += 2) {
93 $info[
'dts'][
'flags'][
'embedded_downmix'] = (bool) $this->
readBinData($fhBS, 1);
99 $info[
'dts'][
'flags'][
'extended_coding'] = (bool) $this->
readBinData($fhBS, 1);
100 $info[
'dts'][
'flags'][
'audio_sync_insertion'] = (bool) $this->
readBinData($fhBS, 1);
102 $info[
'dts'][
'flags'][
'predictor_history'] = (bool) $this->
readBinData($fhBS, 1);
103 if (
$info[
'dts'][
'flags'][
'crc_present']) {
106 $info[
'dts'][
'flags'][
'mri_perfect_reconst'] = (bool) $this->
readBinData($fhBS, 1);
111 $info[
'dts'][
'flags'][
'front_sum_diff'] = (bool) $this->
readBinData($fhBS, 1);
112 $info[
'dts'][
'flags'][
'surround_sum_diff'] = (bool) $this->
readBinData($fhBS, 1);
116 $info[
'dts'][
'bitrate'] = self::bitrateLookup(
$info[
'dts'][
'raw'][
'bitrate']);
117 $info[
'dts'][
'bits_per_sample'] = self::bitPerSampleLookup(
$info[
'dts'][
'raw'][
'bits_per_sample']);
118 $info[
'dts'][
'sample_rate'] = self::sampleRateLookup(
$info[
'dts'][
'raw'][
'sample_frequency']);
119 $info[
'dts'][
'dialog_normalization'] = self::dialogNormalization(
$info[
'dts'][
'raw'][
'dialog_normalization'],
$info[
'dts'][
'raw'][
'encoder_soft_version']);
120 $info[
'dts'][
'flags'][
'lossless'] = ((
$info[
'dts'][
'raw'][
'bitrate'] == 31) ?
true :
false);
121 $info[
'dts'][
'bitrate_mode'] = ((
$info[
'dts'][
'raw'][
'bitrate'] == 30) ?
'vbr' :
'cbr');
122 $info[
'dts'][
'channels'] = self::numChannelsLookup(
$info[
'dts'][
'raw'][
'channel_arrangement']);
123 $info[
'dts'][
'channel_arrangement'] = self::channelArrangementLookup(
$info[
'dts'][
'raw'][
'channel_arrangement']);
125 $info[
'audio'][
'dataformat'] =
'dts';
126 $info[
'audio'][
'lossless'] =
$info[
'dts'][
'flags'][
'lossless'];
127 $info[
'audio'][
'bitrate_mode'] =
$info[
'dts'][
'bitrate_mode'];
128 $info[
'audio'][
'bits_per_sample'] =
$info[
'dts'][
'bits_per_sample'];
129 $info[
'audio'][
'sample_rate'] =
$info[
'dts'][
'sample_rate'];
130 $info[
'audio'][
'channels'] =
$info[
'dts'][
'channels'];
131 $info[
'audio'][
'bitrate'] =
$info[
'dts'][
'bitrate'];
132 if (isset(
$info[
'avdataend']) && !empty(
$info[
'dts'][
'bitrate']) && is_numeric(
$info[
'dts'][
'bitrate'])) {
133 $info[
'playtime_seconds'] = (
$info[
'avdataend'] -
$info[
'avdataoffset']) / (
$info[
'dts'][
'bitrate'] / 8);
134 if (($encoding == 2) || ($encoding == 3)) {
136 $info[
'playtime_seconds'] *= (14 / 16);
143 $data = substr($bin, $this->readBinDataOffset, $length);
144 $this->readBinDataOffset += $length;
146 return bindec(
$data);
150 static $lookup = array(
184 return (isset($lookup[
$index]) ? $lookup[$index] :
false);
188 static $lookup = array(
206 return (isset($lookup[
$index]) ? $lookup[$index] :
false);
210 static $lookup = array(
216 return (isset($lookup[
$index]) ? $lookup[$index] :
false);
258 static $lookup = array(
260 1 =>
'A + B (dual mono)',
261 2 =>
'L + R (stereo)',
262 3 =>
'(L+R) + (L-R) (sum-difference)',
263 4 =>
'LT + RT (left and right total)',
266 7 =>
'C + L + R + S',
267 8 =>
'L + R + SL + SR',
268 9 =>
'C + L + R + SL + SR',
269 10 =>
'CL + CR + L + R + SL + SR',
270 11 =>
'C + L + R+ LR + RR + OV',
271 12 =>
'CF + CR + LF + RF + LR + RR',
272 13 =>
'CL + C + CR + L + R + SL + SR',
273 14 =>
'CL + CR + L + R + SL1 + SL2 + SR1 + SR2',
274 15 =>
'CL + C+ CR + L + R + SL + S + SR',
276 return (isset($lookup[
$index]) ? $lookup[$index] :
'user-defined');
readBinData($bin, $length)
static numChannelsLookup($index)
static $syncwords
Possible syncwords indicating bitstream encoding.
static channelArrangementLookup($index)
static BigEndian2Bin($byteword)
static sampleRateLookup($index)
static bitPerSampleLookup($index)
static bitrateLookup($index)
static dialogNormalization($index, $version)
static PrintHexBytes($string, $hex=true, $spaces=true, $htmlencoding='UTF-8')
fseek($bytes, $whence=SEEK_SET)
const syncword
Default DTS syncword used in native .cpt or .dts formats.
getID3() by James Heinrich info@getid3.org //