private function getHeader($tick) { $realTick = $tick >= Duration::QUARTER_TIME ? $tick : Duration::QUARTER_TIME; foreach ($this->headers as $header) { if ($realTick >= $header->getStart() && $realTick < $header->getStart() + $header->getLength()) { return $header; } } $last = $this->getLastHeader(); $header = new MeasureHeader(); $header->setNumber($last !== null ? $last->getNumber() + 1 : 1); $header->setStart($last !== null ? $last->getStart() + $last->getLength() : Duration::QUARTER_TIME); $header->getTempo()->setValue($last !== null ? $last->getTempo()->getValue() : 120); if ($last !== null) { $header->getTimeSignature()->copyFrom($last->getTimeSignature()); } else { $header->getTimeSignature()->setNumerator(4); $header->getTimeSignature()->getDenominator()->setValue(Duration::QUARTER); } $this->headers[] = $header; if ($realTick >= $header->getStart() && $realTick < $header->getStart() + $header->getLength()) { return $header; } return $this->getHeader($realTick); }