MIDI import improvement project

Updated 1 year ago

=== The project goal is to improve MIDI import functionality ===

--------------------------------------------------------------------------------------
Current work

More "smooth" clef changes (for single notes, ...)

--------------------------------------------------------------------------------------
Plans

  • Availability of the original MIDI durations.
  • Quantization of slightly unaligned MIDI files.
  • - Use Simon Dixon's algorithm (C++) for automatic beat recognition.
    - Ask user to adjust, if necessary, the start and the end points of the first bar on piano roll or specify the time scale difference between MIDI events and the ideal grid.

--------------------------------------------------------------------------------------
Implemented features

Lyrics import from karaoke (.kar) files

Selectable lyric import option
Combo boxes in Lyrics column of MIDI import panel gives an opportunity to select the track to assign lyric to.
Example of karaoke file with one lyric track:

Another, manually created example shows multiple lyrics support (2 lyric tracks):

Drums import

Here is a MIDI import of drums:

Also there is an option of a drum staff splitting (thanks to chenlung for his idea):

Split without staff bracket:

Swing notation (without playback)

Here are some examples of swing detection results.

Triplet swing (2:1)

Shuffle (3:1)

Larger piece

Automatic clef selection within a staff depending on average chord pitch

Clef changes option is checked in the MIDI import panel by default.

Tuplet recognition for MIDI import

Below are some examples of automatic MIDI import.
Manual adjustments/highlights are made in a couple of cases to show that program correctly handles multiple voices.

MIDI file:
Triplets - piano roll

Result of the import:
Triplets - result of the import

Triplet

Triplet when time sig = 3/4

Triplet when time sig = 5/4 (reply to Tuplet rhythms in MIDI import)

Duplet (time sig = 6/8)

Qaudruplet (time sig = 6/8)

Triplet and other shorter notes

Mixed triplets, including triplet with rest

Septuplet

Nonuplet (time sig = 3/4), requires 1/64 quantization

Nonuplet (time sig = 4/4), requires 1/64 quantization

2 voices - triplet and regular notes

2 quintuplets (rest is inside one of them) and manually space-adjusted case

2 voices - triplet and quintuplet.
Need to manually set quantization value to 1/32

3 voices - triplet, quintuplet and septuplet simultaneously
and manually space-adjusted case + highlighted case

Larger piece example (reply to Can't open a MIDI file with triplets)

"The Oxman Returneth" by Marc Sabatella - various triplets + pickup measure

-- Recognition of first and last tuplet tied notes --

First tied note:

Last tied note:

Tied tuplets:

Track reordering in MIDI import panel

For example, left piano track goes above right track that is incorrect, so we can move right track to the top.

Pickup measure support

Duration subdivision based on metrical analysis

Notes, rests + dots and ties are created according to strong/weak bar divisions.

=> Here are some examples of automatic MIDI import:

Half note at the center of 4/4 bar

Half rest at the center of 4/4 bar

Rests and chords near beats

Half rest at the start or at the end of 3/4 bar - divided into quarter rests

Example of larger piece of music

Last quarter rest in compound meters like 6/8 - splitted into 2 8th

12/8 compound bar

Rests of mixed duration

Left/right hand separation of piano track

In addition to fixed-pitch split there is an option to take into account the average hand width of the pianist.

Example

UI panel to specify MIDI import operations

Apply operations on MIDI tracks and get the immediate result (see screenshots above).