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: tobia.te...@gmail.com 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 <tobia.te...@gmail.com> <sip:tobia.te...@ekiga.net> "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 Mscore-developer@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mscore-developer