Dynamically Generated Music Tracks A New Approach to the Modern Guitar Hero
Our Team Michael Smith (myself) Dylan Barrett Karen Tipping
Currently Current play along music games allow: Instrumental controllers (guitar, drums) Different difficulty levels Variety of pre-made songs
Examples “Guitar Hero” - Activision “Rock Band” - Harmonix “Frets of Fire” - Open Source Project
Watch
Music Tracks All the current games function the same. Tracks pre-coded by hand. Can only play songs that have been composed. Composed tracks are ‘perfect’.
Downside Limited song selection Song ownership
Alternative Dynamically create music tracks For song of players choice
Imagine A New Game When a user plays the game: Can play any song they own At a desired difficulty level Can play any instrument in song If they have the add-on for it
Instrument Add-On Each instrument fundamentally different from others. Different handlers for different functionality. Similar to device drivers. Ex: Guitar add-on lets user play any guitar track found in any song
So.... User will choose a song User will choose a difficulty setting User will choose an instrument Game will generate a track for that song For that instrument At that difficulty setting
Project Scope Described game very complex Only have a single semester Narrow down the focus to create an effective Proof of Concept demonstration Take advantage of tools already available to save time
Existing Framework Open Source “Frets of Fire” Designed for guitar Playable track stored as MIDI file MIDI file basically a musical XML
Our Goal Create a tool that: Takes a Guitar only song Analyzes the song Outputs a playable track In Frets of Fire format At a selected difficulty setting
Data Gathering Need location and values of musical notes Similar to creating a music visualization Tool called Analyze from The Echo Nest Returns XML file with comprehensive data about a submitted song the.echonest.com/analyze/
Analyze Demo Music visualizer created by Anita Lillie of MIT using this tool shows its power.
Data Recording Parse the XML to: locate notes find song structure (solo’s, chorus, etc...) Create a Musical Data Structure to record the information Linked List Node contains Note and Timing
Track Generation Range of notes need to be compressed Need to fit range of controller Ex: Current Guitar games have 5 notes Not all notes should be put into track Ex: Hendrix vs Average Player Variations between difficulty levels
Difficulty Levels Easy (least note density, more repetitive) Find common repeated note structures Fewest notes needed for that structure Medium Greater density, less repetitive notes Hard Solo’s, high note density, least predictable For harder levels, add in more of
How to Decide Structural analysis on the song A Suffix Tree can find common sub- sequences/patterns of notes Use a set of Heuristics to make decisions Evaluate note density, timing, etc... Heuristic values can be adjusted Player response = better gameplay
First Stage Tasks Timeline: weeks Reverse Engineer FoF MIDI file format Use javax.sound.midi to create MIDI files Simple music clips to understand Analyze Create java functions to extract the data
Second Stage Tasks Timeline: weeks Define Musical Structure Create a set of plausible Heuristics Consult with School of Music
Third Stage Tasks Timeline: weeks Generate FoF formatted songs using all previously created tools
Fourth Stage Tasks Timeline: remaining time Test code for errors Run game to tweak heuristics for better play
Questions?