Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Audiveris - a beginners experience and problems #694

Open
SofNotenwart opened this issue Nov 7, 2023 · 6 comments
Open

Audiveris - a beginners experience and problems #694

SofNotenwart opened this issue Nov 7, 2023 · 6 comments

Comments

@SofNotenwart
Copy link

I’m not sure if I should put my comments and problems under Issues or Discussions so you may have to correct me. This first one, I put under Issues.

I’m a beginner using Audiveris. Overall I think the initiative for such a program is great and, of course, it’s not perfect. In fact, none of the Music Recognition programs I’ve tested so far (so far I’ve used Audiveris, SharpEye and CapellaScan) deliver an error free output.

Computer / Software environment

  • Dell Laptop Insperion 7415 2-in-1
  • Architecture: amd64 Ryzen 7 5700U
  • 16GB RAM Memory / 1TB SSD
  • Windows 11 10.0 home
  • Audiveris: 5.3.1:5aa4d06dc
  • Java VM: Java HotSpot(TM) 64-Bit Server VM (build 20.0.1+9-29, mixed mode, sharing)
  • OCR Engine: Tesseract OCR, version 5.3.1

As an experiment, I’ve performed OMR on Dvorak’s 9th symphony. At first on very good quality output from Lilypond (which I’ve engraved earlier) and secondly from a scanned score from an original I had at home but first a few word regarding Audiveris StartUp

Error messages

  • LogUtil. Property logback.configurationFile not defined, skipped.
  • LogUtil. No C:\Users\tommy\AppData\Roaming\AudiverisLtd\audiveris\config\logback.xml, skipped.

What is this, and is it important for the OMR process / performance? If yes, what must be done to correct it?

Storage of Audiveris “products”

  • One of the log files is stored in Logging to C:\Users\tommy\AppData\Roaming\AudiverisLtd\audiveris\log, why, it’s almost difficult to find. Wouldn’t it be better to store the log-file where the original pdf-file is located
  • The OMR-file is stored in yet another directory with one additional subdirectory for each performed recognition, e.g. C:\Users\tommy\OneDrive\Documents\Audiveris.

Can’t this be setup such that both are stored in the same place, e.g. were the original pdf-file is stored. An additional subdirectory s not needed as far as I can judge but maybe there is a logical explanation for this.

As it is now, you “polluting” the mass memory with a lot of files and subdirectories which, in the end, you probably forget to remove when you are finished.

Memory Limits

Performing OMR I had to split Movement 1 in three parts as because of too many errors. One of the typical error messages is
Caused by: java.lang.OutOfMemoryError: Java heap space.

I’ve read some postings about this, e.g. #538. What is the default setting which you get when you use the Windows installer? It looks like it can be increased but can it be done without recompiling the code? This is something I never done before.

OMR Problems

If there is a need, theses will be covered in separate posting

@hbitteur
Copy link
Contributor

hbitteur commented Nov 7, 2023

Error messages

  • LogUtil. Property logback.configurationFile not defined, skipped.
  • LogUtil. No C:\Users\tommy\AppData\Roaming\AudiverisLtd\audiveris\config\logback.xml, skipped.

What is this, and is it important for the OMR process / performance? If yes, what must be done to correct it?

These are not error messages, but just technical information. Perhaps too technical.
They refer to the ability for the end user to tune which messages should be printed by Audiveris application.
The default is only info, warning and error messages.

But you can ask for more, such as debug messages for certain classes. This is specified via a logback.xml file that you can provide in a certain location. This location was tested at runtime, no logback.xml file was found there, therefore the default messages are used.
That's all. No error.

@SofNotenwart
Copy link
Author

Regarding the heap size, there is a statement in the file build.gradle (lines 49-50) that

minHeapSize = '512m'
maxHeapSize = '1g'

Is this a compiler setting or can this be changed elsewhere? I assume it would help and maybe avoid the error message Caused by: java.lang.OutOfMemoryError: Java heap space. Reported above.

@hbitteur
Copy link
Contributor

hbitteur commented Nov 8, 2023

Storage of Audiveris “products”

  • One of the log files is stored in Logging to C:\Users\tommy\AppData\Roaming\AudiverisLtd\audiveris\log, why, it’s almost difficult to find. Wouldn’t it be better to store the log-file where the original pdf-file is located
  • The OMR-file is stored in yet another directory with one additional subdirectory for each performed recognition, e.g. C:\Users\tommy\OneDrive\Documents\Audiveris.

Can’t this be setup such that both are stored in the same place, e.g. were the original pdf-file is stored. An additional subdirectory s not needed as far as I can judge but maybe there is a logical explanation for this.

The .log file contains all the logged messages (the ones you can read in the log window, at the bottom of Audiveris main window), together with stack dumps if any exception was raised.
It is located in Audiveris user space, which for you is C:\Users\tommy\AppData\Roaming\AudiverisLtd\audiveris
For more information on Audiveris folders, please refer to this handbook section.
The log folder is one of the cached folders.
The precise location of the log file for the current session is displayed at the beginning of the log window.

The .omr files, as well as the other outputs, are handled differently. Please refer to the section on standard folders, still in the handbook.
By default, the "historical" policy applies (one separate folder per book, located in the standard folders).
But you now have the ability to use a different policy, by which the outputs are written as siblings of the input file, as described in the same handbook article.
My understanding is that this is what your post is asking for. Great minds think alike ... :-)

@SofNotenwart
Copy link
Author

Thanks, I will check. I remember yesterday night when I skimmed through the handbook I vaguely remember seeing something.

Yesterday I made a quick Audioveris run on the first movement of Dvorak's symphony #9 and checked the OMR quality. I used a Lilypond generated score as well as a score from IMSP.

To my surprise the Lilypond conversion was not good. In particular it missed most 1/8 rests and many beams. I will come back to this in s separate post.

By profession I'm a space engineer, satellite deep space navigation and control, software and operations. For navigation, one important sensor is the star tracker which autonomously determine in which direction the spacecraft is pointing. A star tracker identify, stars, cluster of stars and galaxies and based on for example their size, brightness and the angulsr separation between them determines where you are pointing. For this, pattern recognition and star catalogues are used. To improve pointing, the star "images" are defocused (to create a Gaussian distribution), which improve the determination of the centre of a celestial object as not all of them can be considered as point sources. A star tracker delivers a full attitude determination with up to 8Hz. Speed is the key so ADA or today C++ programming language is used. For extremely time critical operations, even machine coding is utilised.

I've not a full understanding of Audiveris but from what I've read so far, it seems that some of these techniques are implemented. Great respect.

@hbitteur
Copy link
Contributor

hbitteur commented Nov 8, 2023

Regarding the heap size, there is a statement in the file build.gradle (lines 49-50) that

minHeapSize = '512m'
maxHeapSize = '1g'

Is this a compiler setting or can this be changed elsewhere? I assume it would help and maybe avoid the error message Caused by: java.lang.OutOfMemoryError: Java heap space. Reported above.

As you noticed in #538, you can modify the maximum heap space as a jvm argument passed to Gradle.
For example:

./gradlew -PjvmLineArgs="-Xmx2G" run

This is OK when you launch Audiveris from Gradle.

When launching Audiveris installed by the Windows installer, there are two system environment variables you can use to pass JVM arguments:

  • JAVA_OPTS
  • AUDIVERIS_OPTS

Set one of these to something like -Xmx2G, as above.

I will need to update the handbook.
Thanks for pointing this out.
/Hervé

@hbitteur
Copy link
Contributor

hbitteur commented Nov 8, 2023

I've not a full understanding of Audiveris but from what I've read so far, it seems that some of these techniques are implemented. Great respect.

Thank you !
FYI, the very first implementation of Audiveris, something I started as a hobby in 1998, was written in Ada...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants