/** * Reads Duration * * @param byte $flags unsigned bytes * @return Duration */ public function readDuration($flags) { $duration = new Duration(); $duration->setValue(pow(2, $this->reader->readByte() + 4) / 4); $duration->setDotted(($flags & 0x1) != 0); if (($flags & 0x20) != 0) { $divisionType = $this->reader->readInt(); switch ($divisionType) { case 3: $duration->getDivision()->setEnters(3); $duration->getDivision()->setTimes(2); break; case 5: $duration->getDivision()->setEnters(5); $duration->getDivision()->setTimes(4); break; case 6: $duration->getDivision()->setEnters(6); $duration->getDivision()->setTimes(4); break; case 7: $duration->getDivision()->setEnters(7); $duration->getDivision()->setTimes(4); break; case 9: $duration->getDivision()->setEnters(9); $duration->getDivision()->setTimes(8); break; case 10: $duration->getDivision()->setEnters(10); $duration->getDivision()->setTimes(8); break; case 11: $duration->getDivision()->setEnters(11); $duration->getDivision()->setTimes(8); break; case 12: $duration->getDivision()->setEnters(12); $duration->getDivision()->setTimes(8); break; } } return $duration; }