Category Archives: Zong! Development

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! 🙂

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:

http://java.com/js/webstart.png

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 😎

New Java 2D engine, replacing JOGL/Swogl

JOGL and Swogl are both great libraries, bringing the power of OpenGL to the Java desktop. However, we have experienced problems when it comes to high quality text rendering. OpenGL does not support text rendering at all. But JOGL provides some experimental workarounds, some of them looking quite promising (like the GPU accelerated Text Demo). Nevertheless we wanted to switch to a much more stable graphics library to minimize the effort of graphics programming and spend more time for music notation issues.

We had a look on JavaFX, which also looks promising, but still has a long way to go to be ready for read world-applications. Qt is great, but the Qt Java binding is outdated and more or less dead. One evening when we tried Java 2D / AWT again, we were surprised by its speed. Back in the days when we began to work on Zong!, it was incredibly slow, but its performance has been greatly improved in Java 6 (and maybe 7). Now we are able to paint pages with about 1500 musical symbols (SVG paths) with about 30 frames per second! Welcome back, AWT 🙂

Here is a new screenshot of the Zong! Editor, showing some symbols and text, which are now rendered sharply at each zoom level:

scr-editor-2013-01-09

Zong! Webviewer Server is online

A first version of our Zong! Webviewer Server is now online. It allows to open MusicXML files via the internet, renders them to PNG images, MP3 and OGG audio files and computes the cursor positions for playback visualization. There is a demo page which demonstrates the features for some given sample files, but also allows to open your own MusicXML files. The server is based on the Zong! libraries, Jetty and the H2 Database Engine.

As you can see, the server just provides a backend which can be controlled by sending JSON encoded commands. The next step is to create an HTML frontend (HTML 5 and JavaScript) that uses this backend to present a user-friendly online viewer for MusicXML files.