/** * Parses repeat alternative * * @param Song $song * @param integer $measure * * @return integer Number of repeat alternatives */ public function parseRepeatAlternative(Song $song, $measure) { $value = $this->reader->readUnsignedByte(); $repeatAlternative = 0; $existentAlternatives = 0; $headers = $song->getMeasureHeaders(); foreach ($headers as $header) { if ($header->getNumber() == $measure) { break; } if ($header->isRepeatOpen()) { $existentAlternatives = 0; } $existentAlternatives |= $header->getRepeatAlternative(); } for ($i = 0; $i < 8; $i++) { if ($value > $i && ($existentAlternatives & 1 << $i) == 0) { $repeatAlternative |= 1 << $i; } } return $repeatAlternative; }