Author Archives: Andi

Sprint 72 “Bullroarer” finished

The next version of Zong! is online! Sprint 72 features the first prototype of a pure HTML5/JS score renderer, a complete rewrite of the midi-out module and improved layout for cross-staff beams.

2017-03-03 WebApp Screenshot

The above screenshot shows the first prototype of the Zong! WebApp. It is a pure HTML5/JS implementation and should run in every modern browser, including mobile devices. The great thing is that it is actually using the original Java codebase and is then cross-compiled to JS using the fantastic GWT framework. Currently our webapp supports loading and rendering MusicXML files. Later, we will add more features like playback. We will also provide it as a web component that can easily be integrated into other websites and apps written by other developers. If you are interested in using this component in your project, please contact us so we can take the first steps together.

Another feature is the completely rewritten MIDI export module. It now supports all kinds of repetitions, voltas and jumps (like da capo, dal segno or coda), even in complicated scenarios. But there is still much work to do, like better support for dynamics, instruments and articulations.

We also fixed the layout of cross-staff beams. This turned out to be even more complicated than expected, especially if different staff sizes are supported (as we do!). There is also some room for discussion: Should the short beam flags at the 32nd stems always be placed on the chord side, or should all flags be placed on the same side within a beam? Other than Sibelius and MuseScore we decided to use the second solution because of better readability. Compare the two possibilities below and have a look at the last note. What do you think?

Cross-staff beams in MuseScore:

2017-03-03 Cross-staff beams MuseScore

Cross-staff beams in Zong!:

2017-03-03 Cross-staff beams Zong


Sprint 71 β€œLur” finished

After nearly two years, which should have been only four weeks according to the original plan, we finally released Sprint 71 today. The last two years were full of work, including the construction of my new home (see my blog, in German), so I had nearly no time left for Zong!. Fortunately, the last weeks I found time again to work on it, and I (again…) intend to continue with it during the coming year.

The goal of Spring 71 was to improve the stability of the MusicXML import and of the layout engine. Indeed, we managed to collect lots of MusicXML files from all over the web (about 12.000 pieces), some with great quality, some with little errors and poor quality, and now we are able to load and layout them all. Of course, the layout quality is still not good enough to publish a version of Zong! for real end users, but at least we can now focus on specific problems, one after the other. We can not publish the test files because of copyright issues, but we run the tests internally.

Another good – and public – overview of the current MusicXML import and layout progress is provided by our implementation of the Unofficial MusicXML Test Suite. There is a status report and a visual report, which brings our layout results face to face with the Lilypond renderings.

2016-12-31 Test Suite

For the next sprint, we are planning to improve the stability of midi-out and the rendering on Android devices and with HTML/JS. Happy new year! πŸ™‚

10 years Xenoage Software

celebration1Ten years ago to the day I registered my company “Xenoage Software” in Schrobenhausen, Germany. Since then, it developed from a hobby project over an additional income during my studies to a full-time job. We have successfully finished many projects like 3D simulations and games, data-driven applications, mobile apps and web projects. But our favorite non-commercial project is still Zong!, the open source music notation software, and we are trying to spend as much time for the project as possible. A brief history of the company is available in German in our home building blog.

Gradle-based build

After some months in which I had nearly no time left for Zong!, I’m finally back πŸ™‚ There were lots of things to do during this year, including the plans for our new house (German speakers can follow the corresponding blog) and I joined several new commercial projects. Now, I hope I can bring Zong! forward again, but as it is a pure spare-time project, it’s hard to make plans.

So far Zong! was based on a quite complex build system, including different technologies like Gradle, Ant and even a self-developed solution called SimpleSync. Moreover, building in Eclipse required additional dependecies which were not connected in any way with the command-line build script, because I could not find a reliable dependency management system for Eclipse. This has been changed now.

Zong! is now built as a Gradle project. Using the new Buildship plugin, it can be imported, built, run and tested from Eclipse, as well as other IDEs like the IntellJ IDEA. I’ve updated the wiki pages which explain how to download and build Zong! and how to open it in Eclipse and in IntelliJ IDEA, including screencasts:

Demo apps available

Today we pushed Sprint 70 “Bow” to our server. As more and more developers get interested in the Zong! project, we started to write little demo apps which show how Zong! components can be used within other software projects:

  • The Minimal demo simply converts a MusicXML file to a PDF file
  • The little more advanced Simple GUI demo includes a score viewer with a moving cursor and MIDI playback

In this sprint, we created the JavaFX based renderer. We refactorized the musicxml and musicxml-in projects as well as the renderer project, which is now a universal base for all platform-specific renderers (JavaFX, AWT/Java2D, GWT and Android is on the way). We will continue by improving the layout project, including tests based on the Inofficial MusicXML Test Suite.

Sprint 69 “Horn” finished

Yesterday, we pushed Sprint 69 “Horn” to our server. Beside the integration of JavaFX, which is already completed for the Zong! Player, the main focus of this sprint was to extend our automated tests by the Unofficial MusicXML test suite, which was originally created by Reinhold Kainhofer and is now maintained by the Lilypond developers. We started by testing the loading of MusicXML files into our internal core data structures and will continue the tests for layouting and MIDI conversion. The current implementation status is continuously updated by our build server.

Zong! Player ready for Java Web Start

The Zong! Player is an open source audio player for MusicXML scores. It is also possible to convert MusicXML files to other audio formats like MIDI, OGG, WAV and MP3 (if LAME is installed). The program is now based on JavaFX 8 and can be started by clicking on the following button:

Oracle has spent some effort to increase the security of Java applets and applications. Therefor, Java Web Start applications have now to be signed using a trusted certificate. Being an open source project, Zong! got a free certificate from Certum. Thank you very much for your support!

Sprint 68 finished

Today, iteration 68, codename “Flute”, was pushed to the git server. After a long summer break, Zong! is finally back in active development. Within the last sprints, we started to create the GWT-based web viewer (pure HTML5/JS score viewer) and finally switched from AWT/Swing to JavaFX 8. We have also rewritten all the IO stuff from blocking to asynchronous processing for better support of single-threaded environments like the web browser. As always, our progress is documented in our public tracker and in the wiki.

Nearly two years ago we found JavaFX not to be ready for real-world applications. Now, in version 8, JavaFX looks fantastic and is really fun to work with. For example, the SceneBuilder is a nice WYSIWYG editor for creating GUI in JavaFX, and connecting the controls and the actions to the Java controller class works straightforward. And, very important for Zong!, in a first test application for drawing lots of vector images (musical symbols) we observed very high performance. We are curious, if JavaFX will become more famous and bring Java applications back to the desktop. We already made our decision.

New website is online

The new Zong! website is online! πŸ™‚

It will be the central place to provide information about the project, present news in the blog and allow discussion in the forums (not online yet). We will provide access to the Java source repository and to early builds.

Currently, Zong! is under very active development. We are trying to release the source code to the public as soon as possible, making the further development much more transparent than it was up to now. At the moment, we are still refactoring our project, removing proprietary code, implementing build scripts, continuous integration and so on.

Our development process is very transparent from now on. Find more details on our developer page 😎

Why I don’t like online music notation apps

As I could see at Musikmesse 2013, the trend in music notation programs goes to online services like Noteflight and mobile apps like Scorio. From a developer’s point of view, especially Noteflight is an fascinating piece of software – a whole notation program written in pure HTML5 and JavaScript. However, as a user, I am not convinced of the idea behind online music notation. Here are my reasons:

  1. I have a fixed work area when writing music. This is not only because I need a large screen, a hardware keyboard, a mouse, a MIDI keyboard and a printer, but also because I need to have my peace at my own desktop. In 99% of the time, I write music on the same computer. Online notation programs allow to write music “everywhere”. I just don’t need that. I find it horrible to write music on a tablet PC or even a smartphone.
  2. I prefer printed sheet music. Online programs can also print your music, but their focus is much more on screen display and the viewer’s perspective. Maybe the musicians I know (including myself) are old-fashioned, but we like to play music from printed paper. We take notes with a pencil (without limitations which notes are possibe), and we need no internet connection (we have none in our rehearsal room) and no electric power. I like the idea of sharing files with others over the internet, but this is also possible with e-mail, dropbox and other services, and for sure also within desktop notation programs in the future. I need no web browser for that.
  3. Pay for the time. The price of the programs is currently at about 80$ per year. Suitable desktop notation programs cost about two or three times as much, but only once (bigger updates not included). Since I am happy with my desktop application, the subscription of the online program would be more expensive already in the third year.
  4. Dependency on the vendor. When the vendor closes its service, I can rescue the files by exporting to MusicXML, but I can not use the same notation program any more. This is different with offline desktop applications: When the vendor stops development, I can still install and use the software on my computer as long as I like it.
  5. A technical reason: Web technologies are limited. Although new standards like the Web MIDI API will follow, I think the web is not suitable for high-end multimedia applications. When running in the web browser, you always have an additional layer (the browser) between your application and the operating system, which makes everything slower, more limited and reduced to a compromise that works for all kinds of devices. When you want to fully exploit the power of your computer, there is no better option than running as low-level as possible (already choosing Java for Zong! was a hard decision).