示例#1
0
 /**
  * Reads a Measure
  * 
  * @param Measure $measure
  * @param Track $track
  * @param Tempo $tempo
  */
 public function readMeasure(Measure $measure, Track $track, Tempo $tempo)
 {
     for ($voice = 0; $voice < 2; $voice++) {
         $nextNoteStart = intval($measure->getStart());
         $numberOfBeats = $this->reader->readInt();
         for ($i = 0; $i < $numberOfBeats; $i++) {
             $nextNoteStart += $this->reader->factory('GuitarPro5Beat')->readBeat($nextNoteStart, $measure, $track, $tempo, $voice);
         }
     }
     $emptyBeats = array();
     for ($i = 0; $i < $measure->countBeats(); $i++) {
         $beat = $measure->getBeat($i);
         $empty = true;
         for ($v = 0; $v < $beat->countVoices(); $v++) {
             if (!$beat->getVoice($v)->isEmpty()) {
                 $empty = false;
             }
         }
         if ($empty) {
             $emptyBeats[] = $beat;
         }
     }
     foreach ($emptyBeats as $beat) {
         $measure->removeBeat($beat);
     }
     $measure->setClef($this->reader->factory('GuitarProClef')->getClef($track));
     $measure->setKeySignature($this->reader->getKeySignature());
 }
示例#2
0
 /**
  * Reads a Measure
  * 
  * @param Measure $measure
  * @param Track $track
  * @param Tempo $tempo
  */
 public function readMeasure(Measure $measure, Track $track, Tempo $tempo)
 {
     $nextNoteStart = intval($measure->getStart());
     $numberOfBeats = $this->reader->readInt();
     for ($i = 0; $i < $numberOfBeats; $i++) {
         $nextNoteStart += $this->reader->factory('GuitarPro3Beat')->readBeat($nextNoteStart, $measure, $track, $tempo);
     }
     $measure->setClef($this->reader->factory('GuitarProClef')->getClef($track));
     $measure->setKeySignature($this->reader->getKeySignature());
 }
示例#3
0
 private function addTempo(MidiSequenceHelper $sHelper, Measure $currMeasure, Measure $prevMeasure = null, $startMove)
 {
     $addTempo = false;
     if ($prevMeasure === null) {
         $addTempo = true;
     } else {
         if ($currMeasure->getTempo()->getInTPQ() != $prevMeasure->getTempo()->getInTPQ()) {
             $addTempo = true;
         }
     }
     if ($addTempo) {
         $usq = $currMeasure->getTempo()->getInTPQ() * 100 / $this->tempoPercent;
         $sHelper->getSequence()->addTempoInUSQ($this->getTick($currMeasure->getStart() + $startMove), $this->getInfoTrack(), $usq);
     }
 }
示例#4
0
 private function joinBeats(Measure $measure)
 {
     $previous = null;
     $finish = true;
     $measureStart = $measure->getStart();
     $measureEnd = $measureStart + $measure->getLength();
     for ($i = 0; $i < $measure->countBeats(); $i++) {
         $beat = $measure->getBeat($i);
         $beatStart = $beat->getStart();
         $beatLength = $beat->getVoice(0)->getDuration()->getTime();
         if ($previous !== null) {
             $previousStart = $previous->getStart();
             $previousLength = $previous->getVoice(0)->getDuration()->getTime();
             if ($beatStart >= $previousStart && $previousStart + $this->minDurationTime > $beatStart) {
                 // add beat notes to previous
                 for ($n = 0; $n < $beat->getVoice(0)->countNotes(); $n++) {
                     $note = $beat->getVoice(0)->getNote($n);
                     $previous->getVoice(0)->addNote($note);
                 }
                 // add beat chord to previous
                 if (!$previous->isChordBeat() && $beat->isChordBeat()) {
                     $previous->setChord($beat->getChord());
                 }
                 // add beat text to previous
                 if (!$previous->isTextBeat() && $beat->isTextBeat()) {
                     $previous->setText($beat->getText());
                 }
                 // set the best duration
                 if ($beatLength > $previousLength && $beatStart + $beatLength <= $measureEnd) {
                     $previous->getVoice(0)->getDuration()->copyFrom($beat->getVoice(0)->getDuration());
                 }
                 $measure->removeBeat($beat);
                 $finish = false;
                 break;
             } else {
                 if ($previousStart < $beatStart && $previousStart + $previousLength > $beatStart) {
                     if ($beat->getVoice(0)->isRestVoice()) {
                         $measure->removeBeat($beat);
                         $finish = false;
                         break;
                     }
                     $duration = Duration::fromTime($beatStart - $previousStart);
                     $previous->getVoice(0)->getDuration()->copyFrom($duration);
                 }
             }
         }
         if ($beatStart + $beatLength > $measureEnd) {
             if ($beat->getVoice(0)->isRestVoice()) {
                 $measure->removeBeat($beat);
                 $finish = false;
                 break;
             }
             $duration = Duration::fromTime($measureEnd - $beatStart);
             $beat->getVoice(0)->getDuration()->copyFrom($duration);
         }
         $previous = $beat;
     }
     if (!$finish) {
         $this->joinBeats($measure);
     }
 }