MIDI import improvement project
=== 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
- Lyrics without slashes (\ /) - screenshot
- Title and composer/performer import - screenshot
- MIDI file
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:
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
- before split: Screenshot
- after split: Screenshot
- MIDI file
UI panel to specify MIDI import operations
Apply operations on MIDI tracks and get the immediate result (see screenshots above).