diff --git a/build.xml b/build.xml
index e4e59dd1..9290cb46 100644
--- a/build.xml
+++ b/build.xml
@@ -78,10 +78,13 @@
public static final java.lang.String
version
"0.8.49"
"0.9.0"
Modifier and Type | -Field and Description | -
---|---|
protected java.util.ArrayList<nu.xom.Element> |
-accid |
-
protected java.util.HashMap<java.lang.String,nu.xom.Element> |
-allNotesAndChords |
-
protected java.util.ArrayList<KeyValue<nu.xom.Attribute,java.lang.Boolean>> |
-arpeggiosToSort |
-
protected nu.xom.Element |
-currentChord |
-
protected nu.xom.Element |
-currentLayer |
-
protected nu.xom.Element |
-currentMdiv |
-
protected nu.xom.Element |
-currentMeasure |
-
protected nu.xom.Element |
-currentMsmMovement |
-
protected nu.xom.Element |
-currentPart |
-
protected Performance |
-currentPerformance |
-
protected nu.xom.Element |
-currentWork |
-
protected boolean |
-dontUseChannel10 |
-
protected java.util.ArrayList<nu.xom.Element> |
-endids |
-
protected int |
-endingCounter |
-
protected java.util.ArrayList<nu.xom.Element> |
-lyrics |
-
protected java.util.List<Msm> |
-movements |
-
protected java.util.List<Mpm> |
-performances |
-
protected int |
-ppq |
-
protected java.util.ArrayList<nu.xom.Element> |
-tstamp2s |
-
Modifier | -Constructor and Description | +Constructor and Description |
---|---|---|
protected |
-Helper()
-constructor
- |
-|
protected |
-Helper(int ppq)
-constructor
- |
+Helper() |
Modifier and Type | Method and Description | @@ -266,19 +165,6 @@
---|---|
protected void |
-addLayerAttribute(nu.xom.Element toThis)
-this method writes the layer's ref or n id to a layer attribute and adds that to ofThis
- |
-
private void |
-addSlurId(nu.xom.Element fromThis,
- nu.xom.Element toThis)
-a helper method to make the code of method checkSlurs() a bit more compact
- |
-
static int |
addToMap(nu.xom.Element addThis,
nu.xom.Element map)
@@ -286,295 +172,158 @@ Method Summarytherefore, addThis must contain the attribute "date"; if not, addThis is appended at the end |
static java.lang.String |
addUUID(nu.xom.Element toThis)
Add a UUID-based xml:id to the specified element.
|
protected void |
-barline2SequencingCommand(java.lang.String barline,
- double date,
- nu.xom.Element sequencingMap)
-this method converts the string of a barline (MEI element measure in attributes left and right) to an msm sequencing command (marker and/or goto element) and adds it to the global sequencingMap
- |
-
protected void |
-checkEndid(nu.xom.Element e)
-check for pending elements with endid attributes to be finished when the element with this endid is found,
- note that this will compute the end date including(!)
- |
-
protected void |
-checkSlurs(nu.xom.Element e)
-this method is for note elements to check whether one of the pending slurs applies for it
- |
-
static nu.xom.Element |
cloneElement(nu.xom.Element e)
create a flat copy of element e including its attributes but not its child elements
|
protected java.util.ArrayList<java.lang.Object> |
-computeControlEventTiming(nu.xom.Element event,
- nu.xom.Element msmPartContext)
-MEI control events are usually placed out of timing at the end of a measure.
- |
-
protected java.lang.Double |
-computeDuration(nu.xom.Element ofThis)
-compute midi tick duration of a note or rest, if fail return 0.0;
- the stuff from data.DURATION.gestural is not supported!
- |
-
protected double |
-computeMeasureLength(double numerator,
- double denominator)
-compute the length of one measure with specified numerator and denominator values (the underlying time signature)
- |
-
protected double |
-computePitch(nu.xom.Element ofThis,
- java.util.ArrayList<java.lang.String> pitchdata)
-compute midi pitch of an mei note or return -1.0 if failed; the return is a double number that captures microtonality, too; 0.5 is a quarter tone
- parameter pitchdata should be an empty ArrayList>String<, it is filled with pitchname, accidentals and octave of the computed midi pitch for further use
- |
-
protected static nu.xom.Attribute |
+|
static nu.xom.Attribute |
copyId(nu.xom.Element ofThis,
nu.xom.Element toThis)
copies the id attribute ofThis into toThis
|
private static nu.xom.Attribute |
+|
static nu.xom.Attribute |
copyIdNoNs(nu.xom.Element ofThis,
nu.xom.Element toThis)
-copies the id attribute from ofThis (if present) into toThis, without namespace
+copies the id attribute from ofThis (if present) into toThis, without namespace binding
|
private static nu.xom.Attribute |
copyIdNs(nu.xom.Element ofThis,
nu.xom.Element toThis)
copies the id attribute from ofThis (if present) into toThis, retaining its namespace
|
static java.lang.String |
decimalDuration2HtmlUnicode(double duration,
boolean isRest)
generate an HTML Unicode string with the note/rest value and dots according to the specified duration
|
static double |
duration2decimal(java.lang.String durString)
convert the duration string into decimal (e.g., 4 -> 1/4) and returns the result
|
private static java.lang.String |
durationRemainder2UnicodeDots(double undottedNoteValue,
double remainder)
This is a helper method for decimalDuration2HtmlUnicode().
|
static java.util.ArrayList<java.lang.Integer> |
extractAllIntegersFromString(java.lang.String string)
this method parses an input string, extracts all integer substrings and returns them as a list of integers
|
static java.util.LinkedList<nu.xom.Element> |
getAllChildElements(java.lang.String name,
nu.xom.Element ofThis)
this method is an alternative to XOM's getChildElements(String name) which sometimes doesn't seem to work
|
static nu.xom.Attribute |
getAttribute(java.lang.String name,
nu.xom.Element ofThis)
returns the attribute with the specified name contained in ofThis, or null if that attribute does not exist, namespace is ignored
|
static java.lang.String |
getAttributeValue(java.lang.String name,
nu.xom.Element ofThis)
returns the vale of attribute name in Element ofThis as String, or empty string if attribute does not exist, namespace is ignored
|
protected double[] |
-getCurrentTimeSignature(nu.xom.Element msmPartContext)
-get the current time signature as tuplet of doubles [numerator, denominator]
- |
-
private int |
-getEndid(java.lang.String id)
-return the first element in the endids list with an endid attribute value that equals id
- |
-
static java.lang.String |
getFilenameWithoutExtension(java.lang.String filename)
just a little helper method to separate the filename from the extension
|
static nu.xom.Element |
getFirstChildElement(nu.xom.Element ofThis)
get the first child of an xml element
|
static nu.xom.Element |
getFirstChildElement(nu.xom.Element ofThis,
java.lang.String localname)
XOM's method getFirstChild(String) sometimes doesn't seem to work even though an XPath query finds something.
|
static nu.xom.Element |
getFirstChildElement(java.lang.String name,
nu.xom.Element ofThis)
this function became necessary because the XOM methods sometimes do not seem to work for whatever reason
|
protected static nu.xom.Element |
-getLayer(nu.xom.Element ofThis)
-returns the layer element in the mei tree of ofThis
- |
-
protected static java.lang.String |
-getLayerId(nu.xom.Element layer)
-returns the def or n attribute value of an mei layer element or empty string if it is no layer or both attributes are missing
- |
-
protected double |
-getMidiTime()
-compute the midi time of an mei element
- |
-
protected java.lang.String |
-getMidiTimeAsString()
-compute the midi time of an mei element and return it as String
- |
-
static nu.xom.Element |
getNextSiblingElement(nu.xom.Element ofThis)
get the next sibling element of ofThis irrespective of its name
|
static nu.xom.Element |
getNextSiblingElement(java.lang.String name,
nu.xom.Element ofThis)
get the next sibling element of ofThis with the given name
|
protected double |
-getOneMeasureLength(nu.xom.Element msmPartContext)
-compute the length of one measure in midi ticks at the currentDate in the currentPart of the currentMovement; if no time signature information available it returns the length of a 4/4 measure
- |
-
static nu.xom.Element |
getParentElement(nu.xom.Element ofThis)
returns the parent element of ofThis as element or null
|
protected nu.xom.Element |
-getPart(java.lang.String id)
-return part entry in current movement or null
- |
-
static nu.xom.Element |
getPreviousSiblingElement(nu.xom.Element ofThis)
get the previous sibling element of ofThis irrespective of its name
|
static nu.xom.Element |
getPreviousSiblingElement(java.lang.String name,
nu.xom.Element ofThis)
get the previous sibling element of ofThis with a specific name
|
protected static nu.xom.Element |
-getStaff(nu.xom.Element ofThis)
-returns the staff element in the mei tree of ofThis
- |
-
protected static java.lang.String |
-getStaffId(nu.xom.Element staff)
-returns the def or n attribute value of an mei staff element or empty string if it is no staff or both attributes are missing
- |
-
void |
-indexNotesAndChords(nu.xom.Element mdiv)
-when a new MEI mdiv is processed this method generates a hashmap of all notes and chords, so we don't have to do it again during processing (e.g. in method isSameLayer() etc.)
- |
-
static boolean |
-isSameLayer(nu.xom.Element e,
- java.lang.String layerId)
-check wether the layer attribute of an MEI control event e contains a layerId
- |
-
java.lang.String |
-isSameLayer(java.lang.String startid,
- java.lang.String endid)
-this is a helper to work with startid and endid in MEI control events
- |
-
java.lang.String |
-isSameStaff(java.lang.String startid,
- java.lang.String endid)
-this is a helper to work with startid and endid in MEI control events
- |
-
static net.sf.saxon.s9api.Xslt30Transformer |
makeXslt30Transformer(java.io.File xslt)
compile an XSLT 3.0 Transformer from a given xslt stylesheet
|
static net.sf.saxon.s9api.Xslt30Transformer |
makeXslt30Transformer(java.io.File xslt,
net.sf.saxon.s9api.Processor processor)
compile an XSLT 3.0 Transformer from a given xslt stylesheet using the given Processor instance
|
static net.sf.saxon.s9api.XsltTransformer |
makeXsltTransformer(java.io.File xslt,
net.sf.saxon.s9api.Processor processor,
@@ -583,13 +332,13 @@ |
static java.lang.String |
midi2pname(double midipitch)
converts a midi pitch value to a pitch name string (which inclused enharmonic equivalents)
|
static void |
midi2PnameAndAccid(boolean useSharpInsteadOfFlat,
double midipitch,
@@ -598,146 +347,88 @@ |
static void |
-mpmPostprocessing(java.util.List<Mpm> mpms)
-some mpm data is not in its final state (e.g., dynamics elements with an end attribute), this method makes these final
- |
-
static void |
-mpmPostprocessing(Mpm mpm)
-some mpm data is not in its final state (e.g., dynamics elements with an end attribute), this method makes these final
- |
-
static void |
-msmCleanup(java.util.List<Msm> msms)
-cleanup of the msm objects to remove all conversion related and no longer needed entries in the msm objects (miscMaps, currentDate and tie attributes)
- |
-
static void |
-msmCleanup(Msm msm)
-make the cleanup of one msm object; this removes all miscMaps, currentDate, tie, and layer and lots of further non-MSM confrom attributes
- |
-
TempoData |
-parseTempo(nu.xom.Element tempo,
- nu.xom.Element msmPartContext)
-helper method to generate MPM TempoData from an MEI tempo element,
- only the timing data is not computed here
- |
-
static double |
pname2midi(java.lang.String pname)
converts an mei pname to a midi pitch number in the first midi octave
|
static java.lang.String |
prettyXml(java.lang.String xml)
given a string of XML code, this method prettyfies it
|
protected static double |
-processClefDis(nu.xom.Element scoreStaffDef)
-This method interprets the clef.dis and clef.dis.place attribute as a transposition that is not encoded in the note elements.
- |
-
static double |
pulseDuration2decimal(double pulses,
int ppq)
convert a duration specified in pulses (based on ppq) to decimal format
|
protected static void |
-reorderMeasureContent(nu.xom.Element measure)
-this method moves all subtrees of a measure that are non staff subtrees, i.e. they are control event subtrees, to the front as these have to be processed before the staffs
- |
-
private static java.lang.String |
repeatString(int stack)
just a helper method for prettyXml()
|
protected void |
-reset()
-this method is called when making a new movement
- |
-
protected double |
-tstampToTicks(java.lang.String tstamp,
- nu.xom.Element msmPartContext)
-convert a tstamp value to midi ticks,
- not suited for tstamp2!
- |
-
static void |
updateMpmNoteidsAfterResolvingRepetitions(GenericMap map,
java.util.HashMap<java.lang.String,java.lang.String> noteIdMappings)
When articulationMaps are expanded via GenericMap.applySequencingMap() the noteid attribute is not updated.
|
static void |
validateAgainstSchema(java.io.File file,
java.net.URL schema)
This method validates a file against a schema.
|
static void |
validateAgainstSchema(java.lang.String xml,
java.net.URL schema)
This method validates an xml string against a schema.
|
static boolean |
writeStringToFile(java.lang.String string,
java.lang.String filename)
writes the mup document to a file (filename should include the path and the extension .mup)
|
static nu.xom.Document |
xslTransformToDocument(nu.xom.Document input,
java.io.File xslt)
a helper method to perform XSL transforms
|
static nu.xom.Document |
xslTransformToDocument(nu.xom.Document input,
net.sf.saxon.s9api.Xslt30Transformer transformer)
a helper method to perform XSL transforms
|
static java.lang.String |
xslTransformToString(nu.xom.Document input,
java.io.File xslt)
a helper method to perform XSL transforms
|
static java.lang.String |
xslTransformToString(nu.xom.Document input,
net.sf.saxon.s9api.Xslt30Transformer transformer)
a helper method to perform XSL transforms
|
static java.lang.String |
xslTransformToString(java.lang.String input,
java.io.File xslt)
@@ -745,1029 +436,405 @@ Method Summaryhttps://www.saxonica.com/html/documentation/using-xsl/embedding/s9api-transformation.html |
static java.lang.String |
xslTransformToString(java.lang.String input,
net.sf.saxon.s9api.Xslt30Transformer transformer) |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
protected int ppq-
protected int endingCounter-
protected boolean dontUseChannel10-
protected nu.xom.Element currentMsmMovement-
protected nu.xom.Element currentMdiv-
protected nu.xom.Element currentWork-
protected nu.xom.Element currentPart-
protected nu.xom.Element currentLayer-
protected nu.xom.Element currentMeasure-
protected nu.xom.Element currentChord-
protected java.util.ArrayList<nu.xom.Element> accid-
protected java.util.ArrayList<nu.xom.Element> endids-
protected java.util.ArrayList<nu.xom.Element> tstamp2s-
protected java.util.ArrayList<nu.xom.Element> lyrics-
protected java.util.HashMap<java.lang.String,nu.xom.Element> allNotesAndChords-
protected java.util.ArrayList<KeyValue<nu.xom.Attribute,java.lang.Boolean>> arpeggiosToSort-
protected Performance currentPerformance-
protected java.util.List<Msm> movements-
protected java.util.List<Mpm> performances-
protected Helper()-
protected Helper(int ppq)-
ppq
- protected void reset()-
public void indexNotesAndChords(nu.xom.Element mdiv)-
mdiv
- public static void validateAgainstSchema(java.io.File file, - java.net.URL schema) - throws org.xml.sax.SAXException, - java.io.IOException-
file
- schema
- org.xml.sax.SAXException
java.io.IOException
public static void validateAgainstSchema(java.lang.String xml, - java.net.URL schema) - throws org.xml.sax.SAXException, - java.io.IOException-
xml
- schema
- org.xml.sax.SAXException
java.io.IOException
public static nu.xom.Element getFirstChildElement(nu.xom.Element ofThis)-
ofThis
- public static nu.xom.Element getFirstChildElement(nu.xom.Element ofThis, - java.lang.String localname)-
ofThis
- localname
- public static nu.xom.Element getFirstChildElement(java.lang.String name, - nu.xom.Element ofThis)-
name
- ofThis
- public static java.util.LinkedList<nu.xom.Element> getAllChildElements(java.lang.String name, - nu.xom.Element ofThis)-
name
- ofThis
- public static nu.xom.Element getNextSiblingElement(nu.xom.Element ofThis)-
ofThis
- public static nu.xom.Element getNextSiblingElement(java.lang.String name, - nu.xom.Element ofThis)-
name
- ofThis
- public static nu.xom.Element getPreviousSiblingElement(nu.xom.Element ofThis)-
ofThis
- public static nu.xom.Element getPreviousSiblingElement(java.lang.String name, - nu.xom.Element ofThis)-
name
- ofThis
- public static int addToMap(nu.xom.Element addThis, - nu.xom.Element map)-
addThis
- an xml element (should have an attribute date)map
- a timely sequenced list of elements with attribute dateprotected double getMidiTime()-
protected java.lang.String getMidiTimeAsString()-
public static java.util.ArrayList<java.lang.Integer> extractAllIntegersFromString(java.lang.String string)-
string
- protected double getOneMeasureLength(nu.xom.Element msmPartContext)-
msmPartContext
- specify the MSM part in which's context the (possibly local) measure length is determined or set it null, this is necessary as currentPart is not necessarily the correct contextprotected double[] getCurrentTimeSignature(nu.xom.Element msmPartContext)-
msmPartContext
- specify the MSM part in which's context the (possibly local) time signature is determined or set it null, this is necessary as currentPart is not necessarily the correct contextprotected double computeMeasureLength(double numerator, - double denominator)-
numerator
- denominator
- public static nu.xom.Element cloneElement(nu.xom.Element e)-
e
- public static nu.xom.Attribute getAttribute(java.lang.String name, - nu.xom.Element ofThis)-
name
- ofThis
- public static java.lang.String getAttributeValue(java.lang.String name, - nu.xom.Element ofThis)-
name
- ofThis
- public static java.lang.String addUUID(nu.xom.Element toThis)-
toThis
- protected static nu.xom.Attribute copyId(nu.xom.Element ofThis, - nu.xom.Element toThis)-
ofThis
- toThis
- private static nu.xom.Attribute copyIdNoNs(nu.xom.Element ofThis, - nu.xom.Element toThis)-
ofThis
- toThis
- private static nu.xom.Attribute copyIdNs(nu.xom.Element ofThis, - nu.xom.Element toThis)-
ofThis
- toThis
- public static nu.xom.Element getParentElement(nu.xom.Element ofThis)-
ofThis
- clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
protected nu.xom.Element getPart(java.lang.String id)-
id
- public Helper()+
protected static nu.xom.Element getLayer(nu.xom.Element ofThis)-
public static void validateAgainstSchema(java.io.File file, + java.net.URL schema) + throws org.xml.sax.SAXException, + java.io.IOException+
ofThis
- file
- schema
- org.xml.sax.SAXException
java.io.IOException
protected static java.lang.String getLayerId(nu.xom.Element layer)-
public static void validateAgainstSchema(java.lang.String xml, + java.net.URL schema) + throws org.xml.sax.SAXException, + java.io.IOException+
layer
- xml
- schema
- org.xml.sax.SAXException
java.io.IOException
protected static nu.xom.Element getStaff(nu.xom.Element ofThis)-
public static nu.xom.Element getFirstChildElement(nu.xom.Element ofThis)+
ofThis
- protected static java.lang.String getStaffId(nu.xom.Element staff)-
public static nu.xom.Element getFirstChildElement(nu.xom.Element ofThis, + java.lang.String localname)+
staff
- ofThis
- localname
- protected void addLayerAttribute(nu.xom.Element toThis)-
public static nu.xom.Element getFirstChildElement(java.lang.String name, + nu.xom.Element ofThis)+
toThis
- an element that must be child of a layer element in meiname
- ofThis
- public static void msmCleanup(java.util.List<Msm> msms)-
public static java.util.LinkedList<nu.xom.Element> getAllChildElements(java.lang.String name, + nu.xom.Element ofThis)+
msms
- name
- ofThis
- public static void msmCleanup(Msm msm)-
public static nu.xom.Element getNextSiblingElement(nu.xom.Element ofThis)+
msm
- ofThis
- public static void mpmPostprocessing(java.util.List<Mpm> mpms)-
public static nu.xom.Element getNextSiblingElement(java.lang.String name, + nu.xom.Element ofThis)+
mpms
- name
- ofThis
- public static void mpmPostprocessing(Mpm mpm)-
public static nu.xom.Element getPreviousSiblingElement(nu.xom.Element ofThis)+
mpm
- ofThis
- public static void updateMpmNoteidsAfterResolvingRepetitions(GenericMap map, - java.util.HashMap<java.lang.String,java.lang.String> noteIdMappings)-
public static nu.xom.Element getPreviousSiblingElement(java.lang.String name, + nu.xom.Element ofThis)+
map
- noteIdMappings
- name
- ofThis
- public TempoData parseTempo(nu.xom.Element tempo, - nu.xom.Element msmPartContext)-
public static int addToMap(nu.xom.Element addThis, + nu.xom.Element map)+
tempo
- msmPartContext
- addThis
- an xml element (should have an attribute date)map
- a timely sequenced list of elements with attribute dateprotected static void reorderMeasureContent(nu.xom.Element measure)-
public static java.util.ArrayList<java.lang.Integer> extractAllIntegersFromString(java.lang.String string)+
measure
- string
- private int getEndid(java.lang.String id)-
public static nu.xom.Element cloneElement(nu.xom.Element e)+
id
- e
- protected void checkEndid(nu.xom.Element e)-
public static nu.xom.Attribute getAttribute(java.lang.String name, + nu.xom.Element ofThis)+
e
- name
- ofThis
- protected void checkSlurs(nu.xom.Element e)-
public static java.lang.String getAttributeValue(java.lang.String name, + nu.xom.Element ofThis)+
e
- name
- ofThis
- private void addSlurId(nu.xom.Element fromThis, - nu.xom.Element toThis)-
public static java.lang.String addUUID(nu.xom.Element toThis)+
fromThis
- toThis
- protected void barline2SequencingCommand(java.lang.String barline, - double date, - nu.xom.Element sequencingMap)-
public static nu.xom.Attribute copyId(nu.xom.Element ofThis, + nu.xom.Element toThis)+
barline
- the string that can be read in MEI measure attributes "left" and "right"date
- the midi datesequencingMap
- the sequencingMap to add the elements toofThis
- toThis
- protected static double processClefDis(nu.xom.Element scoreStaffDef)-
public static nu.xom.Attribute copyIdNoNs(nu.xom.Element ofThis, + nu.xom.Element toThis)+
scoreStaffDef
- the scoreDef or staffDef element from meiofThis
- toThis
- protected double tstampToTicks(java.lang.String tstamp, - nu.xom.Element msmPartContext)-
private static nu.xom.Attribute copyIdNs(nu.xom.Element ofThis, + nu.xom.Element toThis)+
tstamp
- msmPartContext
- ofThis
- toThis
- protected java.util.ArrayList<java.lang.Object> computeControlEventTiming(nu.xom.Element event, - nu.xom.Element msmPartContext)-
public static nu.xom.Element getParentElement(nu.xom.Element ofThis)+
event
- the MEI control eventmsmPartContext
- ofThis
- protected java.lang.Double computeDuration(nu.xom.Element ofThis)-
public static void updateMpmNoteidsAfterResolvingRepetitions(GenericMap map, + java.util.HashMap<java.lang.String,java.lang.String> noteIdMappings)+
ofThis
- map
- noteIdMappings
- public static boolean isSameLayer(nu.xom.Element e, - java.lang.String layerId)-
e
- layerId
- public java.lang.String isSameLayer(java.lang.String startid, - java.lang.String endid)-
startid
- endid
- public java.lang.String isSameStaff(java.lang.String startid, - java.lang.String endid)-
startid
- endid
- protected double computePitch(nu.xom.Element ofThis, - java.util.ArrayList<java.lang.String> pitchdata)-
ofThis
- pitchdata
- Modifier and Type | Method and Description | @@ -326,27 +326,51 @@|
---|---|---|
protected static nu.xom.Element |
+getLayer(nu.xom.Element ofThis)
+returns the layer element in the mei tree of ofThis
+ |
+|
protected static java.lang.String |
+getLayerId(nu.xom.Element layer)
+returns the def or n attribute value of an mei layer element or empty string if it is no layer or both attributes are missing
+ |
+|
nu.xom.Element |
getMeiHead() |
|
nu.xom.Element |
getMusic() |
|
protected static nu.xom.Element |
+getStaff(nu.xom.Element ofThis)
+returns the staff element in the mei tree of ofThis
+ |
+|
protected static java.lang.String |
+getStaffId(nu.xom.Element staff)
+returns the def or n attribute value of an mei staff element or empty string if it is no staff or both attributes are missing
+ |
+|
java.lang.String |
getTitle()
This getter method returns the title string from either fileDesc or workDesc.
|
|
protected void |
removeRendElements()
rend elements are additional and totally optional visual information that introduce additional processing effort to mei to msm conversion;
the only relevant information are its contents; this method replaces all rends by their contents
|
|
java.util.ArrayList<java.lang.String> |
resolveCopyofs()
the slacker attribute copyof may occur in the mei document and needs to be resolved before starting the conversion;
@@ -356,31 +380,31 @@
Method Summarythis method does also include the processing of attribute sameas, which is similar to copyof |
|
java.util.ArrayList<java.lang.String> |
resolveCopyofsAndSameas()
this method resolves all occurrences of attributes copyof and sameas
|
|
void |
resolveExpansions()
Expansion elements in MEI indicate the sequence in which sibling section and ending elements have to be arranged.
|
|
private nu.xom.Element |
resolveExpansions(nu.xom.Element root)
Expansion elements in MEI indicate the sequence in which sibling section and ending elements have to be arranged.
|
|
boolean |
writeMei()
writes the mei document to a ...
|
|
boolean |
writeMei(java.lang.String filename)
writes the mei document to a file (filename should include the path and the extension .mei); this method is mainly relevant for debug output after calling exportMsm()
@@ -987,7 +1011,7 @@ resolveExpansions-
Field Summary | Field and Description |
protected java.util.ArrayList<nu.xom.Element> |
+accid |
+|
protected java.util.HashMap<java.lang.String,nu.xom.Element> |
+allNotesAndChords |
+|
protected java.util.ArrayList<KeyValue<nu.xom.Attribute,java.lang.Boolean>> |
+arpeggiosToSort |
+|
private boolean |
cleanup |
|
protected nu.xom.Element |
+currentChord |
+|
protected nu.xom.Element |
+currentLayer |
+|
protected nu.xom.Element |
+currentMdiv |
+|
protected nu.xom.Element |
+currentMeasure |
+|
protected nu.xom.Element |
+currentMsmMovement |
+|
protected nu.xom.Element |
+currentPart |
+|
protected Performance |
+currentPerformance |
+|
protected nu.xom.Element |
+currentWork |
+|
protected boolean |
+dontUseChannel10 |
+|
protected java.util.ArrayList<nu.xom.Element> |
+endids |
+|
protected int |
+endingCounter |
+|
private Helper |
helper |
@@ -149,9 +205,29 @@ ignoreExpansions |
protected java.util.ArrayList<nu.xom.Element> |
+lyrics |
+|
private Mei |
mei |
|
protected java.util.List<Msm> |
+movements |
+|
protected java.util.List<Mpm> |
+performances |
+|
protected int |
+ppq |
+|
protected java.util.ArrayList<nu.xom.Element> |
+tstamp2s |
+
Modifier and Type | Method and Description | @@ -215,6 +291,19 @@
---|---|
protected void |
+addLayerAttribute(nu.xom.Element toThis)
+this method writes the layer's ref or n id to a layer attribute and adds that to ofThis
+ |
+
protected static void |
+addSlurId(nu.xom.Element fromThis,
+ nu.xom.Element toThis)
+a helper method to make the code of method checkSlurs() a bit more compact
+ |
+
private int |
addTempoToMpm(TempoData tempoData,
TempoMap tempoMap,
@@ -223,89 +312,234 @@ |
protected static void |
+barline2SequencingCommand(java.lang.String barline,
+ double date,
+ nu.xom.Element sequencingMap)
+this method converts the string of a barline (MEI element measure in attributes left and right) to an msm sequencing command (marker and/or goto element) and adds it to the global sequencingMap
+ |
+
protected void |
+checkEndid(nu.xom.Element e)
+check for pending elements with endid attributes to be finished when the element with this endid is found,
+ note that this will compute the end date including(!)
+ |
+
protected void |
+checkSlurs(nu.xom.Element e)
+this method is for note elements to check whether one of the pending slurs applies for it
+ |
+
protected java.util.ArrayList<java.lang.Object> |
+computeControlEventTiming(nu.xom.Element event,
+ nu.xom.Element msmPartContext)
+MEI control events are usually placed out of timing at the end of a measure.
+ |
+
protected java.lang.Double |
+computeDuration(nu.xom.Element ofThis)
+compute midi tick duration of a note or rest, if fail return 0.0;
+ the stuff from data.DURATION.gestural is not supported!
+ |
+
protected double |
+computeMeasureLength(double numerator,
+ double denominator)
+compute the length of one measure with specified numerator and denominator values (the underlying time signature)
+ |
+
protected double |
+computePitch(nu.xom.Element ofThis,
+ java.util.ArrayList<java.lang.String> pitchdata)
+compute midi pitch of an mei note or return -1.0 if failed; the return is a double number that captures microtonality, too; 0.5 is a quarter tone
+ parameter pitchdata should be an empty ArrayList>String<, it is filled with pitchname, accidentals and octave of the computed midi pitch for further use
+ |
+
private void |
convert(nu.xom.Element root)
recursively traverse the mei tree (depth first) starting at the root element and return the list of Msm instances; root indicates the root of the subtree,
- the resulting Msm objects are stored in this.helper.movements
+ the resulting Msm objects are stored in this.movements
|
KeyValue<java.util.List<Msm>,java.util.List<Mpm>> |
convert(Mei mei)
converts the provided MEI data into MSM and MPM format and return a tuplet of lists,
one with the MSMs (one per movement/mdiv), the other with the corresponding MPMs
|
protected double[] |
+getCurrentTimeSignature(nu.xom.Element msmPartContext)
+get the current time signature as tuplet of doubles [numerator, denominator]
+ |
+
private int |
+getEndid(java.lang.String id)
+return the first element in the endids list with an endid attribute value that equals id
+ |
+
protected double |
+getMidiTime()
+compute the midi time of an mei element
+ |
+
protected java.lang.String |
+getMidiTimeAsString()
+compute the midi time of an mei element and return it as String
+ |
+
protected double |
+getOneMeasureLength(nu.xom.Element msmPartContext)
+compute the length of one measure in midi ticks at the currentDate in the currentPart of the currentMovement; if no time signature information available it returns the length of a 4/4 measure
+ |
+
protected nu.xom.Element |
+getPart(java.lang.String id)
+return part entry in current movement or null
+ |
+
void |
+indexNotesAndChords(nu.xom.Element mdiv)
+when a new MEI mdiv is processed this method generates a hashmap of all notes and chords, so we don't have to do it again during processing (e.g. in method isSameLayer() etc.)
+ |
+
static boolean |
+isSameLayer(nu.xom.Element e,
+ java.lang.String layerId)
+check wether the layer attribute of an MEI control event e contains a layerId
+ |
+
java.lang.String |
+isSameLayer(java.lang.String startid,
+ java.lang.String endid)
+this is a helper to work with startid and endid in MEI control events
+ |
+
java.lang.String |
+isSameStaff(java.lang.String startid,
+ java.lang.String endid)
+this is a helper to work with startid and endid in MEI control events
+ |
+
private nu.xom.Element |
makeKeySignature(nu.xom.Element meiSource)
make a key signature entry from an mei scoreDef, staffDef or keySig element and return it or return null if no sufficient information
|
private nu.xom.Element |
makeMeasureRest(nu.xom.Element meiMRest)
make a rest that lasts a complete measure
|
private void |
makeMovement(nu.xom.Element mdiv)
this function gets an mdiv and creates an instance of Msm
|
private nu.xom.Element |
makePart(nu.xom.Element staffDef)
make a part entry in xml/msm from an mei staffDef and insert into movement, if it exists already, return it
|
protected nu.xom.Element |
makeTimeSignature(nu.xom.Element meiSource)
make a time signature entry from an mei scoreDef, staffDef or meterSig element and return it or return null if no sufficient information
|
static void |
+mpmPostprocessing(java.util.List<Mpm> mpms)
+some mpm data is not in its final state (e.g., dynamics elements with an end attribute), this method makes these final
+ |
+
static void |
+mpmPostprocessing(Mpm mpm)
+some mpm data is not in its final state (e.g., dynamics elements with an end attribute), this method makes these final
+ |
+
static void |
+msmCleanup(java.util.List<Msm> msms)
+cleanup of the msm objects to remove all conversion related and no longer needed entries in the msm objects (miscMaps, currentDate and tie attributes)
+ |
+
static void |
+msmCleanup(Msm msm)
+make the cleanup of one msm object; this removes all miscMaps, currentDate, tie, and layer and lots of further non-MSM confrom attributes
+ |
+
TempoData |
+parseTempo(nu.xom.Element tempo,
+ nu.xom.Element msmPartContext)
+helper method to generate MPM TempoData from an MEI tempo element,
+ only the timing data is not computed here
+ |
+
private void |
processAccid(nu.xom.Element accid)
process accid elements that are not children of notes
|
private void |
processApp(nu.xom.Element app)
process an mei app element (critical apparatus),
in this run the method also processes lem and rdg elements (the two kinds of child elements of app)
|
private void |
processArpeg(nu.xom.Element arpeg)
process an mei arpeg element
|
private void |
processArtic(nu.xom.Element artic)
process MEI elements that contain attributes atric, artic.ges and slur,
this includes elements artic, note and chord
|
private void |
processBeatRpt(nu.xom.Element beatRpt)
process an mei beatRpt element
|
private void |
processBreath(nu.xom.Element breath)
process an MEI breath element
|
private void |
processChoice(nu.xom.Element choice)
process an mei choice element,
@@ -314,217 +548,243 @@
Method SummaryTODO: this implementation does not take the cert attribute (certainty rating) into account |
private void |
processChord(nu.xom.Element chord)
process an mei chord element; this method is also used to process bTrem and fTrem elements
|
protected static double |
+processClefDis(nu.xom.Element scoreStaffDef)
+This method interprets the clef.dis and clef.dis.place attribute as a transposition that is not encoded in the note elements.
+ |
+
private void |
processDel(nu.xom.Element del)
process an mei del element,
this method basically checks if this del is restored and, thus, has to be processed or not
|
private void |
processDot(nu.xom.Element dot)
process MEI dot elements
|
private void |
processDynam(nu.xom.Element dynam)
process an mei dynam element
|
private void |
processEnding(nu.xom.Element ending)
process an mei ending element, it basically creates entries in the global msm sequencingMap
|
private void |
processHalfmRpt(nu.xom.Element halfmRpt)
process an mei halfmRpt element
|
private void |
processKeySig(nu.xom.Element keySig)
process an mei keySig element
|
private void |
processLayer(nu.xom.Element layer)
process an mei layer element
|
private void |
processLayerDef(nu.xom.Element layerDef)
process an mei layerDef element
|
private void |
processMeasure(nu.xom.Element measure)
process an mei measure element
|
private void |
processMeasureRest(nu.xom.Element mRest)
process a complete measure rest in mei, the measure rest MUST be in a staff/layer environment!
|
private void |
processMeterSig(nu.xom.Element meterSig)
process an mei meterSig element
|
private void |
processMRpt(nu.xom.Element mRpt)
process an mei mRpt elemnet
|
private void |
processMRpt2(nu.xom.Element mRpt2)
process an mei mRpt2 element
|
private void |
processMultiRest(nu.xom.Element multiRest)
make a rest that lasts several measures and insert it into the score
|
private void |
processMultiRpt(nu.xom.Element multiRpt)
process an mei multiRpt element
|
private void |
processNote(nu.xom.Element note)
process an mei note element
|
private void |
processOctave(nu.xom.Element octave)
process an mei octave element
|
private void |
processPedal(nu.xom.Element pedal)
process an mei pedal element
|
private void |
processPhrase(nu.xom.Element phrase)
process MEI phrase elements
|
private void |
processReh(nu.xom.Element reh)
process an mei reh element (rehearsal mark)
|
private void |
processRepeat(double timeframe)
repeats the material at the end of the score map, attribute timeframe specifies the length of the frame to be repeatetd (in midi ticks)
|
private void |
processRest(nu.xom.Element rest)
process an mei rest element
|
private void |
processRestore(nu.xom.Element restore)
Process an mei restore element.
|
private void |
processScoreDef(nu.xom.Element scoreDef)
process an mei scoreDef element
|
private void |
processSection(nu.xom.Element section)
process MEI section elements
|
private void |
processSlur(nu.xom.Element slur)
process MEI slur elements
|
private void |
processSpace(nu.xom.Element space)
process an mei space element
|
private void |
processStaff(nu.xom.Element staff)
process an mei staff element
|
private void |
processStaffDef(nu.xom.Element staffDef)
process an mei staffDef element
|
private void |
processSyl(nu.xom.Element syl)
process an mei syl element
|
private void |
processTempo(nu.xom.Element tempo)
process an MEI tempo element
|
private void |
processTie(nu.xom.Element tie)
process MEI tie elements
|
private boolean |
processTuplet(nu.xom.Element tuplet)
process an mei tuplet element (requires a dur attribute)
|
private void |
processTupletSpan(nu.xom.Element tupletSpan)
process an mei tupletSpan element; the element MUST be in a staff environment
|
protected static void |
+reorderMeasureContent(nu.xom.Element measure)
+this method moves all subtrees of a measure that are non staff subtrees, i.e. they are control event subtrees, to the front as these have to be processed before the staffs
+ |
+
protected void |
+reset()
+this method is called when making a new movement
+ |
+
protected double |
+tstampToTicks(java.lang.String tstamp,
+ nu.xom.Element msmPartContext)
+convert a tstamp value to midi ticks,
+ not suited for tstamp2!
+ |
+
private boolean cleanup
protected int ppq
protected int endingCounter+
public Mei2MsmMpmConverter(int ppq)-
ppq
- the ppq resolution for the conversion; this is counterchecked with the minimal required resolution to capture the shortest duration in the mei data; if a higher resolution is necessary, this input parameter is overriddenprotected boolean dontUseChannel10
public Mei2MsmMpmConverter(int ppq, - boolean dontUseChannel10, - boolean ignoreExpansions, - boolean cleanup)-
ppq
- the ppq resolution for the conversion; this is counterchecked with the minimal required resolution to capture the shortest duration in the mei data; if a higher resolution is necessary, this input parameter is overriddendontUseChannel10
- the flag says whether channel 10 (midi drum channel) shall be used or not; it is already done here, at the mei2msm conversion, because the msm should align with the midi file later onignoreExpansions
- set this true to have a 1:1 conversion of MEI to MSM without the rearrangement that MEI's expansion elements producecleanup
- set true to return a clean msm file or false to keep all the crap from the conversionprotected nu.xom.Element currentMsmMovement
protected nu.xom.Element currentMdiv
protected nu.xom.Element currentPart+
protected nu.xom.Element currentLayer+
protected nu.xom.Element currentMeasure+
protected nu.xom.Element currentChord+
protected java.util.ArrayList<nu.xom.Element> accid+
protected java.util.ArrayList<nu.xom.Element> endids+
protected java.util.ArrayList<nu.xom.Element> tstamp2s+
protected java.util.ArrayList<nu.xom.Element> lyrics+
protected java.util.HashMap<java.lang.String,nu.xom.Element> allNotesAndChords+
protected java.util.ArrayList<KeyValue<nu.xom.Attribute,java.lang.Boolean>> arpeggiosToSort+
protected Performance currentPerformance+
protected java.util.List<Msm> movements+
protected java.util.List<Mpm> performances+
public Mei2MsmMpmConverter(int ppq)+
ppq
- the ppq resolution for the conversion; this is counterchecked with the minimal required resolution to capture the shortest duration in the mei data; if a higher resolution is necessary, this input parameter is overriddenpublic Mei2MsmMpmConverter(int ppq, + boolean dontUseChannel10, + boolean ignoreExpansions, + boolean cleanup)+
ppq
- the ppq resolution for the conversion; this is counterchecked with the minimal required resolution to capture the shortest duration in the mei data; if a higher resolution is necessary, this input parameter is overriddendontUseChannel10
- the flag says whether channel 10 (midi drum channel) shall be used or not; it is already done here, at the mei2msm conversion, because the msm should align with the midi file later onignoreExpansions
- set this true to have a 1:1 conversion of MEI to MSM without the rearrangement that MEI's expansion elements producecleanup
- set true to return a clean msm file or false to keep all the crap from the conversionprivate void convert(nu.xom.Element root)
root
- the root of the subtree to be processedprivate void processNote(nu.xom.Element note)@@ -1407,6 +1838,444 @@
protected void reset()+
public void indexNotesAndChords(nu.xom.Element mdiv)+
mdiv
- protected double getMidiTime()+
protected java.lang.String getMidiTimeAsString()+
protected double getOneMeasureLength(nu.xom.Element msmPartContext)+
msmPartContext
- specify the MSM part in which's context the (possibly local) measure length is determined or set it null, this is necessary as currentPart is not necessarily the correct contextprotected double[] getCurrentTimeSignature(nu.xom.Element msmPartContext)+
msmPartContext
- specify the MSM part in which's context the (possibly local) time signature is determined or set it null, this is necessary as currentPart is not necessarily the correct contextprotected double computeMeasureLength(double numerator, + double denominator)+
numerator
- denominator
- protected nu.xom.Element getPart(java.lang.String id)+
id
- protected void addLayerAttribute(nu.xom.Element toThis)+
toThis
- an element that must be child of a layer element in meipublic TempoData parseTempo(nu.xom.Element tempo, + nu.xom.Element msmPartContext)+
tempo
- msmPartContext
- private int getEndid(java.lang.String id)+
id
- protected void checkEndid(nu.xom.Element e)+
e
- protected void checkSlurs(nu.xom.Element e)+
e
- protected double tstampToTicks(java.lang.String tstamp, + nu.xom.Element msmPartContext)+
tstamp
- msmPartContext
- protected java.util.ArrayList<java.lang.Object> computeControlEventTiming(nu.xom.Element event, + nu.xom.Element msmPartContext)+
event
- the MEI control eventmsmPartContext
- protected java.lang.Double computeDuration(nu.xom.Element ofThis)+
ofThis
- public java.lang.String isSameLayer(java.lang.String startid, + java.lang.String endid)+
startid
- endid
- public java.lang.String isSameStaff(java.lang.String startid, + java.lang.String endid)+
startid
- endid
- protected double computePitch(nu.xom.Element ofThis, + java.util.ArrayList<java.lang.String> pitchdata)+
ofThis
- pitchdata
- public static void msmCleanup(java.util.List<Msm> msms)+
msms
- public static void msmCleanup(Msm msm)+
msm
- public static void mpmPostprocessing(java.util.List<Mpm> mpms)+
mpms
- public static void mpmPostprocessing(Mpm mpm)+
mpm
- protected static void reorderMeasureContent(nu.xom.Element measure)+
measure
- protected static void addSlurId(nu.xom.Element fromThis, + nu.xom.Element toThis)+
fromThis
- toThis
- protected static void barline2SequencingCommand(java.lang.String barline, + double date, + nu.xom.Element sequencingMap)+
barline
- the string that can be read in MEI measure attributes "left" and "right"date
- the midi datesequencingMap
- the sequencingMap to add the elements toprotected static double processClefDis(nu.xom.Element scoreStaffDef)+
scoreStaffDef
- the scoreDef or staffDef element from meipublic static boolean isSameLayer(nu.xom.Element e, + java.lang.String layerId)+
e
- layerId
- protected java.util.List<Mpm>
performances
performances
static void
mpmPostprocessing(Mpm mpm)
+mpmPostprocessing(Mpm mpm)
static void
mpmPostprocessing(java.util.List<Mpm> mpms)
+mpmPostprocessing(java.util.List<Mpm> mpms)
protected Performance
currentPerformance
currentPerformance
TempoData
parseTempo(nu.xom.Element tempo,
+Mei2MsmMpmConverter.parseTempo(nu.xom.Element tempo,
nu.xom.Element msmPartContext)
helper method to generate MPM TempoData from an MEI tempo element,
only the timing data is not computed here
diff --git a/docs/meico/mpm/elements/maps/data/package-frame.html b/docs/meico/mpm/elements/maps/data/package-frame.html
index afc07342..7f8978a4 100644
--- a/docs/meico/mpm/elements/maps/data/package-frame.html
+++ b/docs/meico/mpm/elements/maps/data/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.maps.data
-
+
diff --git a/docs/meico/mpm/elements/maps/data/package-summary.html b/docs/meico/mpm/elements/maps/data/package-summary.html
index 41cbc25e..0c717e5d 100644
--- a/docs/meico/mpm/elements/maps/data/package-summary.html
+++ b/docs/meico/mpm/elements/maps/data/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.maps.data
-
+
diff --git a/docs/meico/mpm/elements/maps/data/package-tree.html b/docs/meico/mpm/elements/maps/data/package-tree.html
index b1212e41..a09c34c8 100644
--- a/docs/meico/mpm/elements/maps/data/package-tree.html
+++ b/docs/meico/mpm/elements/maps/data/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.maps.data Class Hierarchy
-
+
diff --git a/docs/meico/mpm/elements/maps/data/package-use.html b/docs/meico/mpm/elements/maps/data/package-use.html
index 78d4f7e3..bc8def11 100644
--- a/docs/meico/mpm/elements/maps/data/package-use.html
+++ b/docs/meico/mpm/elements/maps/data/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.mpm.elements.maps.data
-
+
diff --git a/docs/meico/mpm/elements/maps/package-frame.html b/docs/meico/mpm/elements/maps/package-frame.html
index 3ca03865..2600377e 100644
--- a/docs/meico/mpm/elements/maps/package-frame.html
+++ b/docs/meico/mpm/elements/maps/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.maps
-
+
diff --git a/docs/meico/mpm/elements/maps/package-summary.html b/docs/meico/mpm/elements/maps/package-summary.html
index d8d86bc4..12f5074c 100644
--- a/docs/meico/mpm/elements/maps/package-summary.html
+++ b/docs/meico/mpm/elements/maps/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.maps
-
+
diff --git a/docs/meico/mpm/elements/maps/package-tree.html b/docs/meico/mpm/elements/maps/package-tree.html
index 37f68ef4..9d217326 100644
--- a/docs/meico/mpm/elements/maps/package-tree.html
+++ b/docs/meico/mpm/elements/maps/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.maps Class Hierarchy
-
+
diff --git a/docs/meico/mpm/elements/maps/package-use.html b/docs/meico/mpm/elements/maps/package-use.html
index 7bf95b02..d200a5ad 100644
--- a/docs/meico/mpm/elements/maps/package-use.html
+++ b/docs/meico/mpm/elements/maps/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.mpm.elements.maps
-
+
diff --git a/docs/meico/mpm/elements/metadata/Author.html b/docs/meico/mpm/elements/metadata/Author.html
index 4eb98d4e..3c6c3d0c 100644
--- a/docs/meico/mpm/elements/metadata/Author.html
+++ b/docs/meico/mpm/elements/metadata/Author.html
@@ -2,9 +2,9 @@
-
+
Author
-
+
diff --git a/docs/meico/mpm/elements/metadata/Comment.html b/docs/meico/mpm/elements/metadata/Comment.html
index 505f8b83..e99cebb0 100644
--- a/docs/meico/mpm/elements/metadata/Comment.html
+++ b/docs/meico/mpm/elements/metadata/Comment.html
@@ -2,9 +2,9 @@
-
+
Comment
-
+
diff --git a/docs/meico/mpm/elements/metadata/Metadata.html b/docs/meico/mpm/elements/metadata/Metadata.html
index 24320d37..c9e38713 100644
--- a/docs/meico/mpm/elements/metadata/Metadata.html
+++ b/docs/meico/mpm/elements/metadata/Metadata.html
@@ -2,9 +2,9 @@
-
+
Metadata
-
+
diff --git a/docs/meico/mpm/elements/metadata/RelatedResource.html b/docs/meico/mpm/elements/metadata/RelatedResource.html
index 906b86af..272d4c2d 100644
--- a/docs/meico/mpm/elements/metadata/RelatedResource.html
+++ b/docs/meico/mpm/elements/metadata/RelatedResource.html
@@ -2,9 +2,9 @@
-
+
RelatedResource
-
+
diff --git a/docs/meico/mpm/elements/metadata/class-use/Author.html b/docs/meico/mpm/elements/metadata/class-use/Author.html
index 859ad402..a66d4160 100644
--- a/docs/meico/mpm/elements/metadata/class-use/Author.html
+++ b/docs/meico/mpm/elements/metadata/class-use/Author.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.metadata.Author
-
+
diff --git a/docs/meico/mpm/elements/metadata/class-use/Comment.html b/docs/meico/mpm/elements/metadata/class-use/Comment.html
index c34e09cb..7f354dc9 100644
--- a/docs/meico/mpm/elements/metadata/class-use/Comment.html
+++ b/docs/meico/mpm/elements/metadata/class-use/Comment.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.metadata.Comment
-
+
diff --git a/docs/meico/mpm/elements/metadata/class-use/Metadata.html b/docs/meico/mpm/elements/metadata/class-use/Metadata.html
index 6a32b3e2..d31848d0 100644
--- a/docs/meico/mpm/elements/metadata/class-use/Metadata.html
+++ b/docs/meico/mpm/elements/metadata/class-use/Metadata.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.metadata.Metadata
-
+
diff --git a/docs/meico/mpm/elements/metadata/class-use/RelatedResource.html b/docs/meico/mpm/elements/metadata/class-use/RelatedResource.html
index f9dbc6ec..b4f2f6df 100644
--- a/docs/meico/mpm/elements/metadata/class-use/RelatedResource.html
+++ b/docs/meico/mpm/elements/metadata/class-use/RelatedResource.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.metadata.RelatedResource
-
+
diff --git a/docs/meico/mpm/elements/metadata/package-frame.html b/docs/meico/mpm/elements/metadata/package-frame.html
index 58e973c4..8b74650a 100644
--- a/docs/meico/mpm/elements/metadata/package-frame.html
+++ b/docs/meico/mpm/elements/metadata/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.metadata
-
+
diff --git a/docs/meico/mpm/elements/metadata/package-summary.html b/docs/meico/mpm/elements/metadata/package-summary.html
index 5e92ee9e..0ecd4f42 100644
--- a/docs/meico/mpm/elements/metadata/package-summary.html
+++ b/docs/meico/mpm/elements/metadata/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.metadata
-
+
diff --git a/docs/meico/mpm/elements/metadata/package-tree.html b/docs/meico/mpm/elements/metadata/package-tree.html
index 47efe040..cfec4626 100644
--- a/docs/meico/mpm/elements/metadata/package-tree.html
+++ b/docs/meico/mpm/elements/metadata/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.metadata Class Hierarchy
-
+
diff --git a/docs/meico/mpm/elements/metadata/package-use.html b/docs/meico/mpm/elements/metadata/package-use.html
index 514c826a..998b1d5e 100644
--- a/docs/meico/mpm/elements/metadata/package-use.html
+++ b/docs/meico/mpm/elements/metadata/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.mpm.elements.metadata
-
+
diff --git a/docs/meico/mpm/elements/package-frame.html b/docs/meico/mpm/elements/package-frame.html
index 40e6194a..6b2d7ec8 100644
--- a/docs/meico/mpm/elements/package-frame.html
+++ b/docs/meico/mpm/elements/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements
-
+
diff --git a/docs/meico/mpm/elements/package-summary.html b/docs/meico/mpm/elements/package-summary.html
index bf75bc3b..17a28b4e 100644
--- a/docs/meico/mpm/elements/package-summary.html
+++ b/docs/meico/mpm/elements/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements
-
+
diff --git a/docs/meico/mpm/elements/package-tree.html b/docs/meico/mpm/elements/package-tree.html
index b2a9f4c1..e3a6ef8c 100644
--- a/docs/meico/mpm/elements/package-tree.html
+++ b/docs/meico/mpm/elements/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements Class Hierarchy
-
+
diff --git a/docs/meico/mpm/elements/package-use.html b/docs/meico/mpm/elements/package-use.html
index 2b69cc82..0fb1f5fa 100644
--- a/docs/meico/mpm/elements/package-use.html
+++ b/docs/meico/mpm/elements/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.mpm.elements
-
+
diff --git a/docs/meico/mpm/elements/styles/ArticulationStyle.html b/docs/meico/mpm/elements/styles/ArticulationStyle.html
index 2714e979..c3a39d92 100644
--- a/docs/meico/mpm/elements/styles/ArticulationStyle.html
+++ b/docs/meico/mpm/elements/styles/ArticulationStyle.html
@@ -2,9 +2,9 @@
-
+
ArticulationStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/DynamicsStyle.html b/docs/meico/mpm/elements/styles/DynamicsStyle.html
index 6e44e018..895781f6 100644
--- a/docs/meico/mpm/elements/styles/DynamicsStyle.html
+++ b/docs/meico/mpm/elements/styles/DynamicsStyle.html
@@ -2,9 +2,9 @@
-
+
DynamicsStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/GenericStyle.html b/docs/meico/mpm/elements/styles/GenericStyle.html
index 9513d569..5c02a282 100644
--- a/docs/meico/mpm/elements/styles/GenericStyle.html
+++ b/docs/meico/mpm/elements/styles/GenericStyle.html
@@ -2,9 +2,9 @@
-
+
GenericStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/MetricalAccentuationStyle.html b/docs/meico/mpm/elements/styles/MetricalAccentuationStyle.html
index 95964a1e..a645aee9 100644
--- a/docs/meico/mpm/elements/styles/MetricalAccentuationStyle.html
+++ b/docs/meico/mpm/elements/styles/MetricalAccentuationStyle.html
@@ -2,9 +2,9 @@
-
+
MetricalAccentuationStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/OrnamentationStyle.html b/docs/meico/mpm/elements/styles/OrnamentationStyle.html
index 96cc3521..24503f6f 100644
--- a/docs/meico/mpm/elements/styles/OrnamentationStyle.html
+++ b/docs/meico/mpm/elements/styles/OrnamentationStyle.html
@@ -2,9 +2,9 @@
-
+
OrnamentationStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/RubatoStyle.html b/docs/meico/mpm/elements/styles/RubatoStyle.html
index f4ee872d..4ee83877 100644
--- a/docs/meico/mpm/elements/styles/RubatoStyle.html
+++ b/docs/meico/mpm/elements/styles/RubatoStyle.html
@@ -2,9 +2,9 @@
-
+
RubatoStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/TempoStyle.html b/docs/meico/mpm/elements/styles/TempoStyle.html
index 62382b48..ccba00c2 100644
--- a/docs/meico/mpm/elements/styles/TempoStyle.html
+++ b/docs/meico/mpm/elements/styles/TempoStyle.html
@@ -2,9 +2,9 @@
-
+
TempoStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/class-use/ArticulationStyle.html b/docs/meico/mpm/elements/styles/class-use/ArticulationStyle.html
index 50420ed0..1c94189d 100644
--- a/docs/meico/mpm/elements/styles/class-use/ArticulationStyle.html
+++ b/docs/meico/mpm/elements/styles/class-use/ArticulationStyle.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.ArticulationStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/class-use/DynamicsStyle.html b/docs/meico/mpm/elements/styles/class-use/DynamicsStyle.html
index 78e5233d..dda4fe0b 100644
--- a/docs/meico/mpm/elements/styles/class-use/DynamicsStyle.html
+++ b/docs/meico/mpm/elements/styles/class-use/DynamicsStyle.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.DynamicsStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/class-use/GenericStyle.html b/docs/meico/mpm/elements/styles/class-use/GenericStyle.html
index 0bbaebc6..1a96deb5 100644
--- a/docs/meico/mpm/elements/styles/class-use/GenericStyle.html
+++ b/docs/meico/mpm/elements/styles/class-use/GenericStyle.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.GenericStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/class-use/MetricalAccentuationStyle.html b/docs/meico/mpm/elements/styles/class-use/MetricalAccentuationStyle.html
index 35661733..4ae2723d 100644
--- a/docs/meico/mpm/elements/styles/class-use/MetricalAccentuationStyle.html
+++ b/docs/meico/mpm/elements/styles/class-use/MetricalAccentuationStyle.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.MetricalAccentuationStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/class-use/OrnamentationStyle.html b/docs/meico/mpm/elements/styles/class-use/OrnamentationStyle.html
index 8fe9bf0f..270a239a 100644
--- a/docs/meico/mpm/elements/styles/class-use/OrnamentationStyle.html
+++ b/docs/meico/mpm/elements/styles/class-use/OrnamentationStyle.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.OrnamentationStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/class-use/RubatoStyle.html b/docs/meico/mpm/elements/styles/class-use/RubatoStyle.html
index bf6c4176..95d57b89 100644
--- a/docs/meico/mpm/elements/styles/class-use/RubatoStyle.html
+++ b/docs/meico/mpm/elements/styles/class-use/RubatoStyle.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.RubatoStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/class-use/TempoStyle.html b/docs/meico/mpm/elements/styles/class-use/TempoStyle.html
index c575f596..575d0724 100644
--- a/docs/meico/mpm/elements/styles/class-use/TempoStyle.html
+++ b/docs/meico/mpm/elements/styles/class-use/TempoStyle.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.TempoStyle
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/AbstractDef.html b/docs/meico/mpm/elements/styles/defs/AbstractDef.html
index 0f844c9f..136e707a 100644
--- a/docs/meico/mpm/elements/styles/defs/AbstractDef.html
+++ b/docs/meico/mpm/elements/styles/defs/AbstractDef.html
@@ -2,9 +2,9 @@
-
+
AbstractDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/AccentuationPatternDef.html b/docs/meico/mpm/elements/styles/defs/AccentuationPatternDef.html
index 2824f6d6..6e0325f0 100644
--- a/docs/meico/mpm/elements/styles/defs/AccentuationPatternDef.html
+++ b/docs/meico/mpm/elements/styles/defs/AccentuationPatternDef.html
@@ -2,9 +2,9 @@
-
+
AccentuationPatternDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/ArticulationDef.html b/docs/meico/mpm/elements/styles/defs/ArticulationDef.html
index 24cd43bc..dbdd5129 100644
--- a/docs/meico/mpm/elements/styles/defs/ArticulationDef.html
+++ b/docs/meico/mpm/elements/styles/defs/ArticulationDef.html
@@ -2,9 +2,9 @@
-
+
ArticulationDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/DynamicsDef.html b/docs/meico/mpm/elements/styles/defs/DynamicsDef.html
index 929faaf7..2823cf63 100644
--- a/docs/meico/mpm/elements/styles/defs/DynamicsDef.html
+++ b/docs/meico/mpm/elements/styles/defs/DynamicsDef.html
@@ -2,9 +2,9 @@
-
+
DynamicsDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/OrnamentDef.DynamicsGradient.html b/docs/meico/mpm/elements/styles/defs/OrnamentDef.DynamicsGradient.html
index 88bbb568..972ca0e2 100644
--- a/docs/meico/mpm/elements/styles/defs/OrnamentDef.DynamicsGradient.html
+++ b/docs/meico/mpm/elements/styles/defs/OrnamentDef.DynamicsGradient.html
@@ -2,9 +2,9 @@
-
+
OrnamentDef.DynamicsGradient
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.FrameDomain.html b/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.FrameDomain.html
index 1eb0f18b..72157913 100644
--- a/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.FrameDomain.html
+++ b/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.FrameDomain.html
@@ -2,9 +2,9 @@
-
+
OrnamentDef.TemporalSpread.FrameDomain
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.NoteOffShift.html b/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.NoteOffShift.html
index 43fe0369..1242d995 100644
--- a/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.NoteOffShift.html
+++ b/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.NoteOffShift.html
@@ -2,9 +2,9 @@
-
+
OrnamentDef.TemporalSpread.NoteOffShift
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.html b/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.html
index d3cfa8dd..76a13ae1 100644
--- a/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.html
+++ b/docs/meico/mpm/elements/styles/defs/OrnamentDef.TemporalSpread.html
@@ -2,9 +2,9 @@
-
+
OrnamentDef.TemporalSpread
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/OrnamentDef.html b/docs/meico/mpm/elements/styles/defs/OrnamentDef.html
index c74d306d..7371dc7a 100644
--- a/docs/meico/mpm/elements/styles/defs/OrnamentDef.html
+++ b/docs/meico/mpm/elements/styles/defs/OrnamentDef.html
@@ -2,9 +2,9 @@
-
+
OrnamentDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/RubatoDef.html b/docs/meico/mpm/elements/styles/defs/RubatoDef.html
index da9abd08..cbb593f8 100644
--- a/docs/meico/mpm/elements/styles/defs/RubatoDef.html
+++ b/docs/meico/mpm/elements/styles/defs/RubatoDef.html
@@ -2,9 +2,9 @@
-
+
RubatoDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/TempoDef.html b/docs/meico/mpm/elements/styles/defs/TempoDef.html
index 3cab2c2e..dd9667d3 100644
--- a/docs/meico/mpm/elements/styles/defs/TempoDef.html
+++ b/docs/meico/mpm/elements/styles/defs/TempoDef.html
@@ -2,9 +2,9 @@
-
+
TempoDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/class-use/AbstractDef.html b/docs/meico/mpm/elements/styles/defs/class-use/AbstractDef.html
index 24c36d53..8a898ed0 100644
--- a/docs/meico/mpm/elements/styles/defs/class-use/AbstractDef.html
+++ b/docs/meico/mpm/elements/styles/defs/class-use/AbstractDef.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.defs.AbstractDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/class-use/AccentuationPatternDef.html b/docs/meico/mpm/elements/styles/defs/class-use/AccentuationPatternDef.html
index 87805a25..db8942ec 100644
--- a/docs/meico/mpm/elements/styles/defs/class-use/AccentuationPatternDef.html
+++ b/docs/meico/mpm/elements/styles/defs/class-use/AccentuationPatternDef.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.defs.AccentuationPatternDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/class-use/ArticulationDef.html b/docs/meico/mpm/elements/styles/defs/class-use/ArticulationDef.html
index 00a91149..9506b05f 100644
--- a/docs/meico/mpm/elements/styles/defs/class-use/ArticulationDef.html
+++ b/docs/meico/mpm/elements/styles/defs/class-use/ArticulationDef.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.defs.ArticulationDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/class-use/DynamicsDef.html b/docs/meico/mpm/elements/styles/defs/class-use/DynamicsDef.html
index 88147a6a..a83cce29 100644
--- a/docs/meico/mpm/elements/styles/defs/class-use/DynamicsDef.html
+++ b/docs/meico/mpm/elements/styles/defs/class-use/DynamicsDef.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.defs.DynamicsDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.DynamicsGradient.html b/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.DynamicsGradient.html
index 731a03e7..8d73b76c 100644
--- a/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.DynamicsGradient.html
+++ b/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.DynamicsGradient.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.defs.OrnamentDef.DynamicsGradient
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.FrameDomain.html b/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.FrameDomain.html
index fd4b7dbb..bd10e05a 100644
--- a/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.FrameDomain.html
+++ b/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.FrameDomain.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.defs.OrnamentDef.TemporalSpread.FrameDomain
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.NoteOffShift.html b/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.NoteOffShift.html
index 45d6732b..d41efe58 100644
--- a/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.NoteOffShift.html
+++ b/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.NoteOffShift.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.defs.OrnamentDef.TemporalSpread.NoteOffShift
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.html b/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.html
index 4a0de691..ee64fbf7 100644
--- a/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.html
+++ b/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.TemporalSpread.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.defs.OrnamentDef.TemporalSpread
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.html b/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.html
index 167b570d..703ab1d4 100644
--- a/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.html
+++ b/docs/meico/mpm/elements/styles/defs/class-use/OrnamentDef.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.defs.OrnamentDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/class-use/RubatoDef.html b/docs/meico/mpm/elements/styles/defs/class-use/RubatoDef.html
index e53150a2..13a2a2ef 100644
--- a/docs/meico/mpm/elements/styles/defs/class-use/RubatoDef.html
+++ b/docs/meico/mpm/elements/styles/defs/class-use/RubatoDef.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.defs.RubatoDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/class-use/TempoDef.html b/docs/meico/mpm/elements/styles/defs/class-use/TempoDef.html
index 4dbc2769..df85daa1 100644
--- a/docs/meico/mpm/elements/styles/defs/class-use/TempoDef.html
+++ b/docs/meico/mpm/elements/styles/defs/class-use/TempoDef.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.mpm.elements.styles.defs.TempoDef
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/package-frame.html b/docs/meico/mpm/elements/styles/defs/package-frame.html
index 6e272ad7..86f61db0 100644
--- a/docs/meico/mpm/elements/styles/defs/package-frame.html
+++ b/docs/meico/mpm/elements/styles/defs/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.styles.defs
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/package-summary.html b/docs/meico/mpm/elements/styles/defs/package-summary.html
index cf99096b..b78e6fd4 100644
--- a/docs/meico/mpm/elements/styles/defs/package-summary.html
+++ b/docs/meico/mpm/elements/styles/defs/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.styles.defs
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/package-tree.html b/docs/meico/mpm/elements/styles/defs/package-tree.html
index 63347f65..5a4836ab 100644
--- a/docs/meico/mpm/elements/styles/defs/package-tree.html
+++ b/docs/meico/mpm/elements/styles/defs/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.styles.defs Class Hierarchy
-
+
diff --git a/docs/meico/mpm/elements/styles/defs/package-use.html b/docs/meico/mpm/elements/styles/defs/package-use.html
index c803980c..443c5cd1 100644
--- a/docs/meico/mpm/elements/styles/defs/package-use.html
+++ b/docs/meico/mpm/elements/styles/defs/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.mpm.elements.styles.defs
-
+
diff --git a/docs/meico/mpm/elements/styles/package-frame.html b/docs/meico/mpm/elements/styles/package-frame.html
index c591b08b..d473f0d6 100644
--- a/docs/meico/mpm/elements/styles/package-frame.html
+++ b/docs/meico/mpm/elements/styles/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.styles
-
+
diff --git a/docs/meico/mpm/elements/styles/package-summary.html b/docs/meico/mpm/elements/styles/package-summary.html
index 65aea51c..9f23243f 100644
--- a/docs/meico/mpm/elements/styles/package-summary.html
+++ b/docs/meico/mpm/elements/styles/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.styles
-
+
diff --git a/docs/meico/mpm/elements/styles/package-tree.html b/docs/meico/mpm/elements/styles/package-tree.html
index 5e203ab1..64b83886 100644
--- a/docs/meico/mpm/elements/styles/package-tree.html
+++ b/docs/meico/mpm/elements/styles/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.mpm.elements.styles Class Hierarchy
-
+
diff --git a/docs/meico/mpm/elements/styles/package-use.html b/docs/meico/mpm/elements/styles/package-use.html
index d3483a57..d2898cf8 100644
--- a/docs/meico/mpm/elements/styles/package-use.html
+++ b/docs/meico/mpm/elements/styles/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.mpm.elements.styles
-
+
diff --git a/docs/meico/mpm/package-frame.html b/docs/meico/mpm/package-frame.html
index b17d127e..45b4da2c 100644
--- a/docs/meico/mpm/package-frame.html
+++ b/docs/meico/mpm/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.mpm
-
+
diff --git a/docs/meico/mpm/package-summary.html b/docs/meico/mpm/package-summary.html
index c471a645..9262c373 100644
--- a/docs/meico/mpm/package-summary.html
+++ b/docs/meico/mpm/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.mpm
-
+
diff --git a/docs/meico/mpm/package-tree.html b/docs/meico/mpm/package-tree.html
index 3626c365..0023c992 100644
--- a/docs/meico/mpm/package-tree.html
+++ b/docs/meico/mpm/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.mpm Class Hierarchy
-
+
diff --git a/docs/meico/mpm/package-use.html b/docs/meico/mpm/package-use.html
index 3dc3c44b..6a801d9c 100644
--- a/docs/meico/mpm/package-use.html
+++ b/docs/meico/mpm/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.mpm
-
+
diff --git a/docs/meico/msm/AbstractMsm.html b/docs/meico/msm/AbstractMsm.html
index 3b1e199f..1321e5e3 100644
--- a/docs/meico/msm/AbstractMsm.html
+++ b/docs/meico/msm/AbstractMsm.html
@@ -2,9 +2,9 @@
-
+
AbstractMsm
-
+
diff --git a/docs/meico/msm/Goto.html b/docs/meico/msm/Goto.html
index 855316a2..36534921 100644
--- a/docs/meico/msm/Goto.html
+++ b/docs/meico/msm/Goto.html
@@ -2,9 +2,9 @@
-
+
Goto
-
+
diff --git a/docs/meico/msm/Msm.html b/docs/meico/msm/Msm.html
index be6aaefd..7e8d799c 100644
--- a/docs/meico/msm/Msm.html
+++ b/docs/meico/msm/Msm.html
@@ -2,9 +2,9 @@
-
+
Msm
-
+
diff --git a/docs/meico/msm/class-use/AbstractMsm.html b/docs/meico/msm/class-use/AbstractMsm.html
index 3fc4c93c..ab39d033 100644
--- a/docs/meico/msm/class-use/AbstractMsm.html
+++ b/docs/meico/msm/class-use/AbstractMsm.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.msm.AbstractMsm
-
+
diff --git a/docs/meico/msm/class-use/Goto.html b/docs/meico/msm/class-use/Goto.html
index 090814b8..cb430028 100644
--- a/docs/meico/msm/class-use/Goto.html
+++ b/docs/meico/msm/class-use/Goto.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.msm.Goto
-
+
diff --git a/docs/meico/msm/class-use/Msm.html b/docs/meico/msm/class-use/Msm.html
index 63d97754..647e3796 100644
--- a/docs/meico/msm/class-use/Msm.html
+++ b/docs/meico/msm/class-use/Msm.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.msm.Msm
-
+
@@ -131,7 +131,7 @@ Uses of Msm
protected java.util.List<Msm>
-Helper.movements
+Mei2MsmMpmConverter.movements
@@ -232,7 +232,7 @@ Uses of Msm
static void
-Helper.msmCleanup(Msm msm)
+ Mei2MsmMpmConverter.msmCleanup(Msm msm)
make the cleanup of one msm object; this removes all miscMaps, currentDate, tie, and layer and lots of further non-MSM confrom attributes
@@ -247,7 +247,7 @@ Uses of Msm
static void
-Helper.msmCleanup(java.util.List<Msm> msms)
+ Mei2MsmMpmConverter.msmCleanup(java.util.List<Msm> msms)
cleanup of the msm objects to remove all conversion related and no longer needed entries in the msm objects (miscMaps, currentDate and tie attributes)
diff --git a/docs/meico/msm/package-frame.html b/docs/meico/msm/package-frame.html
index 73c728a0..481d3808 100644
--- a/docs/meico/msm/package-frame.html
+++ b/docs/meico/msm/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.msm
-
+
diff --git a/docs/meico/msm/package-summary.html b/docs/meico/msm/package-summary.html
index 72f8f883..f470600b 100644
--- a/docs/meico/msm/package-summary.html
+++ b/docs/meico/msm/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.msm
-
+
diff --git a/docs/meico/msm/package-tree.html b/docs/meico/msm/package-tree.html
index 5b712e53..3e086621 100644
--- a/docs/meico/msm/package-tree.html
+++ b/docs/meico/msm/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.msm Class Hierarchy
-
+
diff --git a/docs/meico/msm/package-use.html b/docs/meico/msm/package-use.html
index 1fbc55d8..6ebc1f79 100644
--- a/docs/meico/msm/package-use.html
+++ b/docs/meico/msm/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.msm
-
+
diff --git a/docs/meico/musicxml/MusicXml.MusicXmlType.html b/docs/meico/musicxml/MusicXml.MusicXmlType.html
index f69274bc..c1dd5dcd 100644
--- a/docs/meico/musicxml/MusicXml.MusicXmlType.html
+++ b/docs/meico/musicxml/MusicXml.MusicXmlType.html
@@ -2,9 +2,9 @@
-
+
MusicXml.MusicXmlType
-
+
diff --git a/docs/meico/musicxml/MusicXml.html b/docs/meico/musicxml/MusicXml.html
index 24208e22..3635ea88 100644
--- a/docs/meico/musicxml/MusicXml.html
+++ b/docs/meico/musicxml/MusicXml.html
@@ -2,9 +2,9 @@
-
+
MusicXml
-
+
diff --git a/docs/meico/musicxml/MusicXml2MsmMpmConverter.html b/docs/meico/musicxml/MusicXml2MsmMpmConverter.html
index 6ab9ea04..5eb0a0d9 100644
--- a/docs/meico/musicxml/MusicXml2MsmMpmConverter.html
+++ b/docs/meico/musicxml/MusicXml2MsmMpmConverter.html
@@ -2,9 +2,9 @@
-
+
MusicXml2MsmMpmConverter
-
+
diff --git a/docs/meico/musicxml/class-use/MusicXml.MusicXmlType.html b/docs/meico/musicxml/class-use/MusicXml.MusicXmlType.html
index f7495306..b685e50b 100644
--- a/docs/meico/musicxml/class-use/MusicXml.MusicXmlType.html
+++ b/docs/meico/musicxml/class-use/MusicXml.MusicXmlType.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.musicxml.MusicXml.MusicXmlType
-
+
diff --git a/docs/meico/musicxml/class-use/MusicXml.html b/docs/meico/musicxml/class-use/MusicXml.html
index ef2617d2..c5ce947e 100644
--- a/docs/meico/musicxml/class-use/MusicXml.html
+++ b/docs/meico/musicxml/class-use/MusicXml.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.musicxml.MusicXml
-
+
diff --git a/docs/meico/musicxml/class-use/MusicXml2MsmMpmConverter.html b/docs/meico/musicxml/class-use/MusicXml2MsmMpmConverter.html
index 3b26425e..ed15a55b 100644
--- a/docs/meico/musicxml/class-use/MusicXml2MsmMpmConverter.html
+++ b/docs/meico/musicxml/class-use/MusicXml2MsmMpmConverter.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.musicxml.MusicXml2MsmMpmConverter
-
+
diff --git a/docs/meico/musicxml/package-frame.html b/docs/meico/musicxml/package-frame.html
index 63e343a2..97ab4df0 100644
--- a/docs/meico/musicxml/package-frame.html
+++ b/docs/meico/musicxml/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.musicxml
-
+
diff --git a/docs/meico/musicxml/package-summary.html b/docs/meico/musicxml/package-summary.html
index b420f75a..03db9cf2 100644
--- a/docs/meico/musicxml/package-summary.html
+++ b/docs/meico/musicxml/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.musicxml
-
+
diff --git a/docs/meico/musicxml/package-tree.html b/docs/meico/musicxml/package-tree.html
index feaac183..b1034773 100644
--- a/docs/meico/musicxml/package-tree.html
+++ b/docs/meico/musicxml/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.musicxml Class Hierarchy
-
+
diff --git a/docs/meico/musicxml/package-use.html b/docs/meico/musicxml/package-use.html
index cc91e595..cf617405 100644
--- a/docs/meico/musicxml/package-use.html
+++ b/docs/meico/musicxml/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.musicxml
-
+
diff --git a/docs/meico/package-frame.html b/docs/meico/package-frame.html
index a63c367c..88f14bf7 100644
--- a/docs/meico/package-frame.html
+++ b/docs/meico/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico
-
+
diff --git a/docs/meico/package-summary.html b/docs/meico/package-summary.html
index e39e0ac0..83ab0447 100644
--- a/docs/meico/package-summary.html
+++ b/docs/meico/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico
-
+
diff --git a/docs/meico/package-tree.html b/docs/meico/package-tree.html
index 5456f6ef..5176f85e 100644
--- a/docs/meico/package-tree.html
+++ b/docs/meico/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico Class Hierarchy
-
+
diff --git a/docs/meico/package-use.html b/docs/meico/package-use.html
index 2f641375..eb60024d 100644
--- a/docs/meico/package-use.html
+++ b/docs/meico/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico
-
+
diff --git a/docs/meico/pitches/FeatureElement.html b/docs/meico/pitches/FeatureElement.html
index 28e6c86b..5d3cd439 100644
--- a/docs/meico/pitches/FeatureElement.html
+++ b/docs/meico/pitches/FeatureElement.html
@@ -2,9 +2,9 @@
-
+
FeatureElement
-
+
diff --git a/docs/meico/pitches/FeatureVector.html b/docs/meico/pitches/FeatureVector.html
index fd0ddf8c..0b3021db 100644
--- a/docs/meico/pitches/FeatureVector.html
+++ b/docs/meico/pitches/FeatureVector.html
@@ -2,9 +2,9 @@
-
+
FeatureVector
-
+
diff --git a/docs/meico/pitches/Key.html b/docs/meico/pitches/Key.html
index d25c56b7..b8105fc3 100644
--- a/docs/meico/pitches/Key.html
+++ b/docs/meico/pitches/Key.html
@@ -2,9 +2,9 @@
-
+
Key
-
+
diff --git a/docs/meico/pitches/Pitches.html b/docs/meico/pitches/Pitches.html
index 3b65cb5d..3faf3a9d 100644
--- a/docs/meico/pitches/Pitches.html
+++ b/docs/meico/pitches/Pitches.html
@@ -2,9 +2,9 @@
-
+
Pitches
-
+
diff --git a/docs/meico/pitches/class-use/FeatureElement.html b/docs/meico/pitches/class-use/FeatureElement.html
index e80a3af7..8353d9c0 100644
--- a/docs/meico/pitches/class-use/FeatureElement.html
+++ b/docs/meico/pitches/class-use/FeatureElement.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.pitches.FeatureElement
-
+
diff --git a/docs/meico/pitches/class-use/FeatureVector.html b/docs/meico/pitches/class-use/FeatureVector.html
index 47bb5f33..d903c53c 100644
--- a/docs/meico/pitches/class-use/FeatureVector.html
+++ b/docs/meico/pitches/class-use/FeatureVector.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.pitches.FeatureVector
-
+
diff --git a/docs/meico/pitches/class-use/Key.html b/docs/meico/pitches/class-use/Key.html
index adf81806..d3036983 100644
--- a/docs/meico/pitches/class-use/Key.html
+++ b/docs/meico/pitches/class-use/Key.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.pitches.Key
-
+
diff --git a/docs/meico/pitches/class-use/Pitches.html b/docs/meico/pitches/class-use/Pitches.html
index 99867f4d..fa779533 100644
--- a/docs/meico/pitches/class-use/Pitches.html
+++ b/docs/meico/pitches/class-use/Pitches.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.pitches.Pitches
-
+
diff --git a/docs/meico/pitches/package-frame.html b/docs/meico/pitches/package-frame.html
index baee24ff..8331c05f 100644
--- a/docs/meico/pitches/package-frame.html
+++ b/docs/meico/pitches/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.pitches
-
+
diff --git a/docs/meico/pitches/package-summary.html b/docs/meico/pitches/package-summary.html
index 1dd24e50..7115407c 100644
--- a/docs/meico/pitches/package-summary.html
+++ b/docs/meico/pitches/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.pitches
-
+
diff --git a/docs/meico/pitches/package-tree.html b/docs/meico/pitches/package-tree.html
index ccf6598c..9f8bfb08 100644
--- a/docs/meico/pitches/package-tree.html
+++ b/docs/meico/pitches/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.pitches Class Hierarchy
-
+
diff --git a/docs/meico/pitches/package-use.html b/docs/meico/pitches/package-use.html
index db2912a3..775ab1a3 100644
--- a/docs/meico/pitches/package-use.html
+++ b/docs/meico/pitches/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.pitches
-
+
diff --git a/docs/meico/supplementary/ColorCoding.html b/docs/meico/supplementary/ColorCoding.html
index 3cf1e462..29987cbf 100644
--- a/docs/meico/supplementary/ColorCoding.html
+++ b/docs/meico/supplementary/ColorCoding.html
@@ -2,9 +2,9 @@
-
+
ColorCoding
-
+
diff --git a/docs/meico/supplementary/InputStream2StringConverter.html b/docs/meico/supplementary/InputStream2StringConverter.html
index a33aa2c1..adcb2af7 100644
--- a/docs/meico/supplementary/InputStream2StringConverter.html
+++ b/docs/meico/supplementary/InputStream2StringConverter.html
@@ -2,9 +2,9 @@
-
+
InputStream2StringConverter
-
+
diff --git a/docs/meico/supplementary/KeyValue.html b/docs/meico/supplementary/KeyValue.html
index 43db435d..a59edb57 100644
--- a/docs/meico/supplementary/KeyValue.html
+++ b/docs/meico/supplementary/KeyValue.html
@@ -2,9 +2,9 @@
-
+
KeyValue
-
+
diff --git a/docs/meico/supplementary/RandomNumberProvider.html b/docs/meico/supplementary/RandomNumberProvider.html
index 475a8c43..17f71964 100644
--- a/docs/meico/supplementary/RandomNumberProvider.html
+++ b/docs/meico/supplementary/RandomNumberProvider.html
@@ -2,9 +2,9 @@
-
+
RandomNumberProvider
-
+
diff --git a/docs/meico/supplementary/class-use/ColorCoding.html b/docs/meico/supplementary/class-use/ColorCoding.html
index 93e01276..5260870b 100644
--- a/docs/meico/supplementary/class-use/ColorCoding.html
+++ b/docs/meico/supplementary/class-use/ColorCoding.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.supplementary.ColorCoding
-
+
diff --git a/docs/meico/supplementary/class-use/InputStream2StringConverter.html b/docs/meico/supplementary/class-use/InputStream2StringConverter.html
index 0c65aca7..a5f28ef2 100644
--- a/docs/meico/supplementary/class-use/InputStream2StringConverter.html
+++ b/docs/meico/supplementary/class-use/InputStream2StringConverter.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.supplementary.InputStream2StringConverter
-
+
diff --git a/docs/meico/supplementary/class-use/KeyValue.html b/docs/meico/supplementary/class-use/KeyValue.html
index 61440d4b..7b13f4e0 100644
--- a/docs/meico/supplementary/class-use/KeyValue.html
+++ b/docs/meico/supplementary/class-use/KeyValue.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.supplementary.KeyValue
-
+
@@ -163,7 +163,7 @@ Uses of
protected java.util.ArrayList<KeyValue<nu.xom.Attribute,java.lang.Boolean>>
-Helper.arpeggiosToSort
+Mei2MsmMpmConverter.arpeggiosToSort
diff --git a/docs/meico/supplementary/class-use/RandomNumberProvider.html b/docs/meico/supplementary/class-use/RandomNumberProvider.html
index 7e41f6d4..f0344f6f 100644
--- a/docs/meico/supplementary/class-use/RandomNumberProvider.html
+++ b/docs/meico/supplementary/class-use/RandomNumberProvider.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.supplementary.RandomNumberProvider
-
+
diff --git a/docs/meico/supplementary/package-frame.html b/docs/meico/supplementary/package-frame.html
index f293e212..2390d025 100644
--- a/docs/meico/supplementary/package-frame.html
+++ b/docs/meico/supplementary/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.supplementary
-
+
diff --git a/docs/meico/supplementary/package-summary.html b/docs/meico/supplementary/package-summary.html
index dff3dd79..09fa20e3 100644
--- a/docs/meico/supplementary/package-summary.html
+++ b/docs/meico/supplementary/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.supplementary
-
+
diff --git a/docs/meico/supplementary/package-tree.html b/docs/meico/supplementary/package-tree.html
index aba67aaf..ff3267d1 100644
--- a/docs/meico/supplementary/package-tree.html
+++ b/docs/meico/supplementary/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.supplementary Class Hierarchy
-
+
diff --git a/docs/meico/supplementary/package-use.html b/docs/meico/supplementary/package-use.html
index 1a9a42cc..5a356662 100644
--- a/docs/meico/supplementary/package-use.html
+++ b/docs/meico/supplementary/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.supplementary
-
+
diff --git a/docs/meico/svg/Svg.html b/docs/meico/svg/Svg.html
index 4b0d09e0..91fb09c9 100644
--- a/docs/meico/svg/Svg.html
+++ b/docs/meico/svg/Svg.html
@@ -2,9 +2,9 @@
-
+
Svg
-
+
diff --git a/docs/meico/svg/SvgCollection.html b/docs/meico/svg/SvgCollection.html
index 610b90e2..89a3977e 100644
--- a/docs/meico/svg/SvgCollection.html
+++ b/docs/meico/svg/SvgCollection.html
@@ -2,9 +2,9 @@
-
+
SvgCollection
-
+
diff --git a/docs/meico/svg/class-use/Svg.html b/docs/meico/svg/class-use/Svg.html
index 62c79df6..8a9d5beb 100644
--- a/docs/meico/svg/class-use/Svg.html
+++ b/docs/meico/svg/class-use/Svg.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.svg.Svg
-
+
diff --git a/docs/meico/svg/class-use/SvgCollection.html b/docs/meico/svg/class-use/SvgCollection.html
index 22e8f0f7..9b131139 100644
--- a/docs/meico/svg/class-use/SvgCollection.html
+++ b/docs/meico/svg/class-use/SvgCollection.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.svg.SvgCollection
-
+
diff --git a/docs/meico/svg/package-frame.html b/docs/meico/svg/package-frame.html
index 6da7f566..1b74cd16 100644
--- a/docs/meico/svg/package-frame.html
+++ b/docs/meico/svg/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.svg
-
+
diff --git a/docs/meico/svg/package-summary.html b/docs/meico/svg/package-summary.html
index 7a3ee306..359d8658 100644
--- a/docs/meico/svg/package-summary.html
+++ b/docs/meico/svg/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.svg
-
+
diff --git a/docs/meico/svg/package-tree.html b/docs/meico/svg/package-tree.html
index 004063a7..4236e7c3 100644
--- a/docs/meico/svg/package-tree.html
+++ b/docs/meico/svg/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.svg Class Hierarchy
-
+
diff --git a/docs/meico/svg/package-use.html b/docs/meico/svg/package-use.html
index 5ab9c077..017ed3b4 100644
--- a/docs/meico/svg/package-use.html
+++ b/docs/meico/svg/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.svg
-
+
diff --git a/docs/meico/xml/AbstractXmlSubtree.html b/docs/meico/xml/AbstractXmlSubtree.html
index 0d5aec5b..18a7fe1f 100644
--- a/docs/meico/xml/AbstractXmlSubtree.html
+++ b/docs/meico/xml/AbstractXmlSubtree.html
@@ -2,9 +2,9 @@
-
+
AbstractXmlSubtree
-
+
diff --git a/docs/meico/xml/XmlBase.html b/docs/meico/xml/XmlBase.html
index c4f5e1e4..1d5340bb 100644
--- a/docs/meico/xml/XmlBase.html
+++ b/docs/meico/xml/XmlBase.html
@@ -2,9 +2,9 @@
-
+
XmlBase
-
+
diff --git a/docs/meico/xml/class-use/AbstractXmlSubtree.html b/docs/meico/xml/class-use/AbstractXmlSubtree.html
index 320d42a9..2afac8f1 100644
--- a/docs/meico/xml/class-use/AbstractXmlSubtree.html
+++ b/docs/meico/xml/class-use/AbstractXmlSubtree.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.xml.AbstractXmlSubtree
-
+
diff --git a/docs/meico/xml/class-use/XmlBase.html b/docs/meico/xml/class-use/XmlBase.html
index e9023ab7..4efcf584 100644
--- a/docs/meico/xml/class-use/XmlBase.html
+++ b/docs/meico/xml/class-use/XmlBase.html
@@ -2,9 +2,9 @@
-
+
Uses of Class meico.xml.XmlBase
-
+
diff --git a/docs/meico/xml/package-frame.html b/docs/meico/xml/package-frame.html
index 3b096ca5..820d8181 100644
--- a/docs/meico/xml/package-frame.html
+++ b/docs/meico/xml/package-frame.html
@@ -2,9 +2,9 @@
-
+
meico.xml
-
+
diff --git a/docs/meico/xml/package-summary.html b/docs/meico/xml/package-summary.html
index 4e134e40..fb3f148f 100644
--- a/docs/meico/xml/package-summary.html
+++ b/docs/meico/xml/package-summary.html
@@ -2,9 +2,9 @@
-
+
meico.xml
-
+
diff --git a/docs/meico/xml/package-tree.html b/docs/meico/xml/package-tree.html
index 12d1e320..24bb9226 100644
--- a/docs/meico/xml/package-tree.html
+++ b/docs/meico/xml/package-tree.html
@@ -2,9 +2,9 @@
-
+
meico.xml Class Hierarchy
-
+
diff --git a/docs/meico/xml/package-use.html b/docs/meico/xml/package-use.html
index e678e765..ad25348d 100644
--- a/docs/meico/xml/package-use.html
+++ b/docs/meico/xml/package-use.html
@@ -2,9 +2,9 @@
-
+
Uses of Package meico.xml
-
+
diff --git a/docs/overview-frame.html b/docs/overview-frame.html
index a0d549c9..a3e6d380 100644
--- a/docs/overview-frame.html
+++ b/docs/overview-frame.html
@@ -2,9 +2,9 @@
-
+
Overview List
-
+
diff --git a/docs/overview-summary.html b/docs/overview-summary.html
index d0945632..550e5537 100644
--- a/docs/overview-summary.html
+++ b/docs/overview-summary.html
@@ -2,9 +2,9 @@
-
+
Overview
-
+
diff --git a/docs/overview-tree.html b/docs/overview-tree.html
index 26305e2e..6e5f4150 100644
--- a/docs/overview-tree.html
+++ b/docs/overview-tree.html
@@ -2,9 +2,9 @@
-
+
Class Hierarchy
-
+
diff --git a/docs/serialized-form.html b/docs/serialized-form.html
index 0bbc96cc..5360b5f9 100644
--- a/docs/serialized-form.html
+++ b/docs/serialized-form.html
@@ -2,9 +2,9 @@
-
+
Serialized Form
-
+
diff --git a/history.md b/history.md
index a260eaf7..a31a399b 100644
--- a/history.md
+++ b/history.md
@@ -5,7 +5,7 @@
- Added basic MusicXML integration to meico and meicoApp. Both MusicXML file formats, raw (`.musicxml`, `.xml`) and compressed (`.mxl`) are supported for reading and writing.
- While the ProxyMusic framework does not support marshalling and demarshalling of MusicXML `score-timewise`, class `meico.musicxml.MusicXml` supports conversion of `score-timewise` to `score-partwise` and vice versa.
- Integration of MusicXML basic functionality in meicoApp.
-- New class `meico.mei.Mei2MsmMpmConverter` has been added to implement a better modularization of different conversion options. All con version functionality from MEI to MSM and MPM moved from `meico.mei.MEI` into this class.
+- New class `meico.mei.Mei2MsmMpmConverter` has been added to implement a better modularization of different conversion options. All conversion functionality from MEI to MSM and MPM moved from `meico.mei.MEI` and `meico.mei.Helper` into this class. Class `meico.mei.Helper` still holds all static methods, as these are useful also outside of this particular conversion.
- Slight changes in methods `convert()` and `makeMovement()` of class `meico.mei.Mei2MsmMpmConverter`. The `relatedResources` entries in the MPM are now only with filenames and no longer with the absloute path on the local machine.
- Added MusicXML Coverage Documentation.
- XOM update to v1.3.8.
diff --git a/src/meico/Meico.java b/src/meico/Meico.java
index 831f49f9..66e68275 100644
--- a/src/meico/Meico.java
+++ b/src/meico/Meico.java
@@ -5,7 +5,7 @@
* @author Axel Berndt
*/
public class Meico {
- public static final String version = "0.8.49";
+ public static final String version = "0.9.0";
public static void main(String[] args) {
System.out.println("meico v" + Meico.version);
diff --git a/src/meico/mei/Helper.java b/src/meico/mei/Helper.java
index 81581192..34160356 100644
--- a/src/meico/mei/Helper.java
+++ b/src/meico/mei/Helper.java
@@ -31,74 +31,6 @@
* @author Axel Berndt.
*/
public class Helper {
- protected int ppq = 720; // default value for pulses per quarter
- protected int endingCounter = 0; // a counter of ending elements in the mei source
- protected boolean dontUseChannel10 = true; // set this flag false if you allow to "misuse" the midi drum channel for other instruments; in standard midi output this produces weird results, but when you work with vst plugins etc. there is no reason to avoid channel 10
- protected Element currentMsmMovement = null;
- protected Element currentMdiv = null;
- protected Element currentWork = null;
- protected Element currentPart = null; // this points to the current part element in the msm
- protected Element currentLayer = null; // this points to the current layer element in the mei source
- protected Element currentMeasure = null;
- protected Element currentChord = null;
- protected ArrayList accid = new ArrayList<>(); // holds accidentals that appear within measures to be considered during pitch computation
- protected ArrayList endids = new ArrayList<>(); // msm and mpm elements that will be terminated at the time position of an mei element with a specified endid
- protected ArrayList tstamp2s = new ArrayList<>(); // mpm elements that will be terminated at a position in another measure indicated by attribute tstamp2
- protected ArrayList lyrics = new ArrayList<>(); // this is used to collect lyrics converted from mei syl elements to be added to an msm note
- protected HashMap allNotesAndChords = new HashMap<>(); // when converting a new mdiv this hashmap is created first to accelarate lookup for notes and chords via xml:id
- protected ArrayList> arpeggiosToSort = new ArrayList<>(); // for some arpeggios the note.order attribute must be sorted to get an up (true) or downwards (false) direction; this is done during postprocessing of mdiv elements when we know the notes' pitch values (also available via allNotesAndChords, attribute pnum); this list holds all attributes note.order to be reordered and the corresponding direction (true=up, false=down)
- protected Performance currentPerformance = null; // a quick link to the current movement's current performance
- protected List movements = new ArrayList<>(); // this list holds the resulting Msm objects after performing MEI-to-MSM conversion
- protected List performances = new ArrayList<>(); // this list holds the resulting Mpm objects after performing MEI-to-MSM conversion
-
- /**
- * constructor
- */
- protected Helper() {
- }
-
- /**
- * constructor
- * @param ppq
- */
- protected Helper(int ppq) {
- this.ppq = ppq;
- }
-
- /**
- * this method is called when making a new movement
- */
- protected void reset() {
- this.endingCounter = 0;
- this.currentMsmMovement = null;
- this.currentMdiv = null;
- this.currentWork = null;
- this.currentPerformance = null;
- this.currentPart = null;
- this.currentLayer = null;
- this.currentMeasure = null;
- this.currentChord = null;
- this.accid.clear();
- this.endids.clear();
- this.tstamp2s.clear();
- this.lyrics.clear();
- this.allNotesAndChords.clear();
- }
-
- /**
- * when a new MEI mdiv is processed this method generates a hashmap of all notes and chords, so we don't have to do it again during processing (e.g. in method isSameLayer() etc.)
- * @param mdiv
- */
- public void indexNotesAndChords(Element mdiv) {
- this.allNotesAndChords.clear();
- Nodes nodes = mdiv.query("descendant::*[(local-name()='note' or local-name()='chord') and attribute::xml:id]");
-
- for (int i=0; i < nodes.size(); ++i) {
- Element node = (Element) nodes.get(i);
- this.allNotesAndChords.put(Helper.getAttributeValue("id", node), node);
- }
- }
-
/**
* This method validates a file against a schema. If the validation fails it throws an exception.
* @param file
@@ -312,57 +244,6 @@ public static int addToMap(Element addThis, Element map) {
return 0; // return the index
}
- /**
- * compute the midi time of an mei element
- * @return
- */
- protected double getMidiTime() {
- if (this.currentPart != null) // if we are within a staff environment
- return Double.parseDouble(this.currentPart.getAttributeValue("currentDate")); // we have a more precise date somewhere within a measure
-
- if (this.currentMeasure != null) // if we are within a measure
- return Double.parseDouble(this.currentMeasure.getAttributeValue("date")); // take it
-
- if (this.currentMsmMovement == null) // if we are outside of any movement
- return 0.0; // return 0.0
-
- // go through all parts, determine the latest currentDate and return it
- Elements parts = this.currentMsmMovement.getChildElements("part"); // get the list of all parts
- double latestDate = 0.0; // here comes the result
- for (int i = parts.size()-1; i >= 0; --i) { // go through that list
- double date = Double.parseDouble(parts.get(i).getAttributeValue("currentDate"));// get the part's date
- if (latestDate < date) // if this part's date is later than latestDate so far
- latestDate = date; // set latestDate to date
- }
- return latestDate; // return the latest date of all parts
- }
-
- /**
- * compute the midi time of an mei element and return it as String
- * @return
- */
- protected String getMidiTimeAsString() {
- if (this.currentPart != null) // if we are within a staff environment
- return this.currentPart.getAttributeValue("currentDate"); // we have a more precise date somewhere within a measure
-
- if (this.currentMeasure != null) // if we are within a measure
- return this.currentMeasure.getAttributeValue("date"); // take it
-
- if (this.currentMsmMovement == null) // if we are outside of any movement
- return "0.0"; // return 0.0
-
- // go through all parts, determine the latest currentDate and return it
- Elements parts = this.currentMsmMovement.getChildElements("part"); // get the list of all parts
- double latestDate = 0.0; // here comes the result
- for (int i = parts.size()-1; i >= 0; --i) { // go through that list
- double date = Double.parseDouble(parts.get(i).getAttributeValue("currentDate"));// get the part's date
- if (latestDate < date) // if this part's date is later than latestDate so far
- latestDate = date; // set latestDate to date
- }
- return Double.toString(latestDate); // return the latest date of all parts
- }
-
-
/**
* this method parses an input string, extracts all integer substrings and returns them as a list of integers
* @param string
@@ -381,55 +262,6 @@ public static ArrayList extractAllIntegersFromString(String string) {
return results; // return the resulting list of integers
}
- /**
- * compute the length of one measure in midi ticks at the currentDate in the currentPart of the currentMovement; if no time signature information available it returns the length of a 4/4 measure
- * @param msmPartContext specify the MSM part in which's context the (possibly local) measure length is determined or set it null, this is necessary as currentPart is not necessarily the correct context
- * @return
- */
- protected double getOneMeasureLength(Element msmPartContext) {
- double[] ts = this.getCurrentTimeSignature(msmPartContext);
- return (4.0 * this.ppq * ts[0]) / ts[1];
- }
-
- /**
- * get the current time signature as tuplet of doubles [numerator, denominator]
- * @param msmPartContext specify the MSM part in which's context the (possibly local) time signature is determined or set it null, this is necessary as currentPart is not necessarily the correct context
- * @return
- */
- protected double[] getCurrentTimeSignature(Element msmPartContext) {
- // get the value of one measure from the local or global timeSignatureMap
- Elements es = null;
- if (msmPartContext != null) // we are within a part
- es = msmPartContext.getFirstChildElement("dated").getFirstChildElement("timeSignatureMap").getChildElements(); // try to get its timeSignature
- if ((es == null) || (es.size() == 0)) // if we are outside a part or the local map is empty
- es = this.currentMsmMovement.getFirstChildElement("global").getFirstChildElement("dated").getFirstChildElement("timeSignatureMap").getChildElements(); // get global entries
- if ((es.size() == 0) && (this.currentWork != null)) { // get the meter element from meiHead
- Element meter = this.currentWork.getFirstChildElement("meter");
- if (meter != null) {
- Attribute count = meter.getAttribute("count");
- Attribute unit = meter.getAttribute("unit");
- return new double[]{((count == null) ? 4.0 : Double.parseDouble(count.getValue())), ((unit == null) ? 4.0 : Double.parseDouble(unit.getValue()))};
- }
- }
-
- // get length of one measure (4/4 is default if information is insufficient)
- double denom = (es.size() == 0) ? 4.0 : Double.parseDouble(es.get(es.size()-1).getAttributeValue("denominator"));
- double num = (es.size() == 0) ? 4.0 : Double.parseDouble(es.get(es.size()-1).getAttributeValue("numerator"));
-
- return new double[]{num, denom};
- }
-
- /**
- * compute the length of one measure with specified numerator and denominator values (the underlying time signature)
- * @param numerator
- * @param denominator
- * @return
- */
- protected double computeMeasureLength (double numerator, double denominator) {
- return (4.0 * this.ppq * numerator) / denominator;
-
- }
-
/**
* create a flat copy of element e including its attributes but not its child elements
* @param e
@@ -500,18 +332,18 @@ public static String addUUID(Element toThis) {
* @param toThis
* @return the newly created attribute
*/
- protected static Attribute copyId(Element ofThis, Element toThis) {
+ public static Attribute copyId(Element ofThis, Element toThis) {
// return copyIdNoNs(ofThis, toThis);
return copyIdNs(ofThis, toThis);
}
/**
- * copies the id attribute from ofThis (if present) into toThis, without namespace
+ * copies the id attribute from ofThis (if present) into toThis, without namespace binding
* @param ofThis
* @param toThis
* @return the newly created attribute
*/
- private static Attribute copyIdNoNs(Element ofThis, Element toThis) {
+ public static Attribute copyIdNoNs(Element ofThis, Element toThis) {
Attribute id = Helper.getAttribute("id", ofThis);
if (id != null) {
Attribute newId = new Attribute("id", id.getValue());
@@ -549,212 +381,6 @@ public static Element getParentElement(Element ofThis) {
return null;
}
- /**
- * return part entry in current movement or null
- * @param id
- * @return
- */
- protected Element getPart(String id) {
- if ((id == null) || (id.isEmpty())) return null;
-
- Elements parts = this.currentMsmMovement.getChildElements("part");
-
- for (int i = parts.size()-1; i >= 0; --i) { // search all part entries in this movement
- if (parts.get(i).getAttributeValue("number").equals(id) || Helper.getAttributeValue("id", parts.get(i)).equals(id)) // for the id
- return parts.get(i); // return if found
- }
-
- return null; // nothing found, return nullptr
- }
-
- /**
- * returns the layer element in the mei tree of ofThis
- * @param ofThis
- * @return the layer element or null if ofThis is not in a layer
- */
- protected static Element getLayer(Element ofThis) {
- for (Node e = ofThis.getParent(); e != ofThis.getDocument().getRootElement(); e = e.getParent()) { // search for a layer element among the parents of ofThis
- if ((e instanceof Element) && (((Element)e).getLocalName().equals("layer"))) // found one
- return (Element)e;
- }
- return null;
- }
-
- /**
- * returns the def or n attribute value of an mei layer element or empty string if it is no layer or both attributes are missing
- * @param layer
- * @return def, n or empty string
- */
- protected static String getLayerId(Element layer) {
- if ((layer == null) || !layer.getLocalName().equals("layer")) // if the element is null or no layer
- return ""; // return empty string
- if (layer.getAttribute("def") != null) // check for the def attribute (preferred over n)
- return layer.getAttributeValue("def"); // return its string
- if (layer.getAttribute("n") != null) // check for the n attribute
- return layer.getAttributeValue("n"); // return its string
- return ""; // no def or n attribute, hence, return empty string
- }
-
- /**
- * returns the staff element in the mei tree of ofThis
- * @param ofThis
- * @return the staff element or null if ofThis is not in a staff
- */
- protected static Element getStaff(Element ofThis) {
- for (Node e = ofThis.getParent(); e != ofThis.getDocument().getRootElement(); e = e.getParent()) { // search for a staff element among the parents of ofThis
- if ((e instanceof Element) && (((Element)e).getLocalName().equals("staff"))) // found one
- return (Element)e;
- }
- return null;
- }
-
- /**
- * returns the def or n attribute value of an mei staff element or empty string if it is no staff or both attributes are missing
- * @param staff
- * @return def, n or empty string
- */
- protected static String getStaffId(Element staff) {
- if ((staff == null) || !staff.getLocalName().equals("staff")) // if the element is null or no staff
- return ""; // return empty string
- if (staff.getAttribute("def") != null) // check for the def attribute (preferred over n)
- return staff.getAttributeValue("def"); // return its string
- if (staff.getAttribute("n") != null) // check for the n attribute
- return staff.getAttributeValue("n"); // return its string
- return ""; // no def or n attribute, hence, return empty string
- }
-
- /**
- * this method writes the layer's ref or n id to a layer attribute and adds that to ofThis
- * @param toThis an element that must be child of a layer element in mei
- */
- protected void addLayerAttribute(Element toThis) {
- Element layer = this.currentLayer; // get the current layer from the current mei processing
-// if (layer == null) layer = getLayer(toThis); // if no current layer, search the parents of toThis for a layer element
- if (layer == null) return; // if still no layer found, we are done
-
- // add the value of the layer's def or n attribute to toThis as attribute layer
- if (layer.getAttribute("def") != null) {
- toThis.addAttribute(new Attribute("layer", layer.getAttributeValue("def")));
- }
- else if (layer.getAttribute("n") != null)
- toThis.addAttribute(new Attribute("layer", layer.getAttributeValue("n")));
- }
-
- /**
- * cleanup of the msm objects to remove all conversion related and no longer needed entries in the msm objects (miscMaps, currentDate and tie attributes)
- * @param msms
- */
- public static void msmCleanup(List msms) {
- for (Msm msm : msms) // go through all msm objects in the input list
- msmCleanup(msm); // make the cleanup
- }
-
- /**
- * make the cleanup of one msm object; this removes all miscMaps, currentDate, tie, and layer and lots of further non-MSM confrom attributes
- * @param msm
- */
- public static void msmCleanup(Msm msm) {
- // delete all miscMaps and non-msm conform attributes
- Nodes n = msm.getRootElement().query("descendant::*[local-name()='miscMap'] | descendant::*[attribute::currentDate]/attribute::currentDate | descendant::*[attribute::tie]/attribute::tie | descendant::*[attribute::layer]/attribute::layer | descendant::*[attribute::endid]/attribute::endid | descendant::*[attribute::tstamp2]/attribute::tstamp2 | descendant::*[local-name()='goto' and attribute::n]/attribute::n");
- for (int i=0; i < n.size(); ++i) {
- if (n.get(i) instanceof Element) {
- n.get(i).getParent().removeChild(n.get(i));
-// n.get(i).detach();
- }
-
- if (n.get(i) instanceof Attribute)
- ((Element) n.get(i).getParent()).removeAttribute((Attribute) n.get(i));
- }
- msm.deleteEmptyMaps();
- }
-
- /**
- * some mpm data is not in its final state (e.g., dynamics elements with an end attribute), this method makes these final
- * @param mpms
- */
- public static void mpmPostprocessing(List mpms) {
- for (Mpm mpm : mpms) // go through all mpm objects in the input list
- mpmPostprocessing(mpm); // do the postprocessing
- }
-
- /**
- * some mpm data is not in its final state (e.g., dynamics elements with an end attribute), this method makes these final
- * @param mpm
- */
- public static void mpmPostprocessing(Mpm mpm) {
- ArrayList maps = new ArrayList<>();
-
- for (int p=0; p < mpm.size(); ++p) { // go through all performances
- Performance perf = mpm.getPerformance(p);
-
- // collect all global and local dynamicsMaps and tempoMaps
- GenericMap aMap = perf.getGlobal().getDated().getMap(Mpm.DYNAMICS_MAP);
- if (aMap != null)
- maps.add(aMap);
-
- aMap = perf.getGlobal().getDated().getMap(Mpm.TEMPO_MAP);
- if (aMap != null)
- maps.add(aMap);
-
- ArrayList parts = perf.getAllParts();
- for (int pp=0; pp < perf.size(); ++pp) { // go through all parts
- Part part = parts.get(pp);
-
- aMap = part.getDated().getMap(Mpm.DYNAMICS_MAP);
- if (aMap != null)
- maps.add(aMap);
-
- aMap = part.getDated().getMap(Mpm.TEMPO_MAP);
- if (aMap != null)
- maps.add(aMap);
- }
- }
-
- // go through all the maps' elements and finalize them
- for (GenericMap map : maps) {
- for (int e=0; e < map.size(); ++e) {
- Element d = map.getElement(e);
-
- // handle remaining endid attributes
- Attribute endid = d.getAttribute("endid");
- if (endid != null) // if the instruction still has an endid (i.e., it never occured during conversion and the end is unknown)
- d.removeAttribute(endid); // just remove it, it is not part of the MPM specification
-
- // handle remaining tstamp2 attributes
- Attribute tstamp2 = d.getAttribute("tstamp2");
- if (tstamp2 != null) // if the instruction still has a tstamp2 (i.e., it never occured during conversion and the end is unknown)
- d.removeAttribute(tstamp2); // just remove it, it is not part of the MPM specification
-
- Attribute end = d.getAttribute("date.end");
- if (end != null) { // if it has an end attribute
- double endDate = Double.parseDouble(end.getValue()); // get the end date
- d.removeAttribute(end); // remove the attribute, it is not part of the MPM specification
- Element next = map.getElement(e + 1); // get the subsequent element in the map
- if ((next == null) || (Double.parseDouble(next.getAttributeValue("date")) > endDate)) { // if the end date is before the next instruction in the map or there is no next instruction
- Attribute t = d.getAttribute("transition.to"); // is there a transition.to attribute? if not we have nothing meaningful to do here
- if (t != null) { // if there is a transition.to
- String elementType = d.getLocalName(); // get the type of the element
- Element endElement = new Element(elementType, Mpm.MPM_NAMESPACE); // create a new instruction
- endElement.addAttribute(new Attribute("date", Double.toString(endDate))); // its date is the end date
-
- switch (elementType) {
- case "dynamics":
- endElement.addAttribute(new Attribute("volume", t.getValue())); // its volume is the transition.to value
- break;
- case "tempo":
- endElement.addAttribute(new Attribute("bpm", t.getValue())); // its bpm is the transition.to value
- break;
- default:
- continue;
- }
- map.addElement(endElement); // insert it behind thew current element
- }
- }
- }
- }
- }
- }
-
/**
* When articulationMaps are expanded via GenericMap.applySequencingMap() the noteid attribute is not updated.
* Therefor, we get a HashMap from Msm.resolveRepetitions() and apply it to the already expanded articulationMap via this method.
@@ -780,514 +406,6 @@ public static void updateMpmNoteidsAfterResolvingRepetitions(GenericMap map, Has
}
}
-
- /**
- * helper method to generate MPM TempoData from an MEI tempo element,
- * only the timing data is not computed here
- * @param tempo
- * @param msmPartContext
- * @return
- */
- public TempoData parseTempo(Element tempo, Element msmPartContext) {
- TempoData tempoData = new TempoData(); // tempo data to generate an entry in an MPM tempoMap
-
- // determine numeric tempo if such a value is specified
- Attribute mm = tempo.getAttribute("mm");
- if (mm != null) // if there is a Maezel's Metronome value
- tempoData.bpmString = mm.getValue(); // take this as the bpm value
- else {
- Attribute midiBpm = tempo.getAttribute("midi.bpm");
-// tempoData.beatLength = 0.25; // not necessary because it is initialized with 0.25
- if (midiBpm != null) // if there is a MIDI bpm attribute (always to the basis of a quarter note)
- tempoData.bpmString = midiBpm.getValue(); // take this as bpm value
- else {
- Attribute midiMspb = tempo.getAttribute("midi.mspb");
- if (midiMspb != null) // if there is a microseconds per quarter note attribute
- tempoData.bpmString = Double.toString((60000000.0 / (Double.parseDouble(midiMspb.getValue())))); // compute the bpm value from it
- }
- }
-
- // compute beatLength
- Attribute mmUnit = tempo.getAttribute("mm.unit");
- tempoData.beatLength = (mmUnit != null) ? Helper.duration2decimal(mmUnit.getValue()) : (1.0 / this.getCurrentTimeSignature(msmPartContext)[1]); // use the specified mm.unit for beatLength or (if missing) use the denominator of the underlying time signature
- Attribute mmDots = tempo.getAttribute("mm.dots");
- if (mmDots != null) { // are there dots involved in the beatLength
- int dots = Integer.parseInt(mmDots.getValue()); // get their number
- for (double d = tempoData.beatLength; dots > 0; --dots) { // for each dot; variable d holds what has to be added to the beatLength value
- d /= 2; // half d
- tempoData.beatLength += d; // add to beatLength
- }
- }
-
- // process tempo descriptor, i.e. the value of the MEI element
- String descriptor = tempo.getValue(); // the textual representation of a tempo instruction
- if (descriptor.isEmpty()) { // if no value/text at this element
- Attribute label = tempo.getAttribute("label"); // try attribute label
- if (label != null) descriptor = label.getValue(); // if there is a label attribute, use its value
- }
- if (!descriptor.isEmpty()) { // a textual instruction is given
- if (descriptor.contains("rit") || descriptor.contains("rall") || descriptor.contains("largando") || descriptor.contains("calando")) { // slow down
- if (tempoData.bpmString == null)
- tempoData.bpmString = "?";
- tempoData.transitionToString = "-";
- }
- else if (descriptor.contains("accel") || descriptor.contains("string")) { // accelerate
- if (tempoData.bpmString == null)
- tempoData.bpmString = "?";
- tempoData.transitionToString = "+";
- }
- else { // an instantaneous instruction that might be added to the global styleDef
- TempoStyle tempoStyle = (TempoStyle) this.currentPerformance.getGlobal().getHeader().getStyleDef(Mpm.TEMPO_STYLE, "MEI export"); // get the global tempoSyles/styleDef element
- if (tempoStyle == null) // if there is none
- tempoStyle = (TempoStyle) this.currentPerformance.getGlobal().getHeader().addStyleDef(Mpm.TEMPO_STYLE, "MEI export"); // create one
-
- if ((tempoStyle != null) && (tempoStyle.getDef(descriptor) == null)) { // if there is a descriptor string for this tempo instruction
- // use the specified tempo or, if not defined, try to create a default numeric value for the descriptor string
- if (tempoData.bpmString == null)
- tempoStyle.addDef(TempoDef.createDefaultTempoDef(descriptor));
- else
- tempoStyle.addDef(TempoDef.createTempoDef(descriptor, Double.parseDouble(tempoData.bpmString)));
- }
- tempoData.bpmString = descriptor;
- }
- }
- if (tempoData.bpmString == null) { // if no textual descriptor and no bpm is given
- System.err.println("Cannot process MEI element " + tempo.toXML() + ". No text or any of the attributes 'mm', 'midi.bpm', 'midi.mspb', or 'label' is specified.");
- return null; // no sufficient information, cancel
- }
-
- if (tempoData.transitionToString != null)
- tempoData.meanTempoAt = 0.5; // by default we create a very neutral/mechanico tempo transition, this should be edited by the user/application
-
- // read the xml:id
- Attribute id = Helper.getAttribute("id", tempo);
- tempoData.xmlId = (id == null) ? null : id.getValue();
-
- return tempoData;
- }
-
- /**
- * this method moves all subtrees of a measure that are non staff subtrees, i.e. they are control event subtrees, to the front as these have to be processed before the staffs
- * @param measure
- */
- protected static void reorderMeasureContent(Element measure) {
- Elements subtrees = measure.getChildElements(); // get all children of the measure
-
- for (int i = subtrees.size()-1; i >= 0; --i) { // for each child
- Element subtree = subtrees.get(i); // get it as element
- if (subtree.query("descendant-or-self::*[local-name()='staff' or local-name()='oStaff']").size() == 0) { // if this subtree contains no staff element it is a control event subtree
- subtree.detach(); // remove it from the measure
- measure.insertChild(subtree, 0); // and add it at the front of the measure
- }
- }
- }
-
- /**
- * return the first element in the endids list with an endid attribute value that equals id
- * @param id
- * @return the index in the endid list or -1 if not found
- */
- private int getEndid(String id) {
- for (int i=0; i < this.endids.size(); ++i) { // go through the list of pending elements to be ended
- if (this.endids.get(i).getAttributeValue("endid").equals(id)) // found
- return i; // return it
- }
- return -1;
- }
-
- /**
- * check for pending elements with endid attributes to be finished when the element with this endid is found,
- * note that this will compute the end date including(!) the duration of the element (except for slurs) that endid pointes to, i.e. it includes the endid element
- * @param e
- */
- protected void checkEndid(Element e) {
- String id = "#" + Helper.getAttributeValue("id", e); // get id of the current element
- for (int j = this.getEndid(id); j >= 0; j = this.getEndid(id)) { // find all pending elements in the endid list to be finished at this element
- this.endids.get(j).addAttribute(new Attribute("date.end", Double.toString(this.getMidiTime() + ((this.endids.get(j).getLocalName().equals("slur")) ? 0.0 : this.computeDuration(e))))); // finish corresponding element, only slurs should not include the duration
- this.endids.remove(j); // remove element from list, it is finished
- }
- }
-
- /**
- * this method is for note elements to check whether one of the pending slurs applies for it
- * @param e
- */
- protected void checkSlurs(Element e) {
- Elements slurs = this.currentMsmMovement.getFirstChildElement("global").getFirstChildElement("dated").getFirstChildElement("miscMap").getChildElements("slur");
-
- for (int i = slurs.size() - 1; i >= 0; --i) { // go through the global slurs
- if ((slurs.get(i).getAttributeValue("date") != null) && (Double.parseDouble(slurs.get(i).getAttributeValue("date")) > this.getMidiTime())) { // if this slur element is after e
- continue; // continue searching
- }
- if (slurs.get(i).getAttribute("date.end") != null) { // if it is before e
- double endDate = Double.parseDouble(slurs.get(i).getAttributeValue("date.end"));
- if (endDate < this.getMidiTime()) { // if the end date of this slur (if one is specified) is before e
- continue;
- }
- if (endDate == this.getMidiTime()) { // if the end date of this slur (if one is specified) is at e
- e.addAttribute(new Attribute("slur", "t")); // set the slur attribute to terminal
- this.addSlurId(slurs.get(i), e);
- return; // no need to look for further slurs
- }
- }
- e.addAttribute(new Attribute("slur", "im"));
- this.addSlurId(slurs.get(i), e);
- }
-
- if (this.currentPart != null) {
- String layerId = getLayerId(getLayer(e)); // get the current layer's id reference
- slurs = this.currentPart.getFirstChildElement("dated").getFirstChildElement("miscMap").getChildElements("slur");
-
- for (int i = slurs.size() - 1; i >= 0; --i) { // go through the local slurs
- if (!Helper.isSameLayer(slurs.get(i), layerId)) { // check whether this slur is dedicated to a specific layer but not the current layer (layer of ofThis)
- continue;
- }
- if ((slurs.get(i).getAttributeValue("date") != null) && (Double.parseDouble(slurs.get(i).getAttributeValue("date")) > this.getMidiTime())) { // if this slur element is after ofThis
- continue;
- }
- if (slurs.get(i).getAttribute("date.end") != null) { // if it is before e
- double endDate = Double.parseDouble(slurs.get(i).getAttributeValue("date.end"));
- if (endDate < this.getMidiTime()) { // if the end date of this slur (if one is specified) is before e
- continue;
- }
- if (endDate == this.getMidiTime()) { // if the end date of this slur (if one is specified) is at e
- e.addAttribute(new Attribute("slur", "t")); // set the slur attribute to terminal
- this.addSlurId(slurs.get(i), e);
- return; // no need to look for further slurs
- }
- }
- e.addAttribute(new Attribute("slur", "im"));
- this.addSlurId(slurs.get(i), e);
- }
- }
- }
-
- /**
- * a helper method to make the code of method checkSlurs() a bit more compact
- * @param fromThis
- * @param toThis
- */
- private void addSlurId(Element fromThis, Element toThis) {
- Attribute slurid = Helper.getAttribute("id", fromThis);
- if (slurid != null) {
- toThis.addAttribute(new Attribute("slurid", slurid.getValue() + "_meico_" + UUID.randomUUID().toString()));
- }
- }
-
- /**
- * this method converts the string of a barline (MEI element measure in attributes left and right) to an msm sequencing command (marker and/or goto element) and adds it to the global sequencingMap
- * @param barline the string that can be read in MEI measure attributes "left" and "right"
- * @param date the midi date
- * @param sequencingMap the sequencingMap to add the elements to
- */
- protected void barline2SequencingCommand(String barline, double date, Element sequencingMap) {
- String markerMessage = null;
- boolean makeGoto = false;
-
- // what does the barline say?
- switch (barline) {
- case "end": // it is an end line
- markerMessage = "fine"; // set a marker message (actually unneccessary at the end of the score nut requires for dacapo-al-fine situations)
- break;
- case "rptstart": // it is a repetition start point
- markerMessage = "repetition start"; // set marker message
- break;
- case "rptboth": // it is a repetition start and end point
- markerMessage = "repetition start"; // set marker message
- makeGoto = true; // trigger generation of a goto element in the sequencingMap
- break;
- case "rptend": // a repetition end point
- makeGoto = true; // trigger generation of a goto element in the sequencingMap
- break;
- default: // all other types of barlines
- return; // are irrelevant for the sequencing
- }
-
- // create a goto element and insert it into the sequencingMap
- if (makeGoto) { // if a goto element has to be generated
- Element gt = new Element("goto"); // make it
- gt.addAttribute(new Attribute("date", Double.toString(date))); // give it the date
- gt.addAttribute(new Attribute("activity", "1")); // process this goto at the first time, later on ignore it
- gt.addAttribute(new Attribute("target.date", "0")); // add the target.date attribute by default initialized with "0" (which means to start from the beginning)
- gt.addAttribute(new Attribute("target.id", "")); // add an empty target.id attribute (which means to start from the beginning)
- int index = Helper.addToMap(gt, sequencingMap); // insert the goto into the sequencingMap and store its index because we need to find the marker to jump to
- Nodes ns = sequencingMap.query("descendant::*[local-name()='marker' and (@message='repetition start' or @message='fine')]"); // get all the markers that are repetition start points or fines
- for (int i = ns.size()-1; i >= 0; --i) { // check them from back to front and find
- Element n = (Element)ns.get(i); // the element
- if (Double.parseDouble(n.getAttributeValue("date")) < date) { // that has a date right before the goto's date
- gt.getAttribute("target.date").setValue(n.getAttributeValue("date")); // take this as jump's target date
- gt.getAttribute("target.id").setValue("#" + n.getAttributeValue("id", "http://www.w3.org/XML/1998/namespace")); // take this as the jump's target marker
- break; // done
- }
- } // if nothing was found in this for loop, target.date and target.id remain as initialized
- }
-
- // generate a marker (potential jump target) and insert it into the sequencingMap
- if (markerMessage != null) { // if a marker should be generated
- Element marker = new Element("marker"); // do so
- marker.addAttribute(new Attribute("date", Double.toString(date))); // give it a date
- marker.addAttribute(new Attribute("message", markerMessage)); // set its message
- Attribute id = new Attribute("id", "meico_" + UUID.randomUUID().toString()); // give it a UUID
- id.setNamespace("xml", "http://www.w3.org/XML/1998/namespace"); // set its namespace to xml
- marker.addAttribute(id); // add the id attribute to the marker
- Helper.addToMap(marker, sequencingMap); // add the marker to the sequencingMap
- }
- }
-
- /**
- * This method interprets the clef.dis and clef.dis.place attribute as a transposition that is not encoded in the note elements.
- * In the mei sample set, however, this is not the case which leads to wrong octave transpositions of the respective notes.
- * Hence, I inserted a return 0 at the beginning.
- * If you want meico to feature the transponing behavior, remove the return 0 line and uncomment the remaining code.
- * @param scoreStaffDef the scoreDef or staffDef element from mei
- * @return the octave transposition that derives from the clef.dis or clef.dis.place attribute
- */
- protected static double processClefDis(Element scoreStaffDef) {
- return 0.0;
-
-// double oct = 0.0;
-// if (scoreStaffDef.getAttribute("clef.dis") != null) {
-// switch (scoreStaffDef.getAttributeValue("clef.dis")) {
-// case "8":
-// oct = 12.0;
-// break;
-// case "15":
-// oct = 24.0;
-// break;
-// case "22":
-// oct = 32.0;
-// }
-// if (scoreStaffDef.getAttribute("clef.dis.place") != null) {
-// switch (scoreStaffDef.getAttributeValue("clef.dis.place")) {
-// case "above":
-// break;
-// case "below":
-// oct *= -1;
-// break;
-// }
-// }
-// else
-// oct = 0.0;
-// }
-//
-// return oct;
- }
-
- /**
- * convert a tstamp value to midi ticks,
- * not suited for tstamp2!
- * @param tstamp
- * @param msmPartContext
- * @return
- */
- protected double tstampToTicks(String tstamp, Element msmPartContext) {
- if ((tstamp == null) || tstamp.isEmpty() || (this.currentMeasure == null)) // if there is no tstamp or it is empty or we are outside a measure (tstamps are only meaningful within a measure)
- return this.getMidiTime(); // just return the current time
-
- double date = Double.parseDouble(tstamp); // convert the tstamp value to double
- date = (date < 1.0) ? 0.0 : (date - 1.0); // date == 0.0 is the barline, first beat is at date 1.0, timing-wise both are equal
-
- double denom = this.getCurrentTimeSignature(msmPartContext)[1]; // get the current denominator
- double tstampToTicksConversionFactor = (4.0 * this.ppq) / denom; // multiply a tstamp with this and you get the midi tick value (don't forget to add the measure date!)
-
- return (date * tstampToTicksConversionFactor) + Double.parseDouble(this.currentMeasure.getAttributeValue("date"));
- }
-
- /**
- * MEI control events are usually placed out of timing at the end of a measure. If they use @startid meico places them right before the referred element. Otherwise, the timing has to be computed from @tstamp.ges or @tstamp.
- * The same is true for the duration of control events. It is computed from @dur, @tstamp2.ges, @tstamp2, or @endid (in this priority).
- * This method helps in handling this.
- * @param event the MEI control event
- * @param msmPartContext
- * @return an ArrayList of the following form (double date, Double endDate, Attribute tstamp2, Attribute endid), except for date every other entry can be null if no such data is present or applicable! The return value can also be null when the timing should better be computed on the basis of attribute startid, in that case this method does the repositioning of the event automatically and the invoking method should cancel this event's processing right now and get back to this event later on
- */
- protected ArrayList