private function adjustStrings(Beat $beat) { $track = $beat->getMeasure()->getTrack(); $freeStrings = $track->getStrings(); $notesToRemove = array(); $notes = $beat->getVoice(0)->getNotes(); foreach ($notes as $note) { $string = $this->getStringForValue($freeStrings, $note->getValue()); for ($j = 0; $j < count($freeStrings); $j++) { $tempString = $freeStrings[$j]; if ($tempString->getNumber() == $string) { $note->setValue($note->getValue() - $tempString->getValue()); $note->setString($tempString->getNumber()); array_splice($freeStrings, $j, 1); break; } } //Cannot have more notes on same string if ($note->getString() < 1) { $notesToRemove[] = $note; } } // Remove notes while (count($notesToRemove) > 0) { $beat->getVoice(0)->removeNote($notesToRemove[0]); array_splice($notesToRemove, 0, 1); } }