ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
getid3_lyrics3 Class Reference

getID3() by James Heinrich info@.nosp@m.geti.nosp@m.d3.or.nosp@m.g // More...

+ Inheritance diagram for getid3_lyrics3:
+ Collaboration diagram for getid3_lyrics3:

Public Member Functions

 getid3_lyrics3 (&$fd, &$ThisFileInfo)
 
 getLyrics3Data (&$ThisFileInfo, &$fd, $endoffset, $version, $length)
 
 Lyrics3Timestamp2Seconds ($rawtimestamp)
 
 Lyrics3LyricsTimestampParse (&$Lyrics3data)
 
 IntString2Bool ($char)
 
 Analyze ()
 
 getLyrics3Data ($endoffset, $version, $length)
 
 Lyrics3Timestamp2Seconds ($rawtimestamp)
 
 Lyrics3LyricsTimestampParse (&$Lyrics3data)
 
 IntString2Bool ($char)
 
- Public Member Functions inherited from getid3_handler
 __construct (getID3 $getid3, $call_module=null)
 
 Analyze ()
 
 AnalyzeString ($string)
 
 setStringMode ($string)
 
 saveAttachment ($name, $offset, $length, $image_mime=null)
 

Additional Inherited Members

- Protected Member Functions inherited from getid3_handler
 ftell ()
 
 fread ($bytes)
 
 fseek ($bytes, $whence=SEEK_SET)
 
 feof ()
 
 isDependencyFor ($module)
 
 error ($text)
 
 warning ($text)
 
 notice ($text)
 
- Protected Attributes inherited from getid3_handler
 $getid3
 
 $data_string_flag = false
 
 $data_string = ''
 
 $data_string_position = 0
 
 $data_string_length = 0
 

Detailed Description

getID3() by James Heinrich info@.nosp@m.geti.nosp@m.d3.or.nosp@m.g //

//

Definition at line 17 of file module.tag.lyrics3.php.

Member Function Documentation

◆ Analyze()

getid3_lyrics3::Analyze ( )

Definition at line 21 of file module.tag.lyrics3.php.

References $info, getid3_handler\fread(), getid3_handler\fseek(), getLyrics3Data(), getid3_lib\IncludeDependency(), and getid3_lib\intValueSupported().

21  {
22  $info = &$this->getid3->info;
23 
24  // http://www.volweb.cz/str/tags.htm
25 
26  if (!getid3_lib::intValueSupported($info['filesize'])) {
27  $info['warning'][] = 'Unable to check for Lyrics3 because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB';
28  return false;
29  }
30 
31  $this->fseek((0 - 128 - 9 - 6), SEEK_END); // end - ID3v1 - "LYRICSEND" - [Lyrics3size]
32  $lyrics3_id3v1 = $this->fread(128 + 9 + 6);
33  $lyrics3lsz = substr($lyrics3_id3v1, 0, 6); // Lyrics3size
34  $lyrics3end = substr($lyrics3_id3v1, 6, 9); // LYRICSEND or LYRICS200
35  $id3v1tag = substr($lyrics3_id3v1, 15, 128); // ID3v1
36 
37  if ($lyrics3end == 'LYRICSEND') {
38  // Lyrics3v1, ID3v1, no APE
39 
40  $lyrics3size = 5100;
41  $lyrics3offset = $info['filesize'] - 128 - $lyrics3size;
42  $lyrics3version = 1;
43 
44  } elseif ($lyrics3end == 'LYRICS200') {
45  // Lyrics3v2, ID3v1, no APE
46 
47  // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'
48  $lyrics3size = $lyrics3lsz + 6 + strlen('LYRICS200');
49  $lyrics3offset = $info['filesize'] - 128 - $lyrics3size;
50  $lyrics3version = 2;
51 
52  } elseif (substr(strrev($lyrics3_id3v1), 0, 9) == strrev('LYRICSEND')) {
53  // Lyrics3v1, no ID3v1, no APE
54 
55  $lyrics3size = 5100;
56  $lyrics3offset = $info['filesize'] - $lyrics3size;
57  $lyrics3version = 1;
58  $lyrics3offset = $info['filesize'] - $lyrics3size;
59 
60  } elseif (substr(strrev($lyrics3_id3v1), 0, 9) == strrev('LYRICS200')) {
61 
62  // Lyrics3v2, no ID3v1, no APE
63 
64  $lyrics3size = strrev(substr(strrev($lyrics3_id3v1), 9, 6)) + 6 + strlen('LYRICS200'); // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'
65  $lyrics3offset = $info['filesize'] - $lyrics3size;
66  $lyrics3version = 2;
67 
68  } else {
69 
70  if (isset($info['ape']['tag_offset_start']) && ($info['ape']['tag_offset_start'] > 15)) {
71 
72  $this->fseek($info['ape']['tag_offset_start'] - 15);
73  $lyrics3lsz = $this->fread(6);
74  $lyrics3end = $this->fread(9);
75 
76  if ($lyrics3end == 'LYRICSEND') {
77  // Lyrics3v1, APE, maybe ID3v1
78 
79  $lyrics3size = 5100;
80  $lyrics3offset = $info['ape']['tag_offset_start'] - $lyrics3size;
81  $info['avdataend'] = $lyrics3offset;
82  $lyrics3version = 1;
83  $info['warning'][] = 'APE tag located after Lyrics3, will probably break Lyrics3 compatability';
84 
85  } elseif ($lyrics3end == 'LYRICS200') {
86  // Lyrics3v2, APE, maybe ID3v1
87 
88  $lyrics3size = $lyrics3lsz + 6 + strlen('LYRICS200'); // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'
89  $lyrics3offset = $info['ape']['tag_offset_start'] - $lyrics3size;
90  $lyrics3version = 2;
91  $info['warning'][] = 'APE tag located after Lyrics3, will probably break Lyrics3 compatability';
92 
93  }
94 
95  }
96 
97  }
98 
99  if (isset($lyrics3offset)) {
100  $info['avdataend'] = $lyrics3offset;
101  $this->getLyrics3Data($lyrics3offset, $lyrics3version, $lyrics3size);
102 
103  if (!isset($info['ape'])) {
104  if (isset($info['lyrics3']['tag_offset_start'])) {
105  $GETID3_ERRORARRAY = &$info['warning'];
106  getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.apetag.php', __FILE__, true);
107  $getid3_temp = new getID3();
108  $getid3_temp->openfile($this->getid3->filename);
109  $getid3_apetag = new getid3_apetag($getid3_temp);
110  $getid3_apetag->overrideendoffset = $info['lyrics3']['tag_offset_start'];
111  $getid3_apetag->Analyze();
112  if (!empty($getid3_temp->info['ape'])) {
113  $info['ape'] = $getid3_temp->info['ape'];
114  }
115  if (!empty($getid3_temp->info['replay_gain'])) {
116  $info['replay_gain'] = $getid3_temp->info['replay_gain'];
117  }
118  unset($getid3_temp, $getid3_apetag);
119  } else {
120  $info['warning'][] = 'Lyrics3 and APE tags appear to have become entangled (most likely due to updating the APE tags with a non-Lyrics3-aware tagger)';
121  }
122  }
123 
124  }
125 
126  return true;
127  }
getID3() by James Heinrich info@getid3.org //
static intValueSupported($num)
Definition: getid3.lib.php:80
$info
Definition: example_052.php:80
fread($bytes)
Definition: getid3.php:1685
fseek($bytes, $whence=SEEK_SET)
Definition: getid3.php:1697
getLyrics3Data(&$ThisFileInfo, &$fd, $endoffset, $version, $length)
IncludeDependency($filename, $sourcefile, $DieOnFailure=false)
+ Here is the call graph for this function:

◆ getid3_lyrics3()

getid3_lyrics3::getid3_lyrics3 ( $fd,
$ThisFileInfo 
)

Definition at line 20 of file module.tag.lyrics3.php.

References getid3_handler\fread(), getid3_handler\fseek(), getLyrics3Data(), and getid3_lib\IncludeDependency().

20  {
21  // http://www.volweb.cz/str/tags.htm
22 
23  fseek($fd, (0 - 128 - 9 - 6), SEEK_END); // end - ID3v1 - LYRICSEND - [Lyrics3size]
24  $lyrics3_id3v1 = fread($fd, 128 + 9 + 6);
25  $lyrics3lsz = substr($lyrics3_id3v1, 0, 6); // Lyrics3size
26  $lyrics3end = substr($lyrics3_id3v1, 6, 9); // LYRICSEND or LYRICS200
27  $id3v1tag = substr($lyrics3_id3v1, 15, 128); // ID3v1
28 
29  if ($lyrics3end == 'LYRICSEND') {
30  // Lyrics3v1, ID3v1, no APE
31 
32  $lyrics3size = 5100;
33  $lyrics3offset = $ThisFileInfo['filesize'] - 128 - $lyrics3size;
34  $lyrics3version = 1;
35 
36  } elseif ($lyrics3end == 'LYRICS200') {
37  // Lyrics3v2, ID3v1, no APE
38 
39  // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'
40  $lyrics3size = $lyrics3lsz + 6 + strlen('LYRICS200');
41  $lyrics3offset = $ThisFileInfo['filesize'] - 128 - $lyrics3size;
42  $lyrics3version = 2;
43 
44  } elseif (substr(strrev($lyrics3_id3v1), 0, 9) == strrev('LYRICSEND')) {
45  // Lyrics3v1, no ID3v1, no APE
46 
47  $lyrics3size = 5100;
48  $lyrics3offset = $ThisFileInfo['filesize'] - $lyrics3size;
49  $lyrics3version = 1;
50  $lyrics3offset = $ThisFileInfo['filesize'] - $lyrics3size;
51 
52  } elseif (substr(strrev($lyrics3_id3v1), 0, 9) == strrev('LYRICS200')) {
53 
54  // Lyrics3v2, no ID3v1, no APE
55 
56  $lyrics3size = strrev(substr(strrev($lyrics3_id3v1), 9, 6)) + 6 + strlen('LYRICS200'); // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'
57  $lyrics3offset = $ThisFileInfo['filesize'] - $lyrics3size;
58  $lyrics3version = 2;
59 
60  } else {
61 
62  if (isset($ThisFileInfo['ape']['tag_offset_start']) && ($ThisFileInfo['ape']['tag_offset_start'] > 15)) {
63 
64  fseek($fd, $ThisFileInfo['ape']['tag_offset_start'] - 15, SEEK_SET);
65  $lyrics3lsz = fread($fd, 6);
66  $lyrics3end = fread($fd, 9);
67 
68  if ($lyrics3end == 'LYRICSEND') {
69  // Lyrics3v1, APE, maybe ID3v1
70 
71  $lyrics3size = 5100;
72  $lyrics3offset = $ThisFileInfo['ape']['tag_offset_start'] - $lyrics3size;
73  $ThisFileInfo['avdataend'] = $lyrics3offset;
74  $lyrics3version = 1;
75  $ThisFileInfo['warning'][] = 'APE tag located after Lyrics3, will probably break Lyrics3 compatability';
76 
77  } elseif ($lyrics3end == 'LYRICS200') {
78  // Lyrics3v2, APE, maybe ID3v1
79 
80  $lyrics3size = $lyrics3lsz + 6 + strlen('LYRICS200'); // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'
81  $lyrics3offset = $ThisFileInfo['ape']['tag_offset_start'] - $lyrics3size;
82  $lyrics3version = 2;
83  $ThisFileInfo['warning'][] = 'APE tag located after Lyrics3, will probably break Lyrics3 compatability';
84 
85  }
86 
87  }
88 
89  }
90 
91  if (isset($lyrics3offset)) {
92  $ThisFileInfo['avdataend'] = $lyrics3offset;
93  $this->getLyrics3Data($ThisFileInfo, $fd, $lyrics3offset, $lyrics3version, $lyrics3size);
94 
95  if (!isset($ThisFileInfo['ape'])) {
96  $GETID3_ERRORARRAY = &$ThisFileInfo['warning'];
97  if (getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.apetag.php', __FILE__, false)) {
98  $tag = new getid3_apetag($fd, $ThisFileInfo, $ThisFileInfo['lyrics3']['tag_offset_start']);
99  }
100  }
101 
102  }
103 
104  return true;
105  }
getID3() by James Heinrich info@getid3.org //
fread($bytes)
Definition: getid3.php:1685
fseek($bytes, $whence=SEEK_SET)
Definition: getid3.php:1697
getLyrics3Data(&$ThisFileInfo, &$fd, $endoffset, $version, $length)
IncludeDependency($filename, $sourcefile, $DieOnFailure=false)
+ Here is the call graph for this function:

◆ getLyrics3Data() [1/2]

getid3_lyrics3::getLyrics3Data ( $ThisFileInfo,
$fd,
  $endoffset,
  $version,
  $length 
)

Definition at line 107 of file module.tag.lyrics3.php.

References getid3_handler\fread(), getid3_handler\fseek(), IntString2Bool(), Lyrics3LyricsTimestampParse(), and Lyrics3Timestamp2Seconds().

Referenced by Analyze(), and getid3_lyrics3().

107  {
108  // http://www.volweb.cz/str/tags.htm
109 
110  fseek($fd, $endoffset, SEEK_SET);
111  if ($length <= 0) {
112  return false;
113  }
114  $rawdata = fread($fd, $length);
115 
116  if (substr($rawdata, 0, 11) != 'LYRICSBEGIN') {
117  if (strpos($rawdata, 'LYRICSBEGIN') !== false) {
118 
119  $ThisFileInfo['warning'][] = '"LYRICSBEGIN" expected at '.$endoffset.' but actually found at '.($endoffset + strpos($rawdata, 'LYRICSBEGIN')).' - this is invalid for Lyrics3 v'.$version;
120  $ThisFileInfo['avdataend'] = $endoffset + strpos($rawdata, 'LYRICSBEGIN');
121  $ParsedLyrics3['tag_offset_start'] = $ThisFileInfo['avdataend'];
122  $rawdata = substr($rawdata, strpos($rawdata, 'LYRICSBEGIN'));
123  $length = strlen($rawdata);
124 
125  } else {
126 
127  $ThisFileInfo['error'][] = '"LYRICSBEGIN" expected at '.$endoffset.' but found "'.substr($rawdata, 0, 11).'" instead';
128  return false;
129 
130  }
131 
132  }
133 
134  $ParsedLyrics3['raw']['lyrics3version'] = $version;
135  $ParsedLyrics3['raw']['lyrics3tagsize'] = $length;
136  $ParsedLyrics3['tag_offset_start'] = $endoffset;
137  $ParsedLyrics3['tag_offset_end'] = $endoffset + $length;
138 
139  switch ($version) {
140 
141  case 1:
142  if (substr($rawdata, strlen($rawdata) - 9, 9) == 'LYRICSEND') {
143  $ParsedLyrics3['raw']['LYR'] = trim(substr($rawdata, 11, strlen($rawdata) - 11 - 9));
144  $this->Lyrics3LyricsTimestampParse($ParsedLyrics3);
145  } else {
146  $ThisFileInfo['error'][] = '"LYRICSEND" expected at '.(ftell($fd) - 11 + $length - 9).' but found "'.substr($rawdata, strlen($rawdata) - 9, 9).'" instead';
147  return false;
148  }
149  break;
150 
151  case 2:
152  if (substr($rawdata, strlen($rawdata) - 9, 9) == 'LYRICS200') {
153  $ParsedLyrics3['raw']['unparsed'] = substr($rawdata, 11, strlen($rawdata) - 11 - 9 - 6); // LYRICSBEGIN + LYRICS200 + LSZ
154  $rawdata = $ParsedLyrics3['raw']['unparsed'];
155  while (strlen($rawdata) > 0) {
156  $fieldname = substr($rawdata, 0, 3);
157  $fieldsize = (int) substr($rawdata, 3, 5);
158  $ParsedLyrics3['raw'][$fieldname] = substr($rawdata, 8, $fieldsize);
159  $rawdata = substr($rawdata, 3 + 5 + $fieldsize);
160  }
161 
162  if (isset($ParsedLyrics3['raw']['IND'])) {
163  $i = 0;
164  $flagnames = array('lyrics', 'timestamps', 'inhibitrandom');
165  foreach ($flagnames as $flagname) {
166  if (strlen($ParsedLyrics3['raw']['IND']) > ++$i) {
167  $ParsedLyrics3['flags'][$flagname] = $this->IntString2Bool(substr($ParsedLyrics3['raw']['IND'], $i, 1));
168  }
169  }
170  }
171 
172  $fieldnametranslation = array('ETT'=>'title', 'EAR'=>'artist', 'EAL'=>'album', 'INF'=>'comment', 'AUT'=>'author');
173  foreach ($fieldnametranslation as $key => $value) {
174  if (isset($ParsedLyrics3['raw'][$key])) {
175  $ParsedLyrics3['comments'][$value][] = trim($ParsedLyrics3['raw'][$key]);
176  }
177  }
178 
179  if (isset($ParsedLyrics3['raw']['IMG'])) {
180  $imagestrings = explode("\r\n", $ParsedLyrics3['raw']['IMG']);
181  foreach ($imagestrings as $key => $imagestring) {
182  if (strpos($imagestring, '||') !== false) {
183  $imagearray = explode('||', $imagestring);
184  $ParsedLyrics3['images'][$key]['filename'] = $imagearray[0];
185  $ParsedLyrics3['images'][$key]['description'] = $imagearray[1];
186  $ParsedLyrics3['images'][$key]['timestamp'] = $this->Lyrics3Timestamp2Seconds($imagearray[2]);
187  }
188  }
189  }
190  if (isset($ParsedLyrics3['raw']['LYR'])) {
191  $this->Lyrics3LyricsTimestampParse($ParsedLyrics3);
192  }
193  } else {
194  $ThisFileInfo['error'][] = '"LYRICS200" expected at '.(ftell($fd) - 11 + $length - 9).' but found "'.substr($rawdata, strlen($rawdata) - 9, 9).'" instead';
195  return false;
196  }
197  break;
198 
199  default:
200  $ThisFileInfo['error'][] = 'Cannot process Lyrics3 version '.$version.' (only v1 and v2)';
201  return false;
202  break;
203  }
204 
205 
206  if (isset($ThisFileInfo['id3v1']['tag_offset_start']) && ($ThisFileInfo['id3v1']['tag_offset_start'] < $ParsedLyrics3['tag_offset_end'])) {
207  $ThisFileInfo['warning'][] = 'ID3v1 tag information ignored since it appears to be a false synch in Lyrics3 tag data';
208  unset($ThisFileInfo['id3v1']);
209  foreach ($ThisFileInfo['warning'] as $key => $value) {
210  if ($value == 'Some ID3v1 fields do not use NULL characters for padding') {
211  unset($ThisFileInfo['warning'][$key]);
212  sort($ThisFileInfo['warning']);
213  break;
214  }
215  }
216  }
217 
218  $ThisFileInfo['lyrics3'] = $ParsedLyrics3;
219 
220  return true;
221  }
Lyrics3LyricsTimestampParse(&$Lyrics3data)
Lyrics3Timestamp2Seconds($rawtimestamp)
fread($bytes)
Definition: getid3.php:1685
fseek($bytes, $whence=SEEK_SET)
Definition: getid3.php:1697
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getLyrics3Data() [2/2]

getid3_lyrics3::getLyrics3Data (   $endoffset,
  $version,
  $length 
)

Definition at line 129 of file module.tag.lyrics3.php.

References $info, getid3_handler\fread(), getid3_handler\fseek(), IntString2Bool(), getid3_lib\intValueSupported(), Lyrics3LyricsTimestampParse(), and Lyrics3Timestamp2Seconds().

129  {
130  // http://www.volweb.cz/str/tags.htm
131 
132  $info = &$this->getid3->info;
133 
134  if (!getid3_lib::intValueSupported($endoffset)) {
135  $info['warning'][] = 'Unable to check for Lyrics3 because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB';
136  return false;
137  }
138 
139  $this->fseek($endoffset);
140  if ($length <= 0) {
141  return false;
142  }
143  $rawdata = $this->fread($length);
144 
145  $ParsedLyrics3['raw']['lyrics3version'] = $version;
146  $ParsedLyrics3['raw']['lyrics3tagsize'] = $length;
147  $ParsedLyrics3['tag_offset_start'] = $endoffset;
148  $ParsedLyrics3['tag_offset_end'] = $endoffset + $length - 1;
149 
150  if (substr($rawdata, 0, 11) != 'LYRICSBEGIN') {
151  if (strpos($rawdata, 'LYRICSBEGIN') !== false) {
152 
153  $info['warning'][] = '"LYRICSBEGIN" expected at '.$endoffset.' but actually found at '.($endoffset + strpos($rawdata, 'LYRICSBEGIN')).' - this is invalid for Lyrics3 v'.$version;
154  $info['avdataend'] = $endoffset + strpos($rawdata, 'LYRICSBEGIN');
155  $rawdata = substr($rawdata, strpos($rawdata, 'LYRICSBEGIN'));
156  $length = strlen($rawdata);
157  $ParsedLyrics3['tag_offset_start'] = $info['avdataend'];
158  $ParsedLyrics3['raw']['lyrics3tagsize'] = $length;
159 
160  } else {
161 
162  $info['error'][] = '"LYRICSBEGIN" expected at '.$endoffset.' but found "'.substr($rawdata, 0, 11).'" instead';
163  return false;
164 
165  }
166 
167  }
168 
169  switch ($version) {
170 
171  case 1:
172  if (substr($rawdata, strlen($rawdata) - 9, 9) == 'LYRICSEND') {
173  $ParsedLyrics3['raw']['LYR'] = trim(substr($rawdata, 11, strlen($rawdata) - 11 - 9));
174  $this->Lyrics3LyricsTimestampParse($ParsedLyrics3);
175  } else {
176  $info['error'][] = '"LYRICSEND" expected at '.($this->ftell() - 11 + $length - 9).' but found "'.substr($rawdata, strlen($rawdata) - 9, 9).'" instead';
177  return false;
178  }
179  break;
180 
181  case 2:
182  if (substr($rawdata, strlen($rawdata) - 9, 9) == 'LYRICS200') {
183  $ParsedLyrics3['raw']['unparsed'] = substr($rawdata, 11, strlen($rawdata) - 11 - 9 - 6); // LYRICSBEGIN + LYRICS200 + LSZ
184  $rawdata = $ParsedLyrics3['raw']['unparsed'];
185  while (strlen($rawdata) > 0) {
186  $fieldname = substr($rawdata, 0, 3);
187  $fieldsize = (int) substr($rawdata, 3, 5);
188  $ParsedLyrics3['raw'][$fieldname] = substr($rawdata, 8, $fieldsize);
189  $rawdata = substr($rawdata, 3 + 5 + $fieldsize);
190  }
191 
192  if (isset($ParsedLyrics3['raw']['IND'])) {
193  $i = 0;
194  $flagnames = array('lyrics', 'timestamps', 'inhibitrandom');
195  foreach ($flagnames as $flagname) {
196  if (strlen($ParsedLyrics3['raw']['IND']) > $i++) {
197  $ParsedLyrics3['flags'][$flagname] = $this->IntString2Bool(substr($ParsedLyrics3['raw']['IND'], $i, 1 - 1));
198  }
199  }
200  }
201 
202  $fieldnametranslation = array('ETT'=>'title', 'EAR'=>'artist', 'EAL'=>'album', 'INF'=>'comment', 'AUT'=>'author');
203  foreach ($fieldnametranslation as $key => $value) {
204  if (isset($ParsedLyrics3['raw'][$key])) {
205  $ParsedLyrics3['comments'][$value][] = trim($ParsedLyrics3['raw'][$key]);
206  }
207  }
208 
209  if (isset($ParsedLyrics3['raw']['IMG'])) {
210  $imagestrings = explode("\r\n", $ParsedLyrics3['raw']['IMG']);
211  foreach ($imagestrings as $key => $imagestring) {
212  if (strpos($imagestring, '||') !== false) {
213  $imagearray = explode('||', $imagestring);
214  $ParsedLyrics3['images'][$key]['filename'] = (isset($imagearray[0]) ? $imagearray[0] : '');
215  $ParsedLyrics3['images'][$key]['description'] = (isset($imagearray[1]) ? $imagearray[1] : '');
216  $ParsedLyrics3['images'][$key]['timestamp'] = $this->Lyrics3Timestamp2Seconds(isset($imagearray[2]) ? $imagearray[2] : '');
217  }
218  }
219  }
220  if (isset($ParsedLyrics3['raw']['LYR'])) {
221  $this->Lyrics3LyricsTimestampParse($ParsedLyrics3);
222  }
223  } else {
224  $info['error'][] = '"LYRICS200" expected at '.($this->ftell() - 11 + $length - 9).' but found "'.substr($rawdata, strlen($rawdata) - 9, 9).'" instead';
225  return false;
226  }
227  break;
228 
229  default:
230  $info['error'][] = 'Cannot process Lyrics3 version '.$version.' (only v1 and v2)';
231  return false;
232  break;
233  }
234 
235 
236  if (isset($info['id3v1']['tag_offset_start']) && ($info['id3v1']['tag_offset_start'] <= $ParsedLyrics3['tag_offset_end'])) {
237  $info['warning'][] = 'ID3v1 tag information ignored since it appears to be a false synch in Lyrics3 tag data';
238  unset($info['id3v1']);
239  foreach ($info['warning'] as $key => $value) {
240  if ($value == 'Some ID3v1 fields do not use NULL characters for padding') {
241  unset($info['warning'][$key]);
242  sort($info['warning']);
243  break;
244  }
245  }
246  }
247 
248  $info['lyrics3'] = $ParsedLyrics3;
249 
250  return true;
251  }
static intValueSupported($num)
Definition: getid3.lib.php:80
Lyrics3LyricsTimestampParse(&$Lyrics3data)
Lyrics3Timestamp2Seconds($rawtimestamp)
$info
Definition: example_052.php:80
fread($bytes)
Definition: getid3.php:1685
fseek($bytes, $whence=SEEK_SET)
Definition: getid3.php:1697
+ Here is the call graph for this function:

◆ IntString2Bool() [1/2]

getid3_lyrics3::IntString2Bool (   $char)

Definition at line 260 of file module.tag.lyrics3.php.

Referenced by getLyrics3Data().

260  {
261  if ($char == '1') {
262  return true;
263  } elseif ($char == '0') {
264  return false;
265  }
266  return null;
267  }
+ Here is the caller graph for this function:

◆ IntString2Bool() [2/2]

getid3_lyrics3::IntString2Bool (   $char)

Definition at line 290 of file module.tag.lyrics3.php.

290  {
291  if ($char == '1') {
292  return true;
293  } elseif ($char == '0') {
294  return false;
295  }
296  return null;
297  }

◆ Lyrics3LyricsTimestampParse() [1/2]

getid3_lyrics3::Lyrics3LyricsTimestampParse ( $Lyrics3data)

Definition at line 230 of file module.tag.lyrics3.php.

References $timestamp, and Lyrics3Timestamp2Seconds().

Referenced by getLyrics3Data().

230  {
231  $lyricsarray = explode("\r\n", $Lyrics3data['raw']['LYR']);
232  foreach ($lyricsarray as $key => $lyricline) {
233  $regs = array();
234  unset($thislinetimestamps);
235  while (ereg('^(\\[[0-9]{2}:[0-9]{2}\\])', $lyricline, $regs)) {
236  $thislinetimestamps[] = $this->Lyrics3Timestamp2Seconds($regs[0]);
237  $lyricline = str_replace($regs[0], '', $lyricline);
238  }
239  $notimestamplyricsarray[$key] = $lyricline;
240  if (isset($thislinetimestamps) && is_array($thislinetimestamps)) {
241  sort($thislinetimestamps);
242  foreach ($thislinetimestamps as $timestampkey => $timestamp) {
243  if (isset($Lyrics3data['synchedlyrics'][$timestamp])) {
244  // timestamps only have a 1-second resolution, it's possible that multiple lines
245  // could have the same timestamp, if so, append
246  $Lyrics3data['synchedlyrics'][$timestamp] .= "\r\n".$lyricline;
247  } else {
248  $Lyrics3data['synchedlyrics'][$timestamp] = $lyricline;
249  }
250  }
251  }
252  }
253  $Lyrics3data['unsynchedlyrics'] = implode("\r\n", $notimestamplyricsarray);
254  if (isset($Lyrics3data['synchedlyrics']) && is_array($Lyrics3data['synchedlyrics'])) {
255  ksort($Lyrics3data['synchedlyrics']);
256  }
257  return true;
258  }
Lyrics3Timestamp2Seconds($rawtimestamp)
foreach($mandatory_scripts as $file) $timestamp
Definition: buildRTE.php:81
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Lyrics3LyricsTimestampParse() [2/2]

getid3_lyrics3::Lyrics3LyricsTimestampParse ( $Lyrics3data)

Definition at line 260 of file module.tag.lyrics3.php.

References $timestamp, and Lyrics3Timestamp2Seconds().

260  {
261  $lyricsarray = explode("\r\n", $Lyrics3data['raw']['LYR']);
262  foreach ($lyricsarray as $key => $lyricline) {
263  $regs = array();
264  unset($thislinetimestamps);
265  while (preg_match('#^(\\[[0-9]{2}:[0-9]{2}\\])#', $lyricline, $regs)) {
266  $thislinetimestamps[] = $this->Lyrics3Timestamp2Seconds($regs[0]);
267  $lyricline = str_replace($regs[0], '', $lyricline);
268  }
269  $notimestamplyricsarray[$key] = $lyricline;
270  if (isset($thislinetimestamps) && is_array($thislinetimestamps)) {
271  sort($thislinetimestamps);
272  foreach ($thislinetimestamps as $timestampkey => $timestamp) {
273  if (isset($Lyrics3data['synchedlyrics'][$timestamp])) {
274  // timestamps only have a 1-second resolution, it's possible that multiple lines
275  // could have the same timestamp, if so, append
276  $Lyrics3data['synchedlyrics'][$timestamp] .= "\r\n".$lyricline;
277  } else {
278  $Lyrics3data['synchedlyrics'][$timestamp] = $lyricline;
279  }
280  }
281  }
282  }
283  $Lyrics3data['unsynchedlyrics'] = implode("\r\n", $notimestamplyricsarray);
284  if (isset($Lyrics3data['synchedlyrics']) && is_array($Lyrics3data['synchedlyrics'])) {
285  ksort($Lyrics3data['synchedlyrics']);
286  }
287  return true;
288  }
Lyrics3Timestamp2Seconds($rawtimestamp)
foreach($mandatory_scripts as $file) $timestamp
Definition: buildRTE.php:81
+ Here is the call graph for this function:

◆ Lyrics3Timestamp2Seconds() [1/2]

getid3_lyrics3::Lyrics3Timestamp2Seconds (   $rawtimestamp)

Definition at line 223 of file module.tag.lyrics3.php.

Referenced by getLyrics3Data(), and Lyrics3LyricsTimestampParse().

223  {
224  if (ereg('^\\[([0-9]{2}):([0-9]{2})\\]$', $rawtimestamp, $regs)) {
225  return (int) (($regs[1] * 60) + $regs[2]);
226  }
227  return false;
228  }
+ Here is the caller graph for this function:

◆ Lyrics3Timestamp2Seconds() [2/2]

getid3_lyrics3::Lyrics3Timestamp2Seconds (   $rawtimestamp)

Definition at line 253 of file module.tag.lyrics3.php.

253  {
254  if (preg_match('#^\\[([0-9]{2}):([0-9]{2})\\]$#', $rawtimestamp, $regs)) {
255  return (int) (($regs[1] * 60) + $regs[2]);
256  }
257  return false;
258  }

The documentation for this class was generated from the following file: