Git Product home page Git Product logo

meico's People

Contributors

axelberndt avatar sonovice avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

meico's Issues

Support for MusicXML format

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.

MSM resolve repetitions duplicates xml:ids

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.

App cannot be launched

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

meicoApp.jar doesn't work with openjdk

[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?

Audio playback

Integrate audio playback in class Audio. Add a corresponding button to the window mode gui.

Support for @sameas

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.
k165001ObCorm11ff
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.

Recognition of the instruments

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>

Full example

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.

Arpeggio direction in MEI-to-MPM export

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!

Expand repetitions

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.

Support for <supplied>

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>

Negative Timing in Performance Rendering

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.

MEI coverage documentation

It would be nice to have a documentation of which MEI elements are supported and how they are interpeted by meico.

Portato

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 …

Compatibilty with android

Hi Sir,
Can I use this library for my android project as need to convert PCM to mp3 format.
thanks & regards
newbie :)

Build fails

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

Expansions

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.

Error initializing QuantumRenderer: no suitable pipeline found

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)

Java 7 code makeover

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.

Default choices for variant

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.

command line utility does not work with v0.8.0

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
  • the code above is from oXygen notification panel, but the same issue prompts when using the command line
  • until the v0.7.10 everything worked fine with the same command
  • meicoApp.jar can be run from the command line
    Maybe I missed some changes in the usage?

New GUI

Since 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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.