Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 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());
     }
 }
Ejemplo n.º 3
0
 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;
 }