Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
kamshory committed Oct 5, 2023
1 parent 62ab53a commit f12b889
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 2 deletions.
16 changes: 16 additions & 0 deletions inc.lib/classes/MusicXML/Model/Note.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,22 @@
*/
class Note extends MusicXMLWriter
{
/**
* Default X
*
* @Attribute(name="default-x")
* @var float
*/
public $defaultX;

/**
* Default Y
*
* @Attribute(name="default-y")
* @var float
*/
public $defaultY;

/**
* Dynamics
*
Expand Down
27 changes: 25 additions & 2 deletions inc.lib/classes/MusicXML/MusicXMLFromMidi.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
use MusicXML\Model\ScoreInstrument;
use MusicXML\Model\ScorePart;
use MusicXML\Model\ScorePartWise;
use MusicXML\Properties\Coordinate;
use MusicXML\Properties\MidiEvent;
use MusicXML\Properties\TimeSignature;

Expand Down Expand Up @@ -913,7 +914,7 @@ private function getMeasure($partId, $channelId, $measureIndex, $timebase)
$note0->type = $this->getNoteType($note0->duration, $divisions);
$measure->note[] = $note0;

$measure = $this->addMeasureElement($measure, $noteMessages, $channelId, $divisions, $timebase);
$measure = $this->addMeasureElement($measureIndex, $measure, $noteMessages, $channelId, $divisions, $timebase);
}
// end add note

Expand All @@ -930,14 +931,15 @@ private function getMeasure($partId, $channelId, $measureIndex, $timebase)
/**
* Add element to measure
*
* @param integer $measureIndex
* @param Measure $measure
* @param array $noteMessages
* @param integer $channelId
* @param integer $divisions
* @param integer $timebase
* @return Measure
*/
private function addMeasureElement($measure, $noteMessages, $channelId, $divisions, $timebase)
private function addMeasureElement($measureIndex, $measure, $noteMessages, $channelId, $divisions, $timebase)
{
// TODO: if there are notes overlaped, make backup

Expand Down Expand Up @@ -970,10 +972,31 @@ private function addMeasureElement($measure, $noteMessages, $channelId, $divisio
}
$note->duration = $duration;
$note->type = $this->getNoteType($note->duration, $divisions);

$coord = $this->getNoteCoordinate($measureIndex, $message, $divisions, $timebase);
$note->defaultX = $coord->defaultX;

$measure->note[] = $note;
}
return $measure;
}

/**
* Get note coordinate
*
* @param integer $measureIndex
* @param array $message
* @param integer $divisions
* @param integer $timebase
* @return Coordinate
*/
private function getNoteCoordinate($measureIndex, $message, $divisions, $timebase)
{
$coordinate = new Coordinate();
$timeRelative = $message['abstime'] - ($measureIndex * $timebase);
$coordinate->defaultX = ($timeRelative / $timebase) * $divisions;
return $coordinate;
}


}
34 changes: 34 additions & 0 deletions inc.lib/classes/MusicXML/Properties/Coordinate.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace MusicXML\Properties;

class Coordinate
{
/**
* Default X
*
* @var float
*/
public $defaultX;

/**
* Default Y
*
* @var float
*/
public $defaultY;

/**
* Relative X
*
* @var string
*/
public $relativeX;

/**
* Relative Y
*
* @var string
*/
public $relativeY;
}

0 comments on commit f12b889

Please sign in to comment.