cemfi / meico Goto Github PK
View Code? Open in Web Editor NEWA converter framework with support for MEI, MSM, MPM, MIDI, WAV, MP3, chroma, and XSLT
License: GNU General Public License v3.0
A converter framework with support for MEI, MSM, MPM, MIDI, WAV, MP3, chroma, and XSLT
License: GNU General Public License v3.0
Good day. Is it possible for meico to receive an input in a MusicXML format (.mxl) and convert it to others formats currently supported by meico? Thanks.
When MSM resolve repetitions is called, elements are copied, so does their xml:id. The resulting file contains multiple uses of the same xml:id which is not XML conform.
Hi there,
I just stumbled over your project and wanted to give it a try.
However, launching your app with java -jar meicoApp.jar
does not work.
With Java 1.8:
Exception in thread "main" java.lang.UnsupportedClassVersionError: javafx/application/Application has been compiled by a more recent version of the Java Runtime (class file version 54.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
With Java 11:
Graphics Device initialization failed for : d3d, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
... 1 more
Exception in thread "main" java.lang.RuntimeException: No toolkit found
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)
IMHO you should consider switching to OpenJFX.
Otherwise, you might want to improve your README with hints from here:
javafxports/openjdk-jfx#237
It would be nice to have the XSLT functionality accessible also in window mode.
[openjdk 11.0.19 2023-04-18]
On my openSUSE GNU/Linux box, calling
java -jar meicoApp.jar
gives
Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Application
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at meico.app.Main.main(Main.java:44)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 10 more
Is this expected? I would expect that OpenJDK 11 is recent enough for running Java 1.8. What am I missing?
Integrate audio playback in class Audio. Add a corresponding button to the window mode gui.
For the encoding of orchestral scores, we make extensive use of @sameas
for rests and notes shared by two instruments (encoded in two layers) on the same staff. Otherwise, full encoding in all layers would result in unwanted double rendering of elements.
In the example shown, the quarter rest in m. 11 of the oboes is fully encoded in layer 1 (= oboe 1) but with @sameas
in layer 2 (= oboe 2), i.e. @dur
is found in layer 1 only; the rest in layer 2 has to take the duration from the rest it is pointing at. MEICO currently ignores the rest in layer 2 with the effect that oboe 2 starts on the first beat of the measure instead of the second (echoed by oboe 1 on beat 2). This can be observed throughout mm. 11-14 in the oboes as well as in m. 18 in the horns (eighth rest).
Here is the data:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="https://music-encoding.org/schema/3.0.0/mei-all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<mei meiversion="3.0.0" xmlns="http://www.music-encoding.org/ns/mei">
<meiHead meiversion="3.0.0">
<fileDesc>
<titleStmt>
<title>example K. 165/01 mm. 11-18</title>
</titleStmt>
<pubStmt/>
</fileDesc>
</meiHead>
<music meiversion="3.0.0">
<body>
<mdiv n="1" xml:id="mdiv_165001">
<score xml:id="score_165001">
<scoreDef key.mode="major" key.pname="f" key.sig="1f" meter.count="4" meter.sym="common" meter.unit="4" xml:id="scoreDef_01">
<staffGrp barthru="false" xml:id="staffGrp_01">
<staffGrp symbol="bracket" xml:id="staffGrp_02">
<staffDef clef.line="2" clef.shape="G" label="Oboe I, II" lines="5" n="1" xml:id="staffDef_P1">
<layerDef label.abbr="Ob. I" n="1" xml:id="layerDef_2079"/>
<layerDef label.abbr="Ob. II" n="2" xml:id="layerDef_2082"/>
</staffDef>
</staffGrp>
<staffGrp symbol="bracket" xml:id="staffGrp_03">
<staffDef clef.line="2" clef.shape="G" key.sig="0" label="Corno I, II in Fa/F" lines="5" n="2" trans.semi="-7" xml:id="staffDef_P2">
<layerDef n="1" xml:id="layerDef_2091"/>
<layerDef n="2" xml:id="layerDef_2094"/>
</staffDef>
</staffGrp>
</staffGrp>
</scoreDef>
<section xml:id="section_allegro">
<measure n="11" xml:id="m11_k165_001">
<staff n="1" xml:id="staff_4512">
<layer n="1" xml:id="layer_4515">
<rest dur="4" tstamp="1" xml:id="rest_4518"/>
<beam xml:id="beam_4521">
<note dur="16" oct="5" pname="c" tstamp="2" xml:id="note_4524"/>
<note dur="16" oct="5" pname="d" tstamp="2.25" xml:id="note_4527"/>
<note dur="16" oct="5" pname="c" tstamp="2.5" xml:id="note_4530"/>
<note accid.ges="f" dur="16" oct="4" pname="b" tstamp="2.75" xml:id="note_4533"/>
</beam>
<beam xml:id="beam_4536">
<note artic="spicc" dur="8" oct="4" pname="a" tstamp="3" xml:id="note_4539"/>
<note accid.ges="f" artic="spicc" dur="8" oct="4" pname="b" tstamp="3.5" xml:id="note_4542"/>
</beam>
<note artic="spicc" dur="8" oct="5" pname="c" tstamp="4" xml:id="note_4545"/>
<rest dur="8" tstamp="4.5" xml:id="rest_4548"/>
</layer>
<layer n="2" xml:id="layer_4551">
<rest sameas="#rest_4518" tstamp="1" xml:id="rest_4554"/>
<beam xml:id="beam_4557">
<note dur="16" oct="4" pname="a" tstamp="2" xml:id="note_4560"/>
<note accid.ges="f" dur="16" oct="4" pname="b" tstamp="2.25" xml:id="note_4563"/>
<note dur="16" oct="4" pname="a" tstamp="2.5" xml:id="note_4566"/>
<note dur="16" oct="4" pname="g" tstamp="2.75" xml:id="note_4569"/>
</beam>
<beam xml:id="beam_4572">
<note dur="8" oct="4" pname="f" tstamp="3" xml:id="note_4575">
<artic artic="spicc" xml:id="artic_4575"/>
</note>
<note dur="8" oct="4" pname="g" tstamp="3.5" xml:id="note_4578">
<artic artic="spicc" xml:id="artic_4578"/>
</note>
</beam>
<note dur="8" oct="4" pname="a" tstamp="4" xml:id="note_4581">
<artic artic="spicc" xml:id="artic_4581"/>
</note>
<rest sameas="#rest_4548" tstamp="4.5" xml:id="rest_4584"/>
</layer>
</staff>
<staff n="2" xml:id="staff_4587">
<layer n="1" xml:id="layer_4590">
<note dur="4" oct="5" pname="c" tstamp="1" xml:id="note_4593"/>
<rest dur="4" tstamp="2" xml:id="rest_4596"/>
<rest dur="2" tstamp="3" xml:id="rest_4599"/>
</layer>
<layer n="2" xml:id="layer_4602">
<note dur="4" oct="4" pname="c" tstamp="1" xml:id="note_4605"/>
<rest sameas="#rest_4596" tstamp="2" xml:id="rest_4608"/>
<rest sameas="#rest_4599" tstamp="3" xml:id="rest_4611"/>
</layer>
</staff>
<slur endid="#note_4533" layer="1" staff="1" startid="#note_4524" xml:id="slur_4695"/>
<slur endid="#note_4569" layer="2" staff="1" startid="#note_4560" xml:id="slur_4698"/>
</measure>
<measure n="12" xml:id="m12_k165_001">
<staff n="1" xml:id="staff_4704">
<layer n="1" xml:id="layer_4707">
<rest dur="4" tstamp="1" xml:id="rest_4710"/>
<beam xml:id="beam_4713">
<note dur="16" oct="5" pname="f" tstamp="2" xml:id="note_4716"/>
<note dur="16" oct="5" pname="g" tstamp="2.25" xml:id="note_4719"/>
<note dur="16" oct="5" pname="f" tstamp="2.5" xml:id="note_4722"/>
<note dur="16" oct="5" pname="e" tstamp="2.75" xml:id="note_4725"/>
</beam>
<beam xml:id="beam_4728">
<note artic="spicc" dur="8" oct="5" pname="d" tstamp="3" xml:id="note_4731"/>
<note artic="spicc" dur="8" oct="5" pname="e" tstamp="3.5" xml:id="note_4734"/>
</beam>
<note artic="spicc" dur="8" oct="5" pname="f" tstamp="4" xml:id="note_4737"/>
<rest dur="8" tstamp="4.5" xml:id="rest_4740"/>
</layer>
<layer n="2" xml:id="layer_4743">
<rest sameas="#rest_4710" tstamp="1" xml:id="rest_4746"/>
<beam xml:id="beam_4749">
<note dur="16" oct="5" pname="d" tstamp="2" xml:id="note_4752"/>
<note dur="16" oct="5" pname="e" tstamp="2.25" xml:id="note_4755"/>
<note dur="16" oct="5" pname="d" tstamp="2.5" xml:id="note_4758"/>
<note dur="16" oct="5" pname="c" tstamp="2.75" xml:id="note_4761"/>
</beam>
<beam xml:id="beam_4764">
<note accid.ges="f" artic="spicc" dur="8" oct="4" pname="b" tstamp="3" xml:id="note_4767"/>
<note artic="spicc" dur="8" oct="5" pname="c" tstamp="3.5" xml:id="note_4770"/>
</beam>
<note dur="8" oct="5" pname="d" tstamp="4" xml:id="note_4773">
<supplied resp="#NMA-editors" xml:id="supplied_4773">
<artic artic="spicc" xml:id="artic_4773"/>
</supplied>
</note>
<rest sameas="#rest_4740" tstamp="4.5" xml:id="rest_4776"/>
</layer>
</staff>
<staff n="2" xml:id="staff_4779">
<layer n="1" xml:id="layer_4782">
<note dur="4" oct="5" pname="c" tstamp="1" xml:id="note_4785"/>
<rest dur="4" tstamp="2" xml:id="rest_4788"/>
<rest dur="2" tstamp="3" xml:id="rest_4791"/>
</layer>
<layer n="2" xml:id="layer_4794">
<note dur="4" oct="4" pname="c" tstamp="1" xml:id="note_4797"/>
<rest sameas="#rest_4788" tstamp="2" xml:id="rest_4800"/>
<rest sameas="#rest_4791" tstamp="3" xml:id="rest_4803"/>
</layer>
</staff>
<slur endid="#note_4725" layer="1" staff="1" startid="#note_4716" xml:id="slur_4887"/>
<slur endid="#note_4761" layer="2" staff="1" startid="#note_4752" xml:id="slur_4890"/>
</measure>
<measure n="13" xml:id="m13_k165_001">
<staff n="1" xml:id="staff_4899">
<layer n="1" xml:id="layer_4902">
<rest dur="4" tstamp="1" xml:id="rest_4905"/>
<beam xml:id="beam_4908">
<note dur="16" oct="6" pname="c" tstamp="2" xml:id="note_4911"/>
<note dur="16" oct="6" pname="d" tstamp="2.25" xml:id="note_4914"/>
<note dur="16" oct="6" pname="c" tstamp="2.5" xml:id="note_4917"/>
<note accid.ges="f" dur="16" oct="5" pname="b" tstamp="2.75" xml:id="note_4920"/>
</beam>
<beam xml:id="beam_4923">
<note artic="spicc" dur="8" oct="5" pname="a" tstamp="3" xml:id="note_4926"/>
<note accid.ges="f" artic="spicc" dur="8" oct="5" pname="b" tstamp="3.5" xml:id="note_4929"/>
</beam>
<note artic="spicc" dur="8" oct="6" pname="c" tstamp="4" xml:id="note_4932"/>
<rest dur="8" tstamp="4.5" xml:id="rest_4935"/>
</layer>
<layer n="2" xml:id="layer_4938">
<rest sameas="#rest_4905" tstamp="1" xml:id="rest_4941"/>
<beam xml:id="beam_4944">
<note dur="16" oct="5" pname="a" tstamp="2" xml:id="note_4947"/>
<note accid.ges="f" dur="16" oct="5" pname="b" tstamp="2.25" xml:id="note_4950"/>
<note dur="16" oct="5" pname="a" tstamp="2.5" xml:id="note_4953"/>
<note dur="16" oct="5" pname="g" tstamp="2.75" xml:id="note_4956"/>
</beam>
<beam xml:id="beam_4959">
<note artic="spicc" dur="8" oct="5" pname="f" tstamp="3" xml:id="note_4962"/>
<note artic="spicc" dur="8" oct="5" pname="g" tstamp="3.5" xml:id="note_4965"/>
</beam>
<note artic="spicc" dur="8" oct="5" pname="a" tstamp="4" xml:id="note_4968"/>
<rest sameas="#rest_4935" tstamp="4.5" xml:id="rest_4971"/>
</layer>
</staff>
<staff n="2" xml:id="staff_4974">
<layer n="1" xml:id="layer_4977">
<note dur="4" oct="5" pname="e" tstamp="1" xml:id="note_4980"/>
<rest dur="4" tstamp="2" xml:id="rest_4983"/>
<rest dur="2" tstamp="3" xml:id="rest_4986"/>
</layer>
<layer n="2" xml:id="layer_4989">
<note dur="4" oct="5" pname="c" tstamp="1" xml:id="note_4992"/>
<rest sameas="#rest_4983" tstamp="2" xml:id="rest_4995"/>
<rest sameas="#rest_4986" tstamp="3" xml:id="rest_4998"/>
</layer>
</staff>
<slur endid="#note_4920" layer="1" staff="1" startid="#note_4911" xml:id="slur_5088"/>
<slur endid="#note_4956" layer="2" staff="1" startid="#note_4947" xml:id="slur_5091"/>
</measure>
<measure n="14" xml:id="m14_k165_001">
<staff n="1" xml:id="staff_5100">
<layer n="1" xml:id="layer_5103">
<rest dur="4" tstamp="1" xml:id="rest_5106"/>
<beam xml:id="beam_5109">
<note accid.ges="f" dur="16" oct="5" pname="b" tstamp="2" xml:id="note_5112"/>
<note dur="16" oct="6" pname="c" tstamp="2.25" xml:id="note_5115"/>
<note accid.ges="f" dur="16" oct="5" pname="b" tstamp="2.5" xml:id="note_5118"/>
<note dur="16" oct="5" pname="a" tstamp="2.75" xml:id="note_5121"/>
</beam>
<beam xml:id="beam_5124">
<note artic="spicc" dur="8" oct="5" pname="g" tstamp="3" xml:id="note_5127"/>
<note artic="spicc" dur="8" oct="5" pname="a" tstamp="3.5" xml:id="note_5130"/>
</beam>
<note accid.ges="f" artic="spicc" dur="8" oct="5" pname="b" tstamp="4" xml:id="note_5133"/>
<rest dur="8" tstamp="4.5" xml:id="rest_5136"/>
</layer>
<layer n="2" xml:id="layer_5139">
<rest sameas="#rest_5106" tstamp="1" xml:id="rest_5142"/>
<beam xml:id="beam_5145">
<note dur="16" oct="5" pname="g" tstamp="2" xml:id="note_5148"/>
<note dur="16" oct="5" pname="a" tstamp="2.25" xml:id="note_5151"/>
<note dur="16" oct="5" pname="g" tstamp="2.5" xml:id="note_5154"/>
<note dur="16" oct="5" pname="f" tstamp="2.75" xml:id="note_5157"/>
</beam>
<beam xml:id="beam_5160">
<note artic="spicc" dur="8" oct="5" pname="e" tstamp="3" xml:id="note_5163"/>
<note artic="spicc" dur="8" oct="5" pname="f" tstamp="3.5" xml:id="note_5166"/>
</beam>
<note artic="spicc" dur="8" oct="5" pname="g" tstamp="4" xml:id="note_5169"/>
<rest sameas="#rest_5136" tstamp="4.5" xml:id="rest_5172"/>
</layer>
</staff>
<staff n="2" xml:id="staff_5175">
<layer n="1" xml:id="layer_5178">
<note dur="4" oct="5" pname="d" tstamp="1" xml:id="note_5181"/>
<rest dur="4" tstamp="2" xml:id="rest_5184"/>
<rest dur="2" tstamp="3" xml:id="rest_5187"/>
</layer>
<layer n="2" xml:id="layer_5190">
<note dur="4" oct="4" pname="g" tstamp="1" xml:id="note_5193"/>
<rest sameas="#rest_5184" tstamp="2" xml:id="rest_5196"/>
<rest sameas="#rest_5187" tstamp="3" xml:id="rest_5199"/>
</layer>
</staff>
<slur endid="#note_5121" layer="1" staff="1" startid="#note_5112" xml:id="slur_5289"/>
<slur endid="#note_5157" layer="2" staff="1" startid="#note_5148" xml:id="slur_5292"/>
</measure>
<measure n="15" xml:id="m15_k165_001">
<staff n="1" xml:id="staff_5298">
<layer n="1" xml:id="layer_5301">
<note dur="4" oct="5" pname="a" tstamp="1" xml:id="note_5304"/>
<note dur="4" oct="5" pname="f" tstamp="2" xml:id="note_5307"/>
<note dur="4" oct="5" pname="e" tstamp="3" xml:id="note_5310"/>
<note dur="4" oct="5" pname="d" tstamp="4" xml:id="note_5313"/>
</layer>
<layer n="2" xml:id="layer_5316">
<note dur="2" oct="5" pname="f" tstamp="1" xml:id="note_5319"/>
<note dur="4" oct="5" pname="e" tstamp="3" xml:id="note_5322"/>
<note dur="4" oct="5" pname="d" tstamp="4" xml:id="note_5325"/>
</layer>
</staff>
<staff n="2" xml:id="staff_5328">
<layer n="1" xml:id="layer_5331">
<note dur="1" oct="5" pname="c" tstamp="1" xml:id="note_5334"/>
</layer>
<layer n="2" xml:id="layer_5337">
<note dur="1" oct="4" pname="c" tstamp="1" xml:id="note_5340"/>
</layer>
</staff>
<tie endid="#note_5559" layer="1" staff="2" startid="#note_5334" xml:id="tie_5511"/>
<tie endid="#note_5565" layer="2" staff="2" startid="#note_5340" xml:id="tie_5512"/>
</measure>
<measure n="17" xml:id="m17_k165_001">
<staff n="1" xml:id="staff_5748">
<layer n="1" xml:id="layer_5751">
<note dur="4" oct="5" pname="c" tstamp="1" xml:id="note_5754"/>
<note dur="4" oct="5" pname="a" tstamp="2" xml:id="note_5757"/>
<note dur="2" oct="5" pname="g" tstamp="3" xml:id="note_5760"/>
</layer>
<layer n="2" xml:id="layer_5763">
<note dur="4" oct="5" pname="c" tstamp="1" xml:id="note_5766"/>
<note dur="2" oct="5" pname="f" tstamp="2" xml:id="note_5769"/>
<note dur="4" oct="5" pname="e" tstamp="4" xml:id="note_5772"/>
</layer>
</staff>
<staff n="2" xml:id="staff_5775">
<layer n="1" xml:id="layer_5778">
<note dur="4" oct="5" pname="c" tstamp="1" xml:id="note_5781"/>
<note dur="4" oct="5" pname="e" tstamp="2" xml:id="note_5784"/>
<note dur="2" oct="5" pname="d" tstamp="3" xml:id="note_5787"/>
</layer>
<layer n="2" xml:id="layer_5790">
<note dur="4" oct="4" pname="c" tstamp="1" xml:id="note_5793"/>
<note dur="2" oct="5" pname="c" tstamp="2" xml:id="note_5796"/>
<note dur="4" oct="4" pname="g" tstamp="4" xml:id="note_5799"/>
</layer>
</staff>
<trill layer="1" staff="1" startid="#note_5760" xml:id="trill_5919"/>
</measure>
<measure n="18" xml:id="m18_k165_001">
<staff n="1" xml:id="staff_5928">
<layer n="1" xml:id="layer_5931">
<note dur="4" oct="5" pname="f" tstamp="1" xml:id="note_5934"/>
<rest dur="4" tstamp="2" xml:id="rest_5937"/>
<rest dur="2" tstamp="3" xml:id="rest_5940"/>
</layer>
<layer n="2" xml:id="layer_5931a">
<note dur="4" oct="5" pname="f" tstamp="1" xml:id="note_5934a"/>
<rest sameas="#rest_5937" tstamp="2" xml:id="rest_5937a"/>
<rest sameas="#rest_5940" tstamp="3" xml:id="rest_5940a"/>
</layer>
</staff>
<staff n="2" xml:id="staff_5943">
<layer n="1" xml:id="layer_5946">
<beam xml:id="beam_5949">
<note dur="8" oct="5" pname="c" tstamp="1" xml:id="note_5952"/>
<note dur="8" oct="5" pname="c" tstamp="1.5" xml:id="note_5955"/>
</beam>
<note dur="4" oct="5" pname="c" tstamp="2" xml:id="note_5958"/>
<rest dur="8" tstamp="3" xml:id="rest_5961"/>
<note dur="8" oct="5" pname="c" tstamp="3.5" xml:id="note_5964"/>
<note dur="4" oct="5" pname="c" tstamp="4" xml:id="note_5967"/>
</layer>
<layer n="2" xml:id="layer_5970">
<beam xml:id="beam_5973">
<note dur="8" oct="4" pname="e" tstamp="1" xml:id="note_5976"/>
<note dur="8" oct="4" pname="c" tstamp="1.5" xml:id="note_5979"/>
</beam>
<note dur="4" oct="4" pname="c" tstamp="2" xml:id="note_5982"/>
<rest sameas="#rest_5961" tstamp="3" xml:id="rest_5985"/>
<note dur="8" oct="4" pname="c" tstamp="3.5" xml:id="note_5988"/>
<note dur="4" oct="4" pname="c" tstamp="4" xml:id="note_5991"/>
</layer>
</staff>
</measure>
</section>
</score>
</mdiv>
</body>
</music>
</mei>
The full piece is available at https://dme.mozarteum.at/movi/navigator/165/001/01
Support for @sameas
, especially for rests, is highly desirable. Otherwise orchestral scores cannot be played with accuracy in MEICO.
Hi Axel,
we have the following issues regarding the recognition of the instruments.
Case 1: Symphony
The french horn is mapped to soprano saxophone because we use German and Italian terms in the <label>:
<mei meiversion="3.0.0" xmlns="http://www.music-encoding.org/ns/mei">
<meiHead>
<fileDesc>
<titleStmt>
<title label="NMA digital" type="unit">an example</title>
</titleStmt>
<pubStmt/>
</fileDesc>
<workDesc>
<work>
<perfMedium>
<perfResList analog="marc:048" authURI="https://www.loc.gov/standards/valuelist/marcmusperf.html" authority="marcmusperf">
<perfRes codedval="ba" label="horn" n="8" xml:id="instrVoice_1">horn</perfRes>
</perfResList>
</perfMedium>
</work>
</workDesc>
</meiHead>
<music>
<body>
<mdiv n="1" xml:id="mdiv_72">
<score xml:id="score_78">
<scoreDef meter.count="4" meter.sym="common" meter.unit="4" xml:id="scoreDef_01">
<staffGrp symbol="bracket" xml:id="staffGrp_01">
<staffDef clef.line="2" clef.shape="G" decls="#instrVoice_1" key.sig="0" lines="5" n="1" trans.diat="-1" trans.semi="-2" xml:id="staffDef_P1">
<label xml:id="label_P1">Corno<lb xml:id="lb_P1"/> in Si♭ alto/B hoch</label>
</staffDef>
</staffGrp>
</scoreDef>
<section xml:id="section_A_m1-1">
<measure n="1" xml:id="m1">
<staff n="1" xml:id="staff_144">
<layer n="1" xml:id="layer_150">
<note dur="4" oct="4" pname="c" xml:id="note_156"/>
<note dur="4" oct="4" pname="c" xml:id="note_162"/>
<note dur="4" oct="4" pname="c" xml:id="note_168"/>
<note dur="4" oct="4" pname="c" xml:id="note_174"/>
</layer>
</staff>
</measure>
</section>
</score>
</mdiv>
</body>
</music>
</mei>
Case 2: Canons
Soprano voices are mapped to piva and scifi because the <label> contains Roman numerals:
<mei meiversion="3.0.0" xmlns="http://www.music-encoding.org/ns/mei">
<meiHead>
<fileDesc>
<titleStmt>
<title label="NMA digital" type="unit">"Bona nox! bist a rechta Ox". Canon for four voices in A, K. 561</title>
</titleStmt>
<pubStmt/>
</fileDesc>
<workDesc>
<work>
<perfMedium>
<perfResList analog="marc:048" authURI="https://www.loc.gov/standards/valuelist/marcmusperf.html" authority="marcmusperf">
<perfRes codedval="va" label="soprano" n="1" xml:id="vocalVoice_1">Soprano I</perfRes>
<perfRes codedval="va" label="soprano" n="2" xml:id="vocalVoice_2">Soprano II</perfRes>
<perfRes codedval="va" label="soprano" n="3" xml:id="vocalVoice_3">Soprano III</perfRes>
<perfRes codedval="va" label="soprano" n="4" xml:id="vocalVoice_4">Soprano IV</perfRes>
</perfResList>
</perfMedium>
</work>
</workDesc>
</meiHead>
<music>
<body>
<mdiv n="1" xml:id="mdiv_144">
<score xml:id="score_150">
<scoreDef key.mode="major" key.pname="a" key.sig="3s" meter.count="2" meter.sym="cut" meter.unit="2" xml:id="scoreDef_01">
<staffGrp barthru="false" symbol="bracket" xml:id="staffGrp_01">
<staffDef clef.line="2" clef.shape="G" decls="#vocalVoice_1" lines="5" n="1" xml:id="staffDef_P1">
<label xml:id="label_P1">I</label>
</staffDef>
<staffDef clef.line="2" clef.shape="G" decls="#vocalVoice_2" lines="5" n="2" xml:id="staffDef_P2">
<label xml:id="label_P2">II</label>
</staffDef>
<staffDef clef.line="2" clef.shape="G" decls="#vocalVoice_3" lines="5" n="3" xml:id="staffDef_P3">
<label xml:id="label_P3">III</label>
</staffDef>
<staffDef clef.line="2" clef.shape="G" decls="#vocalVoice_4" lines="5" n="4" xml:id="staffDef_P4">
<label xml:id="label_P4">IV</label>
</staffDef>
</staffGrp>
</scoreDef>
<section xml:id="section_A_m1-1">
<measure n="1" xml:id="m1">
<staff n="1" xml:id="staff_252">
<layer n="1" xml:id="layer_258">
<note dur="2" oct="4" pname="a" tstamp="1" xml:id="note_264">
<verse xml:id="verse_270">
<syl con="d" wordpos="i" xml:id="syl_276">Bo</syl>
</verse>
</note>
<note accid.ges="s" dur="2" oct="5" pname="c" tstamp="2" xml:id="note_288">
<verse xml:id="verse_294">
<syl wordpos="t" xml:id="syl_300">na</syl>
</verse>
</note>
</layer>
</staff>
<staff n="2" xml:id="staff_312">
<layer n="1" xml:id="layer_318">
<mRest tstamp="1" xml:id="mRest_324"/>
</layer>
</staff>
<staff n="3" xml:id="staff_330">
<layer n="1" xml:id="layer_336">
<mRest tstamp="1" xml:id="mRest_342"/>
</layer>
</staff>
<staff n="4" xml:id="staff_348">
<layer n="1" xml:id="layer_354">
<mRest tstamp="1" xml:id="mRest_360"/>
</layer>
</staff>
</measure>
</section>
</score>
</mdiv>
</body>
</music>
</mei>
Possible solution
The both problems could be solved if MEICO would first check in the <meiHead> if there is information about the instruments. In our case, there is a link via staffDef@decls to the MARC instruments vocabulary.
Seems like the direction of an arpeggio, exported from MEI to MPM, is downward by default or inconsistent, maybe depending on the order of appearance of notes. Investigate further!
It would be nice being able to expand repetitions and prima e seconda volta in MEI files so that the relevant sections are copied several times behind each other.
Meico seems to skip elements wrapped by a supplied
element. This becomes particularly evident in cases of editorial additions of accidentals.
In the following example, all three notes should sound alike, but Meico plays the third one as c natural.
In the first measure, the sharp is coded as an attribute, in the second measure as an element which is an equivalent to the coding in the first measure; in the third measure, the sharp is wrapped by a supplied
element, marking it as an editorial addition. The sounding pitch should remain the same, i.e. c sharp. As a fix, Meico should just ignore the supplied
element, leaving the accid
intact however.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://dme.mozarteum.at/DME/music/schemas/mei-CMN_3.0.0.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<mei xmlns="http://www.music-encoding.org/ns/mei"
meiversion="3.0.0">
<meiHead>
<fileDesc>
<titleStmt>
<title>an example</title>
</titleStmt>
<pubStmt/>
</fileDesc>
</meiHead>
<music>
<body>
<mdiv>
<score>
<scoreDef meter.count="4" meter.unit="4" meter.sym="common">
<staffGrp>
<staffDef n="1" lines="5" clef.shape="G" clef.line="2"></staffDef>
</staffGrp>
</scoreDef>
<section>
<measure n="1">
<staff n="1">
<layer n="1">
<note pname="c" oct="4" dur="1" accid="s"/>
</layer>
</staff>
</measure>
<measure n="2">
<staff n="1">
<layer n="1">
<note pname="c" oct="4" dur="1"><accid accid="s"/></note>
</layer>
</staff>
</measure>
<measure n="3">
<staff n="1">
<layer n="1">
<note pname="c" oct="4" dur="1"><supplied><accid accid="s"/></supplied></note>
</layer>
</staff>
</measure>
</section>
</score>
</mdiv>
</body>
</music>
</mei>
Whenever notes are shifted into negative time (e.g. via an articulation delay or an arpeggio on the first chord), these note are cut at date 0. Maybe add a delay at the end of the rendering pipeline.
It would be nice to have a documentation of which MEI elements are supported and how they are interpeted by meico.
The combination of legato and staccato should result in a portato articulation.
I achieved this in my local copy by inserting here the following piece of code:
// Check if there is a staccato articulation at the same time. If yes, do not continue
// with a slur, but insert a portato articulation instead and remove
// the already existing staccato.
ArrayList<KeyValue<Double, Element>> simultaneousElements = map.getAllElementsAt(date);
for (int i=0; i<simultaneousElements.size(); i++) {
Element otherEl = simultaneousElements.get(i).getValue();
if (otherEl.getAttribute("name.ref").getValue().equals("stacc")) {
map.removeElement(otherEl);
this.addArticulationToMap(date, "port", slurid, noteId, map, articulationStyle);
return;
}
}
I'm not really familiar with the way things are being handled in Meico. If this is the way, I'll be happy to do a PR …
In window mode, files with extensions in capital letters (e.g. ".MID" instead of ".mid") are not correctly recognized in gui mode.
Hi Sir,
Can I use this library for my android project as need to convert PCM to mp3 format.
thanks & regards
newbie :)
Reworking the MIDI part resulted in an error:
$ ant all
Buildfile: /home/travis/build/cemfi/meico/build.xml
init:
clean.module.meico:
clean:
compile.module.meico.production:
[mkdir] Created dir: /home/travis/build/cemfi/meico/out/production/meico
[javac] /home/travis/build/cemfi/meico/build.xml:156: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 15 source files to /home/travis/build/cemfi/meico/out/production/meico
[javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
[javac] /home/travis/build/cemfi/meico/src/meico/midi/Midi2AudioRenderer.java:3: warning: AudioSynthesizer is internal proprietary API and may be removed in a future release
[javac] import com.sun.media.sound.AudioSynthesizer;
[javac] ^
[javac] /home/travis/build/cemfi/meico/src/meico/midi/Midi.java:98: error: MidiFileReader is abstract; cannot be instantiated
[javac] this.sequence = (new MidiFileReader()).getSequence(file);
[javac] ^
[javac] /home/travis/build/cemfi/meico/src/meico/midi/Midi.java:224: error: MidiFileWriter is abstract; cannot be instantiated
[javac] (new MidiFileWriter()).write(this.getSequence(), 1, file);
[javac] ^
[javac] /home/travis/build/cemfi/meico/src/meico/midi/Midi2AudioRenderer.java:117: warning: AudioSynthesizer is internal proprietary API and may be removed in a future release
[javac] AudioSynthesizer synth = this.findAudioSynthesizer();
[javac] ^
[javac] /home/travis/build/cemfi/meico/src/meico/midi/Midi2AudioRenderer.java:153: warning: AudioSynthesizer is internal proprietary API and may be removed in a future release
[javac] private AudioSynthesizer findAudioSynthesizer() throws MidiUnavailableException {
[javac] ^
[javac] /home/travis/build/cemfi/meico/src/meico/midi/Midi2AudioRenderer.java:156: warning: AudioSynthesizer is internal proprietary API and may be removed in a future release
[javac] if (synth instanceof AudioSynthesizer) {
[javac] ^
[javac] /home/travis/build/cemfi/meico/src/meico/midi/Midi2AudioRenderer.java:157: warning: AudioSynthesizer is internal proprietary API and may be removed in a future release
[javac] return (AudioSynthesizer)synth;
[javac] ^
[javac] /home/travis/build/cemfi/meico/src/meico/midi/Midi2AudioRenderer.java:164: warning: AudioSynthesizer is internal proprietary API and may be removed in a future release
[javac] if (dev instanceof AudioSynthesizer) {
[javac] ^
[javac] /home/travis/build/cemfi/meico/src/meico/midi/Midi2AudioRenderer.java:165: warning: AudioSynthesizer is internal proprietary API and may be removed in a future release
[javac] return (AudioSynthesizer) dev;
[javac] ^
[javac] /home/travis/build/cemfi/meico/src/meico/midi/legacy/MidiOld.java:38: error: MidiFileReader is abstract; cannot be instantiated
[javac] sequence = (new MidiFileReader()).getSequence(midifile);
[javac] ^
[javac] /home/travis/build/cemfi/meico/src/meico/midi/legacy/MidiOld.java:164: error: MidiFileWriter is abstract; cannot be instantiated
[javac] (new MidiFileWriter()).write(this.getSequence(), 1, file);
[javac] ^
[javac] Note: /home/travis/build/cemfi/meico/src/meico/midi/legacy/TrackOld.java uses or overrides a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
[javac] Note: /home/travis/build/cemfi/meico/src/meico/app/FileDrop.java uses unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 4 errors
[javac] 8 warnings
BUILD FAILED
/home/travis/build/cemfi/meico/build.xml:156: Compile failed; see the compiler error output for details.
Total time: 17 seconds
Add support for MEI expansion elements.
This also means to add processing of MEI section and ending elements beyond what is done right now.
Convert them to MSM sequencingMaps.
When meico is used as a command line tool, it should return a meaningful exit code.
Example:
0 - Everything went fine
...
64 - Command line usage error
65 - Input file invalid
66 - Input file not existent or not readable
A few cases already have de facto standardized exit codes, see http://opensource.apple.com//source/Libc/Libc-320/include/sysexits.h
Hello, my jdk version is 12.0.2, I got an unexpected error when running the meicoApp.jar
Here are some error messages. Thanks
Graphics Device initialization failed for : d3d, sw Error initializing QuantumRenderer: no suitable pipeline found java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280) at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222) at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158) at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658) at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195) at java.base/java.lang.Thread.run(Thread.java:835) Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124) ... 1 more Exception in thread "main" java.lang.RuntimeException: No toolkit found at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158) at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658) at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195) at java.base/java.lang.Thread.run(Thread.java:835)
With audio export and SoundFont support we had to dismiss Java 6 compatibility. Now, some code makeover is appropriate. Esp. the terrible if-else chains that where necessary for strings can now be replaced by switch-cases (support strings since Java 7). Try-catch exception handling can likewise be set more compact now.
Hi, i need to use meico like a library to convert files from midi to mp3. How can i do this? Exists a function that i call directly? thanks
Whenever MEI encodes variants meico jumps over it and leaves an empty spot. It makes no decision for any variant. It would be nice to have a method that makes some kind of default decision to have at least one "complete" piece of music in the output. To get any other decision or combination of variants, the user should apply MEI Sequence Editor to create an unambiguous MEI file.
Update meicoPy.py:
I'm getting:
Started: java -jar "meicoPATH\meico.jar" --wav -t 100 filePATH\dmeref_499-003_5859.xml
meico v0.8.0
Process ended with exit code: 0
meicoApp.jar
can be run from the command lineSince introducing XSLT support the conversion path became branched which the current graphical user interface cannot display. A new GUI is needed.
The new one should also implement better playback functions (for MIDI and audio) and allow winding and pausing.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.