$frame_idstring =
substr($parsedFrame['data'
], 0,
$frame_terminatorpos);
if (ord($frame_idstring) === 0
) { $frame_idstring = '';
} $frame_remainingdata =
substr($parsedFrame['data'
],
$frame_terminatorpos +
strlen("\x00"
));
$parsedFrame['description'
] =
$frame_idstring;
$RVA2channelcounter = 0;
while (strlen($frame_remainingdata) >= 5
) { $frame_offset = 0;
$frame_channeltypeid =
ord(substr($frame_remainingdata,
$frame_offset++, 1
));
$parsedFrame[$RVA2channelcounter]['channeltypeid'
] =
$frame_channeltypeid;
$parsedFrame[$RVA2channelcounter]['channeltype'
] =
$this->
RVA2ChannelTypeLookup($frame_channeltypeid);
$parsedFrame[$RVA2channelcounter]['volumeadjust'
] = getid3_lib::
BigEndian2Int(substr($frame_remainingdata,
$frame_offset, 2
), false, true
); // 16-bit signed
$frame_offset += 2;
$parsedFrame[$RVA2channelcounter]['bitspeakvolume'
] =
ord(substr($frame_remainingdata,
$frame_offset++, 1
));
if (($parsedFrame[$RVA2channelcounter]['bitspeakvolume'
] < 1
) || ($parsedFrame[$RVA2channelcounter]['bitspeakvolume'
] > 4
)) { $this->
warning('ID3v2::RVA2 frame['.
$RVA2channelcounter.'] contains invalid '.
$parsedFrame[$RVA2channelcounter]['bitspeakvolume'
].'-byte bits-representing-peak value'
);
break;
} $frame_bytespeakvolume =
ceil($parsedFrame[$RVA2channelcounter]['bitspeakvolume'
] / 8
);
$parsedFrame[$RVA2channelcounter]['peakvolume'
] = getid3_lib::
BigEndian2Int(substr($frame_remainingdata,
$frame_offset,
$frame_bytespeakvolume));
$frame_remainingdata =
substr($frame_remainingdata,
$frame_offset +
$frame_bytespeakvolume);
$RVA2channelcounter++;
}