Skip to content

Commit

Permalink
v0.8.0
Browse files Browse the repository at this point in the history
- Reorganization of the meico programming library and application code as well as its release assets.
    - Meico is basically a programming library. All content of package `meico.app` is example code for meico's usage in application projects. However, for the graphical meico application certain JavaFX dependencies had to be added to meico which complicated development for other applications that do not rely on JavaFX. Thus, we decided to split the meico code base into the core functionality and the example applications.
    - The release assets include
        - `meico.jar` (the headless core functionality to be used by other development projects) and
        - `meicoApp.jar` (the standalone runnable `jar` with the commandline and graphical application, it includes `meico.jar`).
    - The codebase has been reorganized accordingly.
        - The `master` branch contains the headless meico, no application code or application-related dependencies. This is all you need to develop your own meico application.
        - The `meicoApp` branch contains the `meico.app` package and all other demo applications (meicoPy and the REST demo).
    - Class `meico.Meico` has been stripped down. It no longer contains any launcher code, only meico's current version number. MeicoApp lanches from its own main class `meico.app.Main`.
    - Class `meico.supplementary.VerovioProvider` as been removed. Verovio cannot be part of the headless meico base. It works only with a browser environment and that is only present in meicoApp (which contains Verovio).
    - File `README.md` has been updated. Livenses are also a bit different for those who use the headless meico package as JavaFX, Verovio and Font Awesome are used only in meicoApp and not in the base package.
  • Loading branch information
axelberndt committed Apr 6, 2020
1 parent 6ae86e2 commit a41690f
Show file tree
Hide file tree
Showing 272 changed files with 556 additions and 9,138 deletions.
11 changes: 3 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ There are several features open, though. Currently, meico ignores any MEI data t

### How to use meico?

Meico can be used in several different ways. The jar file (see the [latest release](https://github.com/cemfi/meico/releases/latest)) is a standalone runnable Java program. We have tested it under Windows, Mac OS and Linux. The only prerequisite is that you have a Java 1.8 (or higher) Runtime Environment installed on your system.
Meico can be used in several different ways. The file `meicoApp.jar` (see the [latest release](https://github.com/cemfi/meico/releases/latest)) is a standalone runnable Java program. We have tested it under Windows, Mac OS and Linux. The only prerequisite is that you have a Java 1.8 (or higher) Runtime Environment installed on your system.

Starting the standalone jar without any command line options will start the window mode of meico. Simply drag your files into the window. The startup screen lists the supported input file formats. You can find context information on each interface element in the statusbar. If you have several `mdiv` elements (movements) in your MEI document you will get an individual MSM/MPM instance for each movement on conversion. Conversion from MIDI to audio may take some time when it is a long piece. To get better quality sounds than Java's built-in default instruments (those used for Midi playback), we recommend using a higher-quality soundbank, such as one of [these soundfonts](https://sourceforge.net/projects/androidframe/files/soundfonts/). Simply drag and drop them on the workspace and activate them via their menu or double click. XSL files are used in the same way. If you want to apply an XSL Transform to your MEI or other XML data, drop the XSL on the workspace, activate it and transform. Soundfonts and XSLTs can also be set as standard so that this loading procedure is not necessary on the next startup.
Starting the standalone application `meicoApp.jar` without any command line options will start the window mode. Simply drag your files into the window. The startup screen lists the supported input file formats. You can find context information on each interface element in the statusbar. If you have several `mdiv` elements (movements) in your MEI document you will get an individual MSM/MPM pair for each movement on conversion. Conversion from MIDI to audio may take some time when it is a long piece. To get better quality sounds than Java's built-in default instruments, we recommend using a higher-quality soundbank, such as one of [these soundfonts](https://sourceforge.net/projects/androidframe/files/soundfonts/). Simply drag and drop them into the workspace and activate them via their menu or double click. XSL files are used in the same way. If you want to apply an XSL Transform to your MEI or other XML data, drop the XSL on the workspace, activate it and transform. Soundfonts and XSLTs can also be set as standard so that this loading procedure is not necessary on the next startup.

![A screenshot of the meico graphical user interface.](https://github.com/cemfi/meico/blob/master/figures/meico-screenshot_01.png)

Expand Down Expand Up @@ -68,9 +68,7 @@ Usage: `java -jar meico.jar [OPTIONS] FILE`

The final argument should always be a path to a valid MEI file (e.g., `"C:\myMeiCollection\test.mei"`); always in quotes! This is the only mandatory argument if you want to convert something.

The third way of using meico is as a Java programming library. Its `Mei`, `Msm`, `Mpm`, `Midi`, and `Audio` classes are the most important to work with. Class [`meico.app.Main`](https://github.com/cemfi/meico/tree/master/src/meico/app/Main.java) demonstrates the use of meico (method `commandLineMode()` is best suited as tutorial). The [Javadoc](http://cemfi.github.io/meico/) is provided with this repository.

With `meicoPy.py` we have also a demo script that shows the usage of [meico in Python](https://github.com/cemfi/meico/tree/master/meicoPy). We further provide a Python3-based [REST API for meico](https://github.com/cemfi/meico/tree/master/rest). However, both have not been updated for a while!
The third way of using meico is as a Java programming library. For this, use the "headless" meico framework `meico.jar` that is free from application-related overhead and dependencies. Its `Mei`, `Msm`, `Mpm`, `Midi`, and `Audio` classes are the most important to work with. In the `meicoApp` branch we demonstrate its use, the [commandline app](https://github.com/cemfi/meico/blob/meicoApp/src/meico/app/Main.java) is probably the best way to start with. A [Javadoc](http://cemfi.github.io/meico/) is provided with this repository.

### Build Instructions

Expand All @@ -97,11 +95,8 @@ Meico makes use of the following third party libraries:
- [Saxon](http://saxon.sourceforge.net/) v9.8.0.14 HE by Saxonica (founder Michael Kay), Mozilla Public License 1.0 (MPL), Mozilla Public License 2.0 (MPL 2.0).
- [JSON.simple](https://cliftonlabs.github.io/json-simple/) v3.0.2 by Yidong Fang, Chris Nokleberg, Dave Hughes, and Davin Loegering, Apache License 2.0.
- [Java LAME](https://github.com/nwaldispuehl/java-lame) v3.98.4 by Ken Händel and Nico Waldispühl, GNU LGPL version 3.0.
- [Font Awesome](https://fontawesome.com/) v5.2.0 (the free solid icons font `fa-solid-900.ttf`), Fonticons, Inc., [SIL OFL 1.1 License](https://scripts.sil.org/OFL).
- [Verovio JavaScript Toolkit](https://www.verovio.org/index.xhtml) v2.7.0-dev-02b4f36 by Etienne Darbellay, Jean-François Marti, Laurent Pugin, Rodolfo Zitellini and others, GNU Lesser General Public License (LGPL) 3.0.
- [Midi2WavRenderer](https://github.com/cemfi/meico/tree/master/src/meico/midi/Midi2AudioRenderer.java) by Karl Helgason, copyright notice in the class header.
- [Gervill Software Sound Synthesizer](https://sourceforge.net/projects/rasmusdsp/files/gervill/Gervill%201.0/) v1.0.1 by Karl Helgason, GPL 2.0.
- [JavaFX](https://gluonhq.com/products/javafx/) v11.0.2, GPL 2.0.

We publish meico under GNU GPL version 3.0. Meico's development was part of the ZenMEM project funded by the German Federal Ministry of Education and Research (2015-2019, funding code 01UG1414A–C). All MPM-related parts of meico were part of an R&D project that was funded by the [Fritz Thyssen Foundation](https://www.fritz-thyssen-stiftung.de/en/) (2019-2022). If you integrate meico or parts of it with your project make sure that you do not conflict with any of the above licenses.

25 changes: 0 additions & 25 deletions build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,6 @@
<pathelement location="${basedir}/externals/saxon9he.jar"/>
<pathelement location="${basedir}/externals/xom-1.3.2.jar"/>
<pathelement location="${basedir}/externals/gervill.jar"/>
<pathelement location="${basedir}/externals/javafx.base.jar"/>
<pathelement location="${basedir}/externals/javafx.controls.jar"/>
<pathelement location="${basedir}/externals/javafx.graphics.jar"/>
<pathelement location="${basedir}/externals/javafx.media.jar"/>
<pathelement location="${basedir}/externals/javafx.web.jar"/>
<pathelement location="${basedir}/externals/net.sourceforge.lame-3.98.4.jar"/>
</path>

Expand All @@ -96,11 +91,6 @@
<pathelement location="${basedir}/externals/saxon9he.jar"/>
<pathelement location="${basedir}/externals/xom-1.3.2.jar"/>
<pathelement location="${basedir}/externals/gervill.jar"/>
<pathelement location="${basedir}/externals/javafx.base.jar"/>
<pathelement location="${basedir}/externals/javafx.controls.jar"/>
<pathelement location="${basedir}/externals/javafx.graphics.jar"/>
<pathelement location="${basedir}/externals/javafx.media.jar"/>
<pathelement location="${basedir}/externals/javafx.web.jar"/>
<pathelement location="${basedir}/externals/net.sourceforge.lame-3.98.4.jar"/>
</path>

Expand All @@ -112,11 +102,6 @@
<pathelement location="${basedir}/externals/saxon9he.jar"/>
<pathelement location="${basedir}/externals/xom-1.3.2.jar"/>
<pathelement location="${basedir}/externals/gervill.jar"/>
<pathelement location="${basedir}/externals/javafx.base.jar"/>
<pathelement location="${basedir}/externals/javafx.controls.jar"/>
<pathelement location="${basedir}/externals/javafx.graphics.jar"/>
<pathelement location="${basedir}/externals/javafx.media.jar"/>
<pathelement location="${basedir}/externals/javafx.web.jar"/>
<pathelement location="${basedir}/externals/net.sourceforge.lame-3.98.4.jar"/>
</path>

Expand All @@ -129,11 +114,6 @@
<pathelement location="${basedir}/externals/saxon9he.jar"/>
<pathelement location="${basedir}/externals/xom-1.3.2.jar"/>
<pathelement location="${basedir}/externals/gervill.jar"/>
<pathelement location="${basedir}/externals/javafx.base.jar"/>
<pathelement location="${basedir}/externals/javafx.controls.jar"/>
<pathelement location="${basedir}/externals/javafx.graphics.jar"/>
<pathelement location="${basedir}/externals/javafx.media.jar"/>
<pathelement location="${basedir}/externals/javafx.web.jar"/>
<pathelement location="${basedir}/externals/net.sourceforge.lame-3.98.4.jar"/>
</path>

Expand Down Expand Up @@ -212,11 +192,6 @@
<zipfileset src="${basedir}/externals/saxon9he.jar"/>
<zipfileset src="${basedir}/externals/gervill.jar"/>
<zipfileset src="${basedir}/externals/jing-20091111.jar"/>
<zipfileset src="${basedir}/externals/javafx.base.jar"/>
<zipfileset src="${basedir}/externals/javafx.controls.jar"/>
<zipfileset src="${basedir}/externals/javafx.graphics.jar"/>
<zipfileset src="${basedir}/externals/javafx.media.jar"/>
<zipfileset src="${basedir}/externals/javafx.web.jar"/>
<zipfileset src="${basedir}/externals/net.sourceforge.lame-3.98.4.jar"/>
<manifest>
<attribute name="Main-Class" value="meico.app.Main"/>
Expand Down
22 changes: 2 additions & 20 deletions docs/allclasses-frame.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="de">
<head>
<!-- Generated by javadoc (1.8.0_172) on Fri Apr 03 09:35:10 CEST 2020 -->
<!-- Generated by javadoc (1.8.0_172) on Mon Apr 06 11:31:14 CEST 2020 -->
<title>All Classes</title>
<meta name="date" content="2020-04-03">
<meta name="date" content="2020-04-06">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
Expand All @@ -24,9 +24,6 @@ <h1 class="bar">All&nbsp;Classes</h1>
<li><a href="meico/audio/Audio.html" title="class in meico.audio" target="classFrame">Audio</a></li>
<li><a href="meico/audio/AudioPlayer.html" title="class in meico.audio" target="classFrame">AudioPlayer</a></li>
<li><a href="meico/mpm/elements/metadata/Author.html" title="class in meico.mpm.elements.metadata" target="classFrame">Author</a></li>
<li><a href="meico/app/gui/DataObject.html" title="class in meico.app.gui" target="classFrame">DataObject</a></li>
<li><a href="meico/app/gui/DataObject.Interaction.html" title="interface in meico.app.gui" target="classFrame"><span class="interfaceName">DataObject.Interaction</span></a></li>
<li><a href="meico/app/gui/DataObjectLine.html" title="class in meico.app.gui" target="classFrame">DataObjectLine</a></li>
<li><a href="meico/mpm/elements/Dated.html" title="class in meico.mpm.elements" target="classFrame">Dated</a></li>
<li><a href="meico/mpm/elements/maps/data/DistributionData.html" title="class in meico.mpm.elements.maps.data" target="classFrame">DistributionData</a></li>
<li><a href="meico/mpm/elements/maps/data/DynamicsData.html" title="class in meico.mpm.elements.maps.data" target="classFrame">DynamicsData</a></li>
Expand All @@ -43,16 +40,12 @@ <h1 class="bar">All&nbsp;Classes</h1>
<li><a href="meico/msm/Goto.html" title="class in meico.msm" target="classFrame">Goto</a></li>
<li><a href="meico/mpm/elements/Header.html" title="class in meico.mpm.elements" target="classFrame">Header</a></li>
<li><a href="meico/mei/Helper.html" title="class in meico.mei" target="classFrame">Helper</a></li>
<li><a href="meico/app/Humanizer.html" title="class in meico.app" target="classFrame">Humanizer</a></li>
<li><a href="meico/mpm/elements/maps/ImprecisionMap.html" title="class in meico.mpm.elements.maps" target="classFrame">ImprecisionMap</a></li>
<li><a href="meico/midi/InstrumentsDictionary.html" title="class in meico.midi" target="classFrame">InstrumentsDictionary</a></li>
<li><a href="meico/app/InvalidFileTypeException.html" title="class in meico.app" target="classFrame">InvalidFileTypeException</a></li>
<li><a href="meico/pitches/Key.html" title="class in meico.pitches" target="classFrame">Key</a></li>
<li><a href="meico/supplementary/KeyValue.html" title="class in meico.supplementary" target="classFrame">KeyValue</a></li>
<li><a href="meico/app/Main.html" title="class in meico.app" target="classFrame">Main</a></li>
<li><a href="meico/mei/Mei.html" title="class in meico.mei" target="classFrame">Mei</a></li>
<li><a href="meico/Meico.html" title="class in meico" target="classFrame">Meico</a></li>
<li><a href="meico/app/gui/MeicoApp.html" title="class in meico.app.gui" target="classFrame">MeicoApp</a></li>
<li><a href="meico/mpm/elements/metadata/Metadata.html" title="class in meico.mpm.elements.metadata" target="classFrame">Metadata</a></li>
<li><a href="meico/mpm/elements/maps/data/MetricalAccentuationData.html" title="class in meico.mpm.elements.maps.data" target="classFrame">MetricalAccentuationData</a></li>
<li><a href="meico/mpm/elements/maps/MetricalAccentuationMap.html" title="class in meico.mpm.elements.maps" target="classFrame">MetricalAccentuationMap</a></li>
Expand All @@ -69,31 +62,20 @@ <h1 class="bar">All&nbsp;Classes</h1>
<li><a href="meico/mpm/elements/Part.html" title="class in meico.mpm.elements" target="classFrame">Part</a></li>
<li><a href="meico/mpm/elements/Performance.html" title="class in meico.mpm.elements" target="classFrame">Performance</a></li>
<li><a href="meico/pitches/Pitches.html" title="class in meico.pitches" target="classFrame">Pitches</a></li>
<li><a href="meico/app/gui/Player.html" title="class in meico.app.gui" target="classFrame">Player</a></li>
<li><a href="meico/supplementary/RandomNumberProvider.html" title="class in meico.supplementary" target="classFrame">RandomNumberProvider</a></li>
<li><a href="meico/mpm/elements/maps/data/RubatoData.html" title="class in meico.mpm.elements.maps.data" target="classFrame">RubatoData</a></li>
<li><a href="meico/mpm/elements/styles/defs/RubatoDef.html" title="class in meico.mpm.elements.styles.defs" target="classFrame">RubatoDef</a></li>
<li><a href="meico/mpm/elements/maps/RubatoMap.html" title="class in meico.mpm.elements.maps" target="classFrame">RubatoMap</a></li>
<li><a href="meico/mpm/elements/styles/RubatoStyle.html" title="class in meico.mpm.elements.styles" target="classFrame">RubatoStyle</a></li>
<li><a href="meico/app/gui/Schema.html" title="class in meico.app.gui" target="classFrame">Schema</a></li>
<li><a href="meico/app/gui/Settings.html" title="class in meico.app.gui" target="classFrame">Settings</a></li>
<li><a href="meico/app/gui/Soundbank.html" title="class in meico.app.gui" target="classFrame">Soundbank</a></li>
<li><a href="meico/app/gui/StatusPanel.html" title="class in meico.app.gui" target="classFrame">StatusPanel</a></li>
<li><a href="meico/svg/Svg.html" title="class in meico.svg" target="classFrame">Svg</a></li>
<li><a href="meico/svg/SvgCollection.html" title="class in meico.svg" target="classFrame">SvgCollection</a></li>
<li><a href="meico/mpm/elements/maps/data/TempoData.html" title="class in meico.mpm.elements.maps.data" target="classFrame">TempoData</a></li>
<li><a href="meico/mpm/elements/styles/defs/TempoDef.html" title="class in meico.mpm.elements.styles.defs" target="classFrame">TempoDef</a></li>
<li><a href="meico/mpm/elements/maps/TempoMap.html" title="class in meico.mpm.elements.maps" target="classFrame">TempoMap</a></li>
<li><a href="meico/mpm/elements/styles/TempoStyle.html" title="class in meico.mpm.elements.styles" target="classFrame">TempoStyle</a></li>
<li><a href="meico/midi/legacy/TrackOld.html" title="class in meico.midi.legacy" target="classFrame">TrackOld</a></li>
<li><a href="meico/app/gui/TxtData.html" title="class in meico.app.gui" target="classFrame">TxtData</a></li>
<li><a href="meico/midi/UnsupportedSoundbankException.html" title="class in meico.midi" target="classFrame">UnsupportedSoundbankException</a></li>
<li><a href="meico/app/gui/VerovioGenerator.html" title="class in meico.app.gui" target="classFrame">VerovioGenerator</a></li>
<li><a href="meico/supplementary/VerovioProvider.html" title="class in meico.supplementary" target="classFrame">VerovioProvider</a></li>
<li><a href="meico/app/gui/WebBrowser.html" title="class in meico.app.gui" target="classFrame">WebBrowser</a></li>
<li><a href="meico/app/gui/Workspace.html" title="class in meico.app.gui" target="classFrame">Workspace</a></li>
<li><a href="meico/xml/XmlBase.html" title="class in meico.xml" target="classFrame">XmlBase</a></li>
<li><a href="meico/app/gui/XSLTransform.html" title="class in meico.app.gui" target="classFrame">XSLTransform</a></li>
</ul>
</div>
</body>
Expand Down
Loading

0 comments on commit a41690f

Please sign in to comment.