Hi, here is a proposal draft.
Is it correct in general? Any wishes?

Title: Improved MIDI import for MuseScore notation program


=== Name ===

Andrey M. Tokarev


=== Location ===

Russia, Moscow, UTC+4


=== Contacts ===

Email: [email protected]
IRC: trig-ger


=== Synopsis ===

The project goal is to improve MIDI import in MuseScore by implementing
several different features
that will be useful for conversion MIDI to music notation. There is no
one-to-one conversion
from MIDI to music notation in general but the conversion process can be
made more accurate
and lose minimum information.


=== Benefits to MuseScore ===

MuseScore users will be able to import MIDI files
and convert them to music sheets more conveniently, with less hand-work
and hopefully more precisely.

For example, even partial automatic splitting of imported piano track into
two (left/right hand) tracks will simplify the whole editing process.

Currently MuseScore doesn't do MIDI recording in real time from a MIDI
device
so it is important to import MIDI files recorded with other software.


=== Deliverables ===

Improved MIDI files conversion into music notation, such as:
- clearer music notation, for example, use dots instead of ties where
possible
- better left/right hand separation for piano music in the case of a single
input track
- triplet recognition and possibly other tuplets
- swing style recognition: notate it as straight notes, but still play swing

And, if it will be enough time, some other ideas like voice separation:
complex but interesting task -
make MuseScore to do it automatically.


=== Project Details ===

The proposed import MIDI functionality is about recognition MIDI timeline to
musical notation.

Left/right hand MIDI piano track separation can be performed not simply with
a "split point",
eg, everything above middle - in treble clef, everything below - in bass
clef.
Fingering can be taken into account, natural width of hand (octave + 2-3
seconds max).
And some simplification of the result notation can be carried out, for
example,
several tied notes with the same pitch can be replaced in some cases with
one long note.
Also we can choose treble or bass clefs dynamically in dependence on the
middle point of chord for each hand.
I think it is useful to take a look at some commercial conversion software,
such as Notation Musician,
which output is very good - the source of inspiration.

As for tempo and notes duration, consider beat duration is equal to 1.0.
Notes with the 1.5 duration can be represented in the sheet as 1.0 note +
0.5 note connected with a tie
or 1.0 note + dot. 1.75 duration = double dotted note and so on.

There is also an idea to fix import of triplets and - tuplets, in general.
Triplet is a group of three notes that last for two beats. So the
recognition process is based on this fact.
Also triplet can be a pause plus two notes - here we have two notes with 6/4
of beat duration.
Other tuplets are expected to be treated in a similar way.

Swing notation has a good description on Wikipedia:
http://en.wikipedia.org/wiki/Swing_(jazz_performance_style)#Swung_note
and can have different rhythmic approximations. Swing has shuffle rhythm.
General MIDI drums - channel 10.


=== Project Schedule ===

May 28 - June 16 (3 weeks)
    Get to know better mentor and the community.
    Discuss MIDI import tasks, get familiar with MuseScore code, try some
ideas.
    Read more about MIDI format (Wikipedia, different articles, ...)
        and MIDI convertion to music sheets, program examples,
        for example "Converting MIDI to traditional music score" -
        A comparison of music notation software -
http://www.skytopia.com/project/articles/notation.html
    Read resources about tuplets, swing rhythm, and drums in connection with
MIDI files.

June 17 - July 28 (6 weeks)
    Week 1. More proper implementation of LH/RH piano track separation, read
some user discussions
            for example, "Split Midi track to double staff" -
http://musescore.org/en/node/3195
            "How do I import midi files into a piano score setting" -
http://musescore.org/en/node/16070
            "How To Divide 1 Chord to 2" -
http://musescore.org/en/node/13474
    Week 2. Testing track separation.
    Week 3. Implementation of import MIDI with dot notes instead of ties
            + use import MIDI code of previous stable MuseScore versions.
    Week 4. Triplet recognition (3 notes during 2 beats), also read user
notes,
            for example "Can't open a MIDI file with triplets" -
http://musescore.org/en/node/17592
    Week 5. Other tuplet recognition if possible.
    Week 6. Testing written code and preparation for evaluation.

July 29 - August 2
    Mid-term evaluation time

August 3 - August 6
    Small vacation

August 7 - September 15 (6 weeks)
    Week 1. Drums import, repeat drum marking in MIDI file.
    Week 2. Swing import, repeat some articles on this topic.
    Week 3. Testing.
    Week 4-5. Possible time for additional ideas: voice separation and
others.
    Week 6. Testing written code and preparation for evaluation.

September 16 - September 22 (1 week)
    Final testing and bug-fixing.

September 23 - September 27
    Final evaluation time.

September 27 - September 30
    Submittion of code samples to Google.


I plan to do some coding before June
and I'm going to work on this project 3/4 time during June and full-time
during the rest of the GSoC period.


=== Bio ===

I graduated from Mendeleyev University of Chemical Technology of Russia and
now
I'm a postgraduate student there.
For my thesis during the past two years I developed simulation program (C++,
Qt)
for investigation of aggregation kinetics of colloidal particles
by Langevin dynamics simulations.
In this program I implemented algorithms for
different particle distributions, collision detection and collision
handling,
for particle pairwise-interaction calculation and some others.
I have several paper works on calculations performed by this program.

I like programming and reading computer literature.
Recently I finished "Algorithms" course by Robert Sedgewick and Kevin Wayne
on Coursera.

When I have free time I enjoy playing the piano, and computer helps me to
edit and print music scores.
Some time before on Windows I used Finale and SmartScore for editing piano
sheets.
Now I'm working on Linux and MuseScore is my main notation program.

And about open source, I used several open-source libraries in simulation
program
and I'm interested in open-source software in general.

I have some experience in contribution to open-source projects.
I contributed to Qt Creator, modern C++ IDE, one of the commits merged with
master branch:
http://qt.gitorious.org/qt-creator/qt-creator/commit/72e0ded

And my recent contribution to MuseScore - prototype for LH/RH MIDI track
separation:
https://github.com/musescore/MuseScore/pull/309

I always wanted to improve software that me and other people use.
Now I have an additional chance to do so.
I have a great interest to implement mentioned and some other musical
features
in MuseScore program and improve MIDI import.
And I'm going to complete this proposed project.


--

Andrey M. Tokarev

[email protected]
IRC: trig-ger

http://github.com/trig-ger
http://gitorious.org/~trig-ger




--
View this message in context: 
http://dev-list.musescore.org/GSoC-MIDI-proposal-draft-tp7578046.html
Sent from the MuseScore Developer mailing list archive at Nabble.com.

------------------------------------------------------------------------------
Try New Relic Now & We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app, & servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr
_______________________________________________
Mscore-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mscore-developer

Reply via email to