20 {
21
22 $ThisFileInfo['fileformat'] = 'tta';
23 $ThisFileInfo['audio']['dataformat'] = 'tta';
24 $ThisFileInfo['audio']['lossless'] = true;
25 $ThisFileInfo['audio']['bitrate_mode'] = 'vbr';
26
27 fseek($fd, $ThisFileInfo[
'avdataoffset'], SEEK_SET);
28 $ttaheader =
fread($fd, 26);
29
30 $ThisFileInfo['tta']['magic'] = substr($ttaheader, 0, 3);
31 if ($ThisFileInfo['tta']['magic'] != 'TTA') {
32 $ThisFileInfo['error'][] = 'Expecting "TTA" at offset '.$ThisFileInfo['avdataoffset'].', found "'.$ThisFileInfo['tta']['magic'].'"';
33 unset($ThisFileInfo['fileformat']);
34 unset($ThisFileInfo['audio']);
35 unset($ThisFileInfo['tta']);
36 return false;
37 }
38
39 switch ($ttaheader{3}) {
40 case "\x01":
41 case "\x02":
42 case "\x03":
43
44 $ThisFileInfo['tta']['major_version'] = 1;
45 $ThisFileInfo['avdataoffset'] += 16;
46
47 $ThisFileInfo['tta']['compression_level'] = ord($ttaheader{3});
52
53 $ThisFileInfo['audio']['encoder_options'] = '-e'.$ThisFileInfo['tta']['compression_level'];
54 $ThisFileInfo['playtime_seconds'] = $ThisFileInfo['tta']['samples_per_channel'] / $ThisFileInfo['tta']['sample_rate'];
55 break;
56
57 case '2':
58
59 $ThisFileInfo['tta']['major_version'] = 2;
60 $ThisFileInfo['avdataoffset'] += 20;
61
68
69 $ThisFileInfo['audio']['encoder_options'] = '-e'.$ThisFileInfo['tta']['compression_level'];
70 $ThisFileInfo['playtime_seconds'] = $ThisFileInfo['tta']['data_length'] / $ThisFileInfo['tta']['sample_rate'];
71 break;
72
73 case '1':
74
75 $ThisFileInfo['tta']['major_version'] = 3;
76 $ThisFileInfo['avdataoffset'] += 26;
77
83 $ThisFileInfo['tta']['crc32_footer'] = substr($ttaheader, 18, 4);
85
86 $ThisFileInfo['playtime_seconds'] = $ThisFileInfo['tta']['data_length'] / $ThisFileInfo['tta']['sample_rate'];
87 break;
88
89 default:
90 $ThisFileInfo['error'][] = 'This version of getID3() only knows how to handle TTA v1 and v2 - it may not work correctly with this file which appears to be TTA v'.$ttaheader{3};
91 return false;
92 break;
93 }
94
95 $ThisFileInfo['audio']['encoder'] = 'TTA v'.$ThisFileInfo['tta']['major_version'];
96 $ThisFileInfo['audio']['bits_per_sample'] = $ThisFileInfo['tta']['bits_per_sample'];
97 $ThisFileInfo['audio']['sample_rate'] = $ThisFileInfo['tta']['sample_rate'];
98 $ThisFileInfo['audio']['channels'] = $ThisFileInfo['tta']['channels'];
99 $ThisFileInfo['audio']['bitrate'] = (($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset']) * 8) / $ThisFileInfo['playtime_seconds'];
100
101 return true;
102 }