musescore/MuseScore — pull request #1059 by trig-ger (2014-07-22 12:52:22+00:00)
Title: MIDI import: the step to a new level

This major update brings several improvements to the MIDI import:

- Import of unaligned files (“human performance” option) + beat detection, and there is a room for development.
Some readable results:
https://drive.google.com/file/d/0B5alKuFoSol2dFNHZ0tzLVVjSWs/edit?usp=sharing

Raw result, without adjustment - to compare:
https://drive.google.com/file/d/0B5alKuFoSol2OVdMVTNJNmdNX0E/edit?usp=sharing
MIDI - https://drive.google.com/file/d/0B5alKuFoSol2X0xXYndnMnpVLTQ/edit?usp=sharing

- Voice separation (to reduce the number of ties). Example:
https://drive.google.com/file/d/0B5alKuFoSol2RVdiMzBUc042eTQ/edit?usp=sharing
MIDI - https://drive.google.com/file/d/0B5alKuFoSol2aktLZ0R3QlZ6YmM/edit?usp=sharing

- Duration simplification (notes are lengthen such that the duration becomes to consist of less chords, also number of rests is reduced too)
+ staccato is added, if appropriate:
http://wstaw.org/m/2014/05/06/staccato.png

- More “smooth” staff split into left/right hand for keyboard instruments

- New table-like GUI panel for MIDI import:
https://drive.google.com/file/d/0B5alKuFoSol2amxXVzF6czAwYTg/edit?usp=sharing

- Possibility to load MIDI import options from xml file on program start (from command line), so the import can be tested on large MIDI file collections. The testing on one of such large collections (>12000 MIDI and karaoke files) helped to fix a number of bugs and still reveals new bugs. This process never ends :)

Script to start tests:
https://gist.github.com/trig-ger/d9cf0810abcb350e55d1
For this script in mscore directory I created midi/basic/ directory for basic testing and options/ directory to put options into. For massive testing I splitted the whole collection into 7 parts to test them in parallel in 7 processes, and for each part there was a separate script with the corresponding subdir value.
So each MIDI file is imported with all option cases in options/ dir. The ideal number of passed tests would be ~12000 * number_of_options.

Example of xml option files:
https://drive.google.com/file/d/0B5alKuFoSol2QmlfS1dOWGRJQ1U/edit?usp=sharing

- Lots of bugfixes

***
Beat detection is implemented with the help of Beatroot library by Simon Dixon, GNU GPL v2.