39 $info = &$this->getid3->info;
41 $info[
'fileformat'] =
'real';
43 $info[
'playtime_seconds'] = 0;
45 fseek($this->getid3->fp,
$info[
'avdataoffset'], SEEK_SET);
47 while (
ftell($this->getid3->fp) <
$info[
'avdataend']) {
48 $ChunkData =
fread($this->getid3->fp, 8);
49 $ChunkName = substr($ChunkData, 0, 4);
52 if ($ChunkName ==
'.ra'.
"\xFD") {
53 $ChunkData .=
fread($this->getid3->fp, $ChunkSize - 8);
55 $info[
'audio'][
'dataformat'] =
'real';
56 $info[
'audio'][
'lossless'] =
false;
57 $info[
'audio'][
'sample_rate'] =
$info[
'real'][
'old_ra_header'][
'sample_rate'];
58 $info[
'audio'][
'bits_per_sample'] =
$info[
'real'][
'old_ra_header'][
'bits_per_sample'];
59 $info[
'audio'][
'channels'] =
$info[
'real'][
'old_ra_header'][
'channels'];
61 $info[
'playtime_seconds'] = 60 * (
$info[
'real'][
'old_ra_header'][
'audio_bytes'] /
$info[
'real'][
'old_ra_header'][
'bytes_per_minute']);
62 $info[
'audio'][
'bitrate'] = 8 * (
$info[
'real'][
'old_ra_header'][
'audio_bytes'] /
$info[
'playtime_seconds']);
65 foreach (
$info[
'real'][
'old_ra_header'][
'comments'] as $key => $valuearray) {
66 if (strlen(trim($valuearray[0])) > 0) {
67 $info[
'real'][
'comments'][$key][] = trim($valuearray[0]);
73 $info[
'error'][] =
'There was a problem parsing this RealAudio file. Please submit it for analysis to info@getid3.org';
74 unset(
$info[
'bitrate']);
75 unset(
$info[
'playtime_seconds']);
81 $info[
'real'][
'chunks'][$ChunkCounter] =
array();
82 $thisfile_real_chunks_currentchunk = &
$info[
'real'][
'chunks'][$ChunkCounter];
84 $thisfile_real_chunks_currentchunk[
'name'] = $ChunkName;
85 $thisfile_real_chunks_currentchunk[
'offset'] =
ftell($this->getid3->fp) - 8;
86 $thisfile_real_chunks_currentchunk[
'length'] = $ChunkSize;
87 if (($thisfile_real_chunks_currentchunk[
'offset'] + $thisfile_real_chunks_currentchunk[
'length']) >
$info[
'avdataend']) {
88 $info[
'warning'][] =
'Chunk "'.$thisfile_real_chunks_currentchunk[
'name'].
'" at offset '.$thisfile_real_chunks_currentchunk[
'offset'].
' claims to be '.$thisfile_real_chunks_currentchunk[
'length'].
' bytes long, which is beyond end of file';
93 if ($ChunkSize > ($this->getid3->fread_buffer_size() + 8)) {
95 $ChunkData .=
fread($this->getid3->fp, $this->getid3->fread_buffer_size() - 8);
96 fseek($this->getid3->fp, $thisfile_real_chunks_currentchunk[
'offset'] + $ChunkSize, SEEK_SET);
98 } elseif (($ChunkSize - 8) > 0) {
100 $ChunkData .=
fread($this->getid3->fp, $ChunkSize - 8);
105 switch ($ChunkName) {
108 $thisfile_real_chunks_currentchunk[
'object_version'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
110 switch ($thisfile_real_chunks_currentchunk[
'object_version']) {
113 $thisfile_real_chunks_currentchunk[
'file_version'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
115 $thisfile_real_chunks_currentchunk[
'headers_count'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
127 $thisfile_real_chunks_currentchunk[
'object_version'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
129 if ($thisfile_real_chunks_currentchunk[
'object_version'] == 0) {
130 $thisfile_real_chunks_currentchunk[
'max_bit_rate'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
132 $thisfile_real_chunks_currentchunk[
'avg_bit_rate'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
134 $thisfile_real_chunks_currentchunk[
'max_packet_size'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
136 $thisfile_real_chunks_currentchunk[
'avg_packet_size'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
138 $thisfile_real_chunks_currentchunk[
'num_packets'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
140 $thisfile_real_chunks_currentchunk[
'duration'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
142 $thisfile_real_chunks_currentchunk[
'preroll'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
144 $thisfile_real_chunks_currentchunk[
'index_offset'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
146 $thisfile_real_chunks_currentchunk[
'data_offset'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
148 $thisfile_real_chunks_currentchunk[
'num_streams'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
150 $thisfile_real_chunks_currentchunk[
'flags_raw'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
152 $info[
'playtime_seconds'] = $thisfile_real_chunks_currentchunk[
'duration'] / 1000;
153 if ($thisfile_real_chunks_currentchunk[
'duration'] > 0) {
154 $info[
'bitrate'] += $thisfile_real_chunks_currentchunk[
'avg_bit_rate'];
156 $thisfile_real_chunks_currentchunk[
'flags'][
'save_enabled'] = (bool) ($thisfile_real_chunks_currentchunk[
'flags_raw'] & 0x0001);
157 $thisfile_real_chunks_currentchunk[
'flags'][
'perfect_play'] = (bool) ($thisfile_real_chunks_currentchunk[
'flags_raw'] & 0x0002);
158 $thisfile_real_chunks_currentchunk[
'flags'][
'live_broadcast'] = (bool) ($thisfile_real_chunks_currentchunk[
'flags_raw'] & 0x0004);
163 $thisfile_real_chunks_currentchunk[
'object_version'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
165 if ($thisfile_real_chunks_currentchunk[
'object_version'] == 0) {
166 $thisfile_real_chunks_currentchunk[
'stream_number'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
168 $thisfile_real_chunks_currentchunk[
'max_bit_rate'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
170 $thisfile_real_chunks_currentchunk[
'avg_bit_rate'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
172 $thisfile_real_chunks_currentchunk[
'max_packet_size'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
174 $thisfile_real_chunks_currentchunk[
'avg_packet_size'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
176 $thisfile_real_chunks_currentchunk[
'start_time'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
178 $thisfile_real_chunks_currentchunk[
'preroll'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
180 $thisfile_real_chunks_currentchunk[
'duration'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
182 $thisfile_real_chunks_currentchunk[
'stream_name_size'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 1));
184 $thisfile_real_chunks_currentchunk[
'stream_name'] = substr($ChunkData, $offset, $thisfile_real_chunks_currentchunk[
'stream_name_size']);
185 $offset += $thisfile_real_chunks_currentchunk[
'stream_name_size'];
186 $thisfile_real_chunks_currentchunk[
'mime_type_size'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 1));
188 $thisfile_real_chunks_currentchunk[
'mime_type'] = substr($ChunkData, $offset, $thisfile_real_chunks_currentchunk[
'mime_type_size']);
189 $offset += $thisfile_real_chunks_currentchunk[
'mime_type_size'];
190 $thisfile_real_chunks_currentchunk[
'type_specific_len'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
192 $thisfile_real_chunks_currentchunk[
'type_specific_data'] = substr($ChunkData, $offset, $thisfile_real_chunks_currentchunk[
'type_specific_len']);
193 $offset += $thisfile_real_chunks_currentchunk[
'type_specific_len'];
196 $thisfile_real_chunks_currentchunk_typespecificdata = &$thisfile_real_chunks_currentchunk[
'type_specific_data'];
198 switch ($thisfile_real_chunks_currentchunk[
'mime_type']) {
199 case 'video/x-pn-realvideo':
200 case 'video/x-pn-multirate-realvideo':
204 $thisfile_real_chunks_currentchunk[
'video_info'] =
array();
205 $thisfile_real_chunks_currentchunk_videoinfo = &$thisfile_real_chunks_currentchunk[
'video_info'];
207 $thisfile_real_chunks_currentchunk_videoinfo[
'dwSize'] =
Helper::BigEndian2Int(substr($thisfile_real_chunks_currentchunk_typespecificdata, 0, 4));
208 $thisfile_real_chunks_currentchunk_videoinfo[
'fourcc1'] = substr($thisfile_real_chunks_currentchunk_typespecificdata, 4, 4);
209 $thisfile_real_chunks_currentchunk_videoinfo[
'fourcc2'] = substr($thisfile_real_chunks_currentchunk_typespecificdata, 8, 4);
210 $thisfile_real_chunks_currentchunk_videoinfo[
'width'] =
Helper::BigEndian2Int(substr($thisfile_real_chunks_currentchunk_typespecificdata, 12, 2));
211 $thisfile_real_chunks_currentchunk_videoinfo[
'height'] =
Helper::BigEndian2Int(substr($thisfile_real_chunks_currentchunk_typespecificdata, 14, 2));
212 $thisfile_real_chunks_currentchunk_videoinfo[
'bits_per_sample'] =
Helper::BigEndian2Int(substr($thisfile_real_chunks_currentchunk_typespecificdata, 16, 2));
215 $thisfile_real_chunks_currentchunk_videoinfo[
'frames_per_second'] =
Helper::BigEndian2Int(substr($thisfile_real_chunks_currentchunk_typespecificdata, 22, 2));
224 $thisfile_real_chunks_currentchunk_videoinfo[
'codec'] =
Riff::RIFFfourccLookup($thisfile_real_chunks_currentchunk_videoinfo[
'fourcc2']);
226 $info[
'video'][
'resolution_x'] = $thisfile_real_chunks_currentchunk_videoinfo[
'width'];
227 $info[
'video'][
'resolution_y'] = $thisfile_real_chunks_currentchunk_videoinfo[
'height'];
228 $info[
'video'][
'frame_rate'] = (float) $thisfile_real_chunks_currentchunk_videoinfo[
'frames_per_second'];
229 $info[
'video'][
'codec'] = $thisfile_real_chunks_currentchunk_videoinfo[
'codec'];
230 $info[
'video'][
'bits_per_sample'] = $thisfile_real_chunks_currentchunk_videoinfo[
'bits_per_sample'];
233 case 'audio/x-pn-realaudio':
234 case 'audio/x-pn-multirate-realaudio':
235 $this->
ParseOldRAheader($thisfile_real_chunks_currentchunk_typespecificdata, $thisfile_real_chunks_currentchunk[
'parsed_audio_data']);
237 $info[
'audio'][
'sample_rate'] = $thisfile_real_chunks_currentchunk[
'parsed_audio_data'][
'sample_rate'];
238 $info[
'audio'][
'bits_per_sample'] = $thisfile_real_chunks_currentchunk[
'parsed_audio_data'][
'bits_per_sample'];
239 $info[
'audio'][
'channels'] = $thisfile_real_chunks_currentchunk[
'parsed_audio_data'][
'channels'];
240 if (!empty(
$info[
'audio'][
'dataformat'])) {
241 foreach (
$info[
'audio'] as $key => $value) {
242 if ($key !=
'streams') {
243 $info[
'audio'][
'streams'][$thisfile_real_chunks_currentchunk[
'stream_number']][$key] = $value;
249 case 'logical-fileinfo':
251 $thisfile_real_chunks_currentchunk[
'logical_fileinfo'] =
array();
252 $thisfile_real_chunks_currentchunk_logicalfileinfo = &$thisfile_real_chunks_currentchunk[
'logical_fileinfo'];
254 $thisfile_real_chunks_currentchunk_logicalfileinfo_offset = 0;
255 $thisfile_real_chunks_currentchunk_logicalfileinfo[
'logical_fileinfo_length'] =
Helper::BigEndian2Int(substr($thisfile_real_chunks_currentchunk_typespecificdata, $thisfile_real_chunks_currentchunk_logicalfileinfo_offset, 4));
256 $thisfile_real_chunks_currentchunk_logicalfileinfo_offset += 4;
259 $thisfile_real_chunks_currentchunk_logicalfileinfo_offset += 4;
261 $thisfile_real_chunks_currentchunk_logicalfileinfo[
'num_tags'] =
Helper::BigEndian2Int(substr($thisfile_real_chunks_currentchunk_typespecificdata, $thisfile_real_chunks_currentchunk_logicalfileinfo_offset, 4));
262 $thisfile_real_chunks_currentchunk_logicalfileinfo_offset += 4;
265 $thisfile_real_chunks_currentchunk_logicalfileinfo_offset += 4;
278 if (empty(
$info[
'playtime_seconds'])) {
279 $info[
'playtime_seconds'] = max(
$info[
'playtime_seconds'], ($thisfile_real_chunks_currentchunk[
'duration'] + $thisfile_real_chunks_currentchunk[
'start_time']) / 1000);
281 if ($thisfile_real_chunks_currentchunk[
'duration'] > 0) {
282 switch ($thisfile_real_chunks_currentchunk[
'mime_type']) {
283 case 'audio/x-pn-realaudio':
284 case 'audio/x-pn-multirate-realaudio':
285 $info[
'audio'][
'bitrate'] = (isset(
$info[
'audio'][
'bitrate']) ?
$info[
'audio'][
'bitrate'] : 0) + $thisfile_real_chunks_currentchunk[
'avg_bit_rate'];
287 $info[
'audio'][
'dataformat'] =
'real';
288 $info[
'audio'][
'lossless'] =
false;
291 case 'video/x-pn-realvideo':
292 case 'video/x-pn-multirate-realvideo':
293 $info[
'video'][
'bitrate'] = (isset(
$info[
'video'][
'bitrate']) ?
$info[
'video'][
'bitrate'] : 0) + $thisfile_real_chunks_currentchunk[
'avg_bit_rate'];
294 $info[
'video'][
'bitrate_mode'] =
'cbr';
295 $info[
'video'][
'dataformat'] =
'real';
296 $info[
'video'][
'lossless'] =
false;
297 $info[
'video'][
'pixel_aspect_ratio'] = (float) 1;
300 case 'audio/x-ralf-mpeg4-generic':
301 $info[
'audio'][
'bitrate'] = (isset(
$info[
'audio'][
'bitrate']) ?
$info[
'audio'][
'bitrate'] : 0) + $thisfile_real_chunks_currentchunk[
'avg_bit_rate'];
302 $info[
'audio'][
'codec'] =
'RealAudio Lossless';
303 $info[
'audio'][
'dataformat'] =
'real';
304 $info[
'audio'][
'lossless'] =
true;
307 $info[
'bitrate'] = (isset(
$info[
'video'][
'bitrate']) ?
$info[
'video'][
'bitrate'] : 0) + (isset(
$info[
'audio'][
'bitrate']) ?
$info[
'audio'][
'bitrate'] : 0);
313 $thisfile_real_chunks_currentchunk[
'object_version'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
315 if ($thisfile_real_chunks_currentchunk[
'object_version'] == 0) {
316 $thisfile_real_chunks_currentchunk[
'title_len'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
318 $thisfile_real_chunks_currentchunk[
'title'] = (
string) substr($ChunkData, $offset, $thisfile_real_chunks_currentchunk[
'title_len']);
319 $offset += $thisfile_real_chunks_currentchunk[
'title_len'];
321 $thisfile_real_chunks_currentchunk[
'artist_len'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
323 $thisfile_real_chunks_currentchunk[
'artist'] = (
string) substr($ChunkData, $offset, $thisfile_real_chunks_currentchunk[
'artist_len']);
324 $offset += $thisfile_real_chunks_currentchunk[
'artist_len'];
326 $thisfile_real_chunks_currentchunk[
'copyright_len'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
328 $thisfile_real_chunks_currentchunk[
'copyright'] = (
string) substr($ChunkData, $offset, $thisfile_real_chunks_currentchunk[
'copyright_len']);
329 $offset += $thisfile_real_chunks_currentchunk[
'copyright_len'];
331 $thisfile_real_chunks_currentchunk[
'comment_len'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
333 $thisfile_real_chunks_currentchunk[
'comment'] = (
string) substr($ChunkData, $offset, $thisfile_real_chunks_currentchunk[
'comment_len']);
334 $offset += $thisfile_real_chunks_currentchunk[
'comment_len'];
336 $commentkeystocopy =
array(
'title'=>
'title',
'artist'=>
'artist',
'copyright'=>
'copyright',
'comment'=>
'comment');
337 foreach ($commentkeystocopy as $key => $val) {
338 if ($thisfile_real_chunks_currentchunk[$key]) {
339 $info[
'real'][
'comments'][$val][] = trim($thisfile_real_chunks_currentchunk[$key]);
351 $thisfile_real_chunks_currentchunk[
'object_version'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
353 if ($thisfile_real_chunks_currentchunk[
'object_version'] == 0) {
354 $thisfile_real_chunks_currentchunk[
'num_indices'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
356 $thisfile_real_chunks_currentchunk[
'stream_number'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 2));
358 $thisfile_real_chunks_currentchunk[
'next_index_header'] =
Helper::BigEndian2Int(substr($ChunkData, $offset, 4));
361 if ($thisfile_real_chunks_currentchunk[
'next_index_header'] == 0) {
366 fseek($this->getid3->fp, $thisfile_real_chunks_currentchunk[
'next_index_header'], SEEK_SET);
372 $info[
'warning'][] =
'Unhandled RealMedia chunk "'.$ChunkName.
'" at offset '.$thisfile_real_chunks_currentchunk[
'offset'];
378 if (!empty(
$info[
'audio'][
'streams'])) {
379 $info[
'audio'][
'bitrate'] = 0;
380 foreach (
$info[
'audio'][
'streams'] as $key => $valuearray) {
381 $info[
'audio'][
'bitrate'] += $valuearray[
'bitrate'];
397 $ParsedArray =
array();
398 $ParsedArray[
'magic'] = substr($OldRAheaderData, 0, 4);
399 if ($ParsedArray[
'magic'] !=
'.ra'.
"\xFD") {
404 if ($ParsedArray[
'version1'] < 3) {
407 } elseif ($ParsedArray[
'version1'] == 3) {
409 $ParsedArray[
'fourcc1'] =
'.ra3';
410 $ParsedArray[
'bits_per_sample'] = 16;
411 $ParsedArray[
'sample_rate'] = 8000;
420 $ParsedArray[
'comments_raw'] = substr($OldRAheaderData, 22, $ParsedArray[
'header_size'] - 22 + 1);
424 $ParsedArray[
'comments'][
'title'][] = substr($ParsedArray[
'comments_raw'], $commentoffset, $commentlength);
425 $commentoffset += $commentlength;
428 $ParsedArray[
'comments'][
'artist'][] = substr($ParsedArray[
'comments_raw'], $commentoffset, $commentlength);
429 $commentoffset += $commentlength;
432 $ParsedArray[
'comments'][
'copyright'][] = substr($ParsedArray[
'comments_raw'], $commentoffset, $commentlength);
433 $commentoffset += $commentlength;
437 $ParsedArray[
'fourcc'] = substr($OldRAheaderData, 23 + $commentoffset, 4);
439 } elseif ($ParsedArray[
'version1'] <= 5) {
442 $ParsedArray[
'fourcc1'] = substr($OldRAheaderData, 8, 4);
456 switch ($ParsedArray[
'version1']) {
464 $ParsedArray[
'fourcc2'] = substr($OldRAheaderData, 57, 4);
466 $ParsedArray[
'fourcc3'] = substr($OldRAheaderData, 62, 4);
469 $ParsedArray[
'comments_raw'] = substr($OldRAheaderData, 69, $ParsedArray[
'header_size'] - 69 + 16);
473 $ParsedArray[
'comments'][
'title'][] = substr($ParsedArray[
'comments_raw'], $commentoffset, $commentlength);
474 $commentoffset += $commentlength;
477 $ParsedArray[
'comments'][
'artist'][] = substr($ParsedArray[
'comments_raw'], $commentoffset, $commentlength);
478 $commentoffset += $commentlength;
481 $ParsedArray[
'comments'][
'copyright'][] = substr($ParsedArray[
'comments_raw'], $commentoffset, $commentlength);
482 $commentoffset += $commentlength;
490 $ParsedArray[
'genr'] = substr($OldRAheaderData, 62, 4);
491 $ParsedArray[
'fourcc3'] = substr($OldRAheaderData, 66, 4);
492 $ParsedArray[
'comments'] =
array();
495 $ParsedArray[
'fourcc'] = $ParsedArray[
'fourcc3'];
498 foreach ($ParsedArray[
'comments'] as $key => $value) {
499 if ($ParsedArray[
'comments'][$key][0] ===
false) {
500 $ParsedArray[
'comments'][$key][0] =
'';
518 static $RealAudioCodecFourCClookup =
array();
519 if (empty($RealAudioCodecFourCClookup)) {
521 $RealAudioCodecFourCClookup[
'14_4'][8000] =
'RealAudio v2 (14.4kbps)';
522 $RealAudioCodecFourCClookup[
'14.4'][8000] =
'RealAudio v2 (14.4kbps)';
523 $RealAudioCodecFourCClookup[
'lpcJ'][8000] =
'RealAudio v2 (14.4kbps)';
524 $RealAudioCodecFourCClookup[
'28_8'][15200] =
'RealAudio v2 (28.8kbps)';
525 $RealAudioCodecFourCClookup[
'28.8'][15200] =
'RealAudio v2 (28.8kbps)';
526 $RealAudioCodecFourCClookup[
'sipr'][4933] =
'RealAudio v4 (5kbps Voice)';
527 $RealAudioCodecFourCClookup[
'sipr'][6444] =
'RealAudio v4 (6.5kbps Voice)';
528 $RealAudioCodecFourCClookup[
'sipr'][8444] =
'RealAudio v4 (8.5kbps Voice)';
529 $RealAudioCodecFourCClookup[
'sipr'][16000] =
'RealAudio v4 (16kbps Wideband)';
530 $RealAudioCodecFourCClookup[
'dnet'][8000] =
'RealAudio v3 (8kbps Music)';
531 $RealAudioCodecFourCClookup[
'dnet'][16000] =
'RealAudio v3 (16kbps Music Low Response)';
532 $RealAudioCodecFourCClookup[
'dnet'][15963] =
'RealAudio v3 (16kbps Music Mid/High Response)';
533 $RealAudioCodecFourCClookup[
'dnet'][20000] =
'RealAudio v3 (20kbps Music Stereo)';
534 $RealAudioCodecFourCClookup[
'dnet'][32000] =
'RealAudio v3 (32kbps Music Mono)';
535 $RealAudioCodecFourCClookup[
'dnet'][31951] =
'RealAudio v3 (32kbps Music Stereo)';
536 $RealAudioCodecFourCClookup[
'dnet'][39965] =
'RealAudio v3 (40kbps Music Mono)';
537 $RealAudioCodecFourCClookup[
'dnet'][40000] =
'RealAudio v3 (40kbps Music Stereo)';
538 $RealAudioCodecFourCClookup[
'dnet'][79947] =
'RealAudio v3 (80kbps Music Mono)';
539 $RealAudioCodecFourCClookup[
'dnet'][80000] =
'RealAudio v3 (80kbps Music Stereo)';
541 $RealAudioCodecFourCClookup[
'dnet'][0] =
'RealAudio v3';
542 $RealAudioCodecFourCClookup[
'sipr'][0] =
'RealAudio v4';
543 $RealAudioCodecFourCClookup[
'cook'][0] =
'RealAudio G2';
544 $RealAudioCodecFourCClookup[
'atrc'][0] =
'RealAudio 8';
546 $roundbitrate = intval(round($bitrate));
547 if (isset($RealAudioCodecFourCClookup[$fourcc][$roundbitrate])) {
548 return $RealAudioCodecFourCClookup[$fourcc][$roundbitrate];
549 } elseif (isset($RealAudioCodecFourCClookup[$fourcc][0])) {
550 return $RealAudioCodecFourCClookup[$fourcc][0];
GetId3() by James Heinrich info@getid3.org //.
Add rich text string
The name of the decorator.
ParseOldRAheader($OldRAheaderData, &$ParsedArray)
static RIFFfourccLookup($fourcc)
fseek($bytes, $whence=SEEK_SET)
GetId3() by James Heinrich info@getid3.org //.
Create styles array
The data for the language used.
static BigEndian2Int($byteword, $synchsafe=false, $signed=false)
RealAudioCodecFourCClookup($fourcc, $bitrate)
array $RealAudioCodecFourCClookup