Fantastic Fantasy! takes as its inspiration the tradition of improvisational "sparing" that piano virtuosos of the 18th and 19th centuries engaged in. During these competitions, performers composed fantasies/ variations on a theme on the spot, based on themes that were widely known or provided by the audience.
Fantastic Fantasy! endeavors to create a fun, creative experience for users, in which the computer guides them on a fantasy-making journey. I wanted to educate and excite people who may not have a musical background by teaching them to create the accessible fantasy/ theme and variations form. Fantasy generation was part of a tradition of improvisatory performance that has been lost in recent centuries, and I thought it would also be interesting to "bring it back" to an extent through this software. It was important to me that the software was easy to use and that it facilitated music making for all users, particularly those with no musical training. At the same time, I hoped to create a program in which the musical foundation was tangible enough, and users were given enough instruction, that they would learn about music and composition in the process.
I tested this software on the people I trust the most, my friends! In trials I included musicians as well as people with minimal musical training to discern the ease with which both groups could easily create and get excited about creating musical themes and variations. My success metrics were ease of use and intuitiveness in terms of the UI, ease of use in terms of creating themes and variations of musical interest and a unified nature (with no chance of "wrong" notes and mandatory note sequences that effectively unified the material by evoking previous variations), usefulness of the software's variation generation tools/ suggestions, and ability of non musicians to create themes and variations in a purely visual and non musical manner.
When the program begins, users find themselves in "edit/composition mode," specifically in the first theme view. Mandatory tonic and dominant chords are already in place to help users create a pleasing melody. The program is set up in such a way that users not need to have musical training to create a theme that sounds good in a particular key; there are no wrong answers and users may simply follow a musical or visual shape they like, tweaking as they go along, to craft a theme. The program also offers instruction and blocks certain notes to facilitate theme making. After users have crafted a theme they like, if they have entered enough notes, the right arrow key will unlock a new edit view. This is the first variation view. The program automatically locks a set of notes from the first theme and tonic/ dominant chords to facilitate variation creation. For this, and subsequent variations, the computer offers suggestions, musical tools, for how one might create a unique variation. In the first and subsequent variations, users may also begin to insert material in the columns after the final two computer generated notes, to create a coda or upbeat. This process continues until users have finished all 7 variations (the program allows them to loop through previous themes). At any point, users may toggle "x" and move to "listening mode."In listening mode tipped teapots and droplets coming out of them (to designate the currently playing melody) are shown for the theme and all variations. In this mode, users may dictate the order of their composition and even mix different themes or variations by using the right and left arrow keys. Users may also simply sit back and enjoy their finished fantasies!
Both Major and Minor keys (C Major and a minor)
12 possible notes, from the G# below middle C to a C one octave above middle C (G#, A, B, C, D, E, F, G, G#, A, B, C)
32 steps, or four bars of subdivisions down to the eighth note, offering a wealth of rhythmic possibilities
Composition suggestions, tools, and tips for the theme and first four variations
Note constraints for every theme and variation (both notes which cannot and which must be played) --to help users easily create a pleasing theme with key-appropriate notes and learn the elements that go into such a pleasing theme
Likewise, themes and variations note number constraints are in place so that melodies are created with enough notes to be designated as such
Organically and automatically generated note constraints based on each preceding variation/ theme, thus providing built in musical unity.
Easy, intuitive, visual interface inspired by a sequencer that is comprehensible and usable for musicians and non musicians
Polyphony enabled
Metronome feature
Speed up or slow down the tempo feature
This program was written in C++ with OpenGL for graphics and RtAudio and FluidSynth for sound. I used code from Professor Ge Wang's "Bokeh" program, as well as his x and y apis. Jorge Herrera helped me with this program. Please see a class diagram and audio vs. graphics diagram below. Importantly, I had a "Bank," to store all of the melodies in the program (themes and variations are both "melodies") and inform users they are in different modes and what to do in each. The conceptual link between themes and variations is something I call a "skeleton," or the mandatory set of notes that users must include in their themes and variations. Each theme and variations set includes three skeleton notes which are always passed from one theme to the next variation and so on. In addition to these three notes, each theme and variation has an additional set of mandatory notes that are added to the skeleton. For the theme, these notes form tonic and dominant triads with the other skeleton notes. For the variations, mandatory additional skeleton notes are organically generated based on the previous melody.
To run, click this link: Source Code and download and unzip the files. In the terminal, navigate to the FantasticFantasy directory and write "make" and press "enter," then write "./FantasticFantasy" and press the "enter" key. Make sure you have FluidSynth installed prior running the program. The program should begin running. Be aware that if it does not run and you get an error about it not being able to initialize real time audio, you may need to change the channel numbers in FantasticFantasy.cpp to 0 and 1 from 1 to 2 (33rd line of FantasticFantasy.cpp). See keys/usage for running the program below.
'mouse clicks' - in Edit mode, click on the notes you would like to turn on/ play (the rotated cubes may not be turned on)
'h' - print this help message
's' - toggle fullscreen
'q' - quit visualization
'space bar' - play/pause
'b' - (change) color to black
'z' - toggle mode
'x' - turn off beat/ metronome in edit mode
'space bar' - play/pause
'left and right arrow keys' - in both modes, move backward or forward through the melodies (you must enter enough notes into a melody for the right arrow to unlock the next variation screen)
'+=' - increase tempo
'-_' - decrease tempo
'Note:' - in both modes a message in a the terminal will tell you when you have moved from one melody to the next (both where you have moved to and where you moved from)