private function makeEighthNoteBytes(TimeSignature $timeSignature) { $bytes = array(0, 0, 0, 0); if ($timeSignature->getDenominator()->getValue() <= Duration::EIGHTH) { $eighthsInDenominator = intval(Duration::EIGHTH / $timeSignature->getDenominator()->getValue()); $total = $eighthsInDenominator * $timeSignature->getNumerator(); $byteValue = intval($total / 4); $missingValue = $total - 4 * $byteValue; for ($i = 0; $i < count($bytes); $i++) { $bytes[$i] = $byteValue; } if ($missingValue > 0) { $bytes[0] += $missingValue; } } return $bytes; }
private function writeMeasureHeader(MeasureHeader $measure, TimeSignature $timeSignature) { $flags = 0; if ($measure->getNumber() == 1 || $measure->getTimeSignature()->getNumerator() != $timeSignature->getNumerator()) { $flags |= 0x1; } if ($measure->getNumber() == 1 || $measure->getTimeSignature()->getDenominator()->getValue() != $timeSignature->getDenominator()->getValue()) { $flags |= 0x2; } if ($measure->isRepeatOpen()) { $flags |= 0x4; } if ($measure->getRepeatClose() > 0) { $flags |= 0x8; } if ($measure->hasMarker()) { $flags |= 0x20; } $this->writeUnsignedByte($flags); if (($flags & 0x1) != 0) { $this->writeByte($measure->getTimeSignature()->getNumerator()); } if (($flags & 0x2) != 0) { $this->writeByte($measure->getTimeSignature()->getDenominator()->getValue()); } if (($flags & 0x8) != 0) { $this->writeByte($measure->getRepeatClose()); } if (($flags & 0x20) != 0) { $this->writeMarker($measure->getMarker()); } }
public static function timeSignature(TimeSignature $timeSignature) { $message = new MidiMessage(MidiMessage::TYPE_META, MidiMessage::TIME_SIGNATURE_CHANGE); $message->setData(array($timeSignature->getNumerator(), $timeSignature->getDenominator()->getIndex(), 96 / $timeSignature->getDenominator()->getValue(), 8)); return $message; }