private function parseMessage($trackNumber, $tick, MidiMessage $message) { $parsedTick = $this->parseTick($tick + $this->resolution); //NOTE ON if ($message->getType() == MidiMessage::TYPE_SHORT && $message->getCommand() == MidiMessage::NOTE_ON) { $this->parseNoteOn($trackNumber, $parsedTick, $message->getData()); } else { if ($message->getType() == MidiMessage::TYPE_SHORT && $message->getCommand() == MidiMessage::NOTE_OFF) { $this->parseNoteOff($trackNumber, $parsedTick, $message->getData()); } else { if ($message->getType() == MidiMessage::TYPE_SHORT && $message->getCommand() == MidiMessage::PROGRAM_CHANGE) { $this->parseProgramChange($message->getData()); } else { if ($message->getType() == MidiMessage::TYPE_SHORT && $message->getCommand() == MidiMessage::CONTROL_CHANGE) { $this->parseControlChange($message->getData()); } else { if ($message->getType() == MidiMessage::TYPE_SHORT && $message->getCommand() == MidiMessage::PITCH_BEND) { $this->parsePitchBend($message->getData()); } else { if ($message->getType() == MidiMessage::TYPE_META && $message->getCommand() == MidiMessage::TIME_SIGNATURE_CHANGE) { $this->parseTimeSignature($parsedTick, $message->getData()); } else { if ($message->getType() == MidiMessage::TYPE_META && $message->getCommand() == MidiMessage::TEMPO_CHANGE) { $this->parseTempo($parsedTick, $message->getData()); } else { $logMessage = sprintf('track=%d, tick=%d, type=%s, command=%x, data=array(%s)', $trackNumber, $tick, $message->getType(), $message->getCommand(), implode(', ', $message->getData())); Log::add($logMessage, 'MIDI_SKIPPED_MESSAGE'); } } } } } } } }
protected function writeMetaMessage(MidiMessage $message) { $length = 0; $data = $message->getData(); $this->writeUnsignedBytes(array(255)); $this->writeUnsignedBytes(array($message->getCommand())); $length += 2; if (is_array($data)) { $length += $this->writeVariableLengthQuantity(count($data)); $this->writeUnsignedBytes($data); $length += count($data); } else { $length += $this->writeVariableLengthQuantity(strlen($data)); $this->writeUnsignedBytes(array($data)); $length += strlen($data); } return $length; }