Hi all.
I'm Tobia; some of you know me by the handle of t0by on Freenode.
I'm a MSc student at the University of Padua and a slightly
music-obsessed person; you can find a more thorough bio below.
I am considering participating in GSoC with MuseScore this year and
possibly becoming a regular contributor.
I have previously participated in GSoC in 2013 with ScummVM, and kept
contributing on my (little) spare time.
I have my eyes set on the chord playback idea, which is a feature I've
always wanted myself in a notation program.
After some chatting with Marc and Nicolas and some thinking I've drafted
a very very early proposal; very rough, it's little more than an idea.
Still, I would be thrilled to know your thoughts about it.
You can find an outline of it below.
There is some ASCII art sprinkled, I apologize to those who have a
variable width font as their default setting.
Thank you very much; have a nice day!
Tobia
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Title: Chord playback
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Name: Tobia Tesan
Email:
[hidden email]
IRC: t0by on Freenode
GitHub: github.com/tobiatesan (I think there is some terrible Qt code
I wrote in my freshman year for a project in here; I apologize for that)
Synopsis:
=========
This proposal is for building and adding a easily maintainable,
extensible system for playing back chord symbols in Musescore.
It would include an easily extensible infrastructure and features to
realize chord symbols in their harmonic and rhythmical dimension.
It would also include an initial standard 4-part-harmony and a
strummer-guitar-chords implementation.
Benefits to MuseScore:
======================
These features answer the need of composers to quickly jot down fake
book-style sheets and preview them.
The two initial implementation themselves answer two very large use
cases - very broadly speaking, pop/rock and non-pop/rock western music.
A semi-credible guitar strumming (listed below as a stretch deliverable)
is a particularly valuable tool to professional songwriters who can
quickly jot down a song on a train and preview them to a client
immediately (perhaps adding bass and drum kit staff); I believe that
this can make MuseScore stand out.
Deliverables:
=============
MIDTERM:
- Prototype offline chord harmonizer in Qt/C++ (exact rules TBD)
- Prototype offline rhythm realizer in Qt/C++
- Tests
FINAL:
- Adapter, UI tweaks and integration
- Guitar chord harmonizer implementation
STRETCH DELIVERABLES:
- Guitar strummer
- RenderMidi partial refactor
- "Render to staff" / "Freeze" harmony
Project Details:
================
The architecture I have thought of is an offline two-step pipeline; in
the first step chord symbols are harmonized/voiced according to a given
algorithm or ruleset (e.g. "4-part harmony" or "always and only
first-position acoustic guitar chords"); in the second step the
resulting harmony is rhythmically realized.
Finally the result is rendered to MIDI
+------------+
chords -->| |
[A C G] | HARMONIZER |
| |
meta---> +------------+ ------___---
| harmony ------___---
v ---______---
+------------+ ___
| | --- ___---
slash --->| RHYTHM |
notation | PLAYER |
[^v^v ] | |
tempo --->+------------+
|
| harmony + rhythm
|
|
v -- - -- - __ _ -- -
MIDI +-------------+ -- - -- - __ _ -- -
sync | | -- - __ _ __ _ -- -
----> | RENDERER | __ _
| | -- - __ _ -- -
+-------------+
|
v
MIDI
[0x80 0xB1 0xFF 0x80 0xB2 0x... ]
Initially, infrastructure and a few simple implementations would be
provided, with the idea of allowing future extension:
+----------+
| HARMONZR |
+----------+
^
/_\
|
+-------------+
| |
+----------+ +-----------+
| 4-PART | | ACS GUIT |
+----------+ +-----------+
+----------+
| RHTHMPLR |
+----------+
^
/_\
|
+-------------+
| |
+----------+ +-----------+
| GATE | | GT STRUM |
+----------+ +-----------+
Ideally, the first two pairs of implementation provided would be
1. 4-part harmony and a simple gater
2. guitar chords realization and a strummer
By "strummer" I mean something that can render the characteristic effect
of guitar strumming, rendering a chord as a very fast arpeggio,
ascending or descending depending on picking direction.
2. would be an optional deliverable, in case no particular difficulties
are encountered.
Initially, these would be prototyped "in a vacuum", in Qt/C++, and later
on plugged into the rendering engine (i.e. render_midi.cpp) with a thin
adapter layer.
This might include a bit of refactoring work on RenderMidi, to be defined.
Project Schedule:
=================
Schedule TBD, based on the mid-term and final deliverables above if
confirmed.
Bio:
====
I'm Tobia, I'm a MSc student at the University of Padua, where I earned
my BSc with a 108/110 final grade.
My interests are chiefly Machine Learning, Data Mining, Artifical
Intelligence, Computer Graphics and Software Engineering in general.
I have previously encountered Qt 1. academically and 2. while doing
design and prototyping work on a Qt application for "a leading company
in the field of Trusted Certification Solutions and Electronic Document
Management services".
I previously participated in GSoC in 2013 with ScummVM and kept
contributing since.
I have also been mildly obsessed with music from an early age.
My current favourites are Chopin and Janacek's piano music, Poulenc's
chamber music, Dowland's lute music and early music in general;
Cannonball Adderley, Mingus, Kate Bush.
I have not received much formal musical education, but I can read music,
I play piano and sometimes I make noises with guitars.
I am somewhat proficient with sequencers; I have used for an especially
long time Ableton Live.
Once I built my own MIDI-controlled analog synthesizer around a 16F84 IC
and a UART; didn't sound very good.
I played in a few prog rock and metal bands. Didn't sound very good either.
Another time I wrote music to an amateur theatre production, with
somewhat better results.
--
Tobia Tesan
<
[hidden email]>
<sip:
[hidden email]>
"The question of whether Machines Can Think is about as relevant
as the question of whether Submarines Can Swim."
-- Edsger Dijkstra
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140_______________________________________________
Mscore-developer mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/mscore-developer