Difference between revisions of "GuitarFace"

From CCRMA Wiki
Jump to: navigation, search
 
(26 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
Welcome to the GuitarFace Wiki! Check out the GitHub repository for GuitarFace here: https://github.com/ginacollecchia/GuitarFace.
 +
 +
Why is this project called '''guitar face'''? It started with a feeling. Which felt a lot like this.
 +
 
[[File:Brianmay_guitar_face.jpg]]
 
[[File:Brianmay_guitar_face.jpg]]
  
 +
Oh hey there Brian May! I bet you're playing some sweet jams. Here are some other amazing guitar faces. Try to notice similarities between them.
  
== Goals ==
+
[[File:Gary_Moore_guitar.jpg]]
  
* To detect the facial features of the "guitar face" using OpenCV
+
Gary Moore, amazing
* To make a visualizer of musical MIDI data that records and rewards user input in real time
+
  
== Motivation ==
+
[[File:Ritchie_guitar.jpg]]
  
Guitar faces are hilarious. Funny faces in general are a fairly unexplored territory of facial recognition, mostly existing in the domain of mood detection.
+
Ritchie Sambora, squeezing one out
  
Extracting musical features, even from MIDI, is an intriguing domain for players who want more feedback about their playing.  
+
[[File:Metheny_guitar.jpg]]
  
== Storyboard ==
+
Pat Metheny is trying, people.
  
MIDI data is input in real time from a MIDI guitar pedal unit, the Roland GR55. The data isn't perfect, but the software is designed specifically with guitarists in mind.
+
[[File:Malmsteen_guitar.jpg‎]]
  
Similarly, there are other features besides instrumentation that are core to rock, and furthermore rock guitar soloing:
+
Yngwie! So many nooootes.
* scale / key / intonation
+
 
* timing
+
[[File:Joe_Satriani_guitar.jpg]]
* dynamic range (loudness)
+
 
 +
Joe Satriani, stunned
 +
 
 +
''(source for most of these images: http://www.guitarburn.com/2009/09/the-10-most-disturbing-guitar-faces/)''
 +
 
 +
'''Similarities''':
 +
* open mouth, maybe even some tongue action, OR pursed lips
 +
* closed eyes OR buggy eyes
 +
* scrunched face OR long face
 +
* raised head?
 +
 
 +
With these observations, we believe there might be extractable features of a '''guitar face'''. Using face tracking algorithms, we were able to successfully detect an open or closed mouth and open or closed eyelid. Upon this detection, a guitar face graphical event occurs.
 +
 
 +
MIDI guitar input is paired with the computer vision in order to trigger events in a visual environment, so that guitarists (and other musicians alike) can get real time feedback of their playing, and fun rewards for their practice sessions.
 +
 
 +
== Usage ==
 +
 
 +
Open GuitarFace.xcodeproj with Xcode. After running, pressing '''s''' will start the GuitarFace game. Press '''q''' at any time to quit.
 +
 
 +
== Goals ==
 +
 
 +
* To detect the facial features of the '''guitar face''' using OpenCV (SUCCESS!)
 +
* To make a visualizer of musical MIDI data that records and rewards user input in real time (SURE!)
 +
* To be able to compare sessions against one another and track individual progress (NOT SO MUCH!)
 +
 
 +
Networking was a little too last-minute to be implemented. With networking, we were hoping to send guitar face events to a second player, which would appear on their screen.
 +
 
 +
== Assumptions ==
 +
 
 +
In our design of the musical data that we'll be providing to players, we make a few assumptions about what musicians want. Our model is similar to an exercise routine, where the user could set goals / thresholds for their practice sessions. We are interested in tracking the following variables, namely in the context of solo guitar playing and improvisation:
 +
* duration of the session / number of notes played
 +
* count of pitches in the user-defined key
 +
* count of notes on or off the user-defined beats, e.g. tempo and meter (and an optional metronome feature)
 +
* count of vibratos*
 +
* count of pitch bends*
 +
* count of slides*
 +
* count of power chords
 +
* count of musical intervals (m2, M2, P4, etc.)
 +
* count of "big jumps" between pitch (>P8)
 +
* chord labeling
 +
* dynamic range (moving average / smart)
 
* pitch range
 
* pitch range
* repetitiveness
+
* stage presence, '''guitar face'''
* non-pitched decorations
+
* fretboard heat-map: where on the guitar neck are you playing most frequently?*
* vibrato, bend
+
* repetition of pitch sequences
* stage presence (physical movements, facial expression)
+
* clarity and consistency of dynamics and intonation (streaks)
* use of pedals / FX
+
* mixture of divisions of the beat (i.e., all quarter notes = bad)
* music theory of the context, expectation (build-up and violation)
+
* pace of playing
* creativity
+
* extra-musical moments, such as palm mutes and artificial harmonics, if detectable
 +
* the distribution of these features over the specific beats of a measure
  
All of these features, when performed well or if they fall flat, can completely make or break a song. Violating these are clear violations of expectation. Naturally, we are interested in the measure of quality: what makes a good guitar solo? By "good", we mean retains our interest, impresses, and even inspires. We want to minimize the amount of subjectivity in our definition of quality, and we can do this by choosing features that we feel best contribute to "quality". 'The '''pitch''' content (melody) of the solo is a convincing example, knowing what we do about major and minor keys and other scales. '''Timing''' is another: in general, things should fall on the beat or integer divisions thereof.
+
(*these data were not possible to gather from the MIDI guitar input)
  
== User ==
+
These comprise the analytic structure of our software. We can abstract musical functions such as measure and chord naming. Each of these variables will trigger an event, whether it's a histogram/graph, numerical count, graphical object (a squiggly for vibrato, changing with time, fading away completely after some time lapse), or graphical environment change. Major changes will happen when certain (imaginary or user-set) goals are reached--for example, "100 notes!"->the tunnel is blue now!->(thought bubble) whoaaa!
  
Musicians, specifically guitar players, interested in knowing more about their practice sessions. This can be used by any instrument capable of producing MIDI output. The output can serve as a score, though we don't really think of it primarily that way; we're more interested in the statistics and progress one makes toward set goals in their practice time, such as the change in duration from session to session, or pitch and volume content.
+
== Storyboard ==
  
== The Product ==
+
[[File:Environment.jpg]]
  
The product will use a support vector machine (SVM) to input MIDI data (tablature -> Guitar Pro -> MIDI) and feature vectors and output a classification. The product should have a few modes: '''practice''' and '''test''', for example. During '''practice''', one could see the raw data, and evaluate things in the feature space, such as timing, moments of vibrato, intonation, and more. At this stage, they could also scrub their data and extract a musical score.  
+
''Image: One idea for the graphical environment of GuitarFace. Facial tracking shown in the top left. Moving tunnel where the present is closest to the eye and past is at the center. MIDI events shown within the tunnel: 2 squiggly lines for vibrato, a star for a recent something or other. Tunnel texture looks here a lot like an FFT waterfall, but should rather represent pitches or just be pot-smokin'. Data and records shown along the bottom (first iteration ideas). Notifications of rewards in the top right.''
  
'''Test''' would output a health meter as the guitarist is playing, i.e., the software is analyzing the solo in real time. This idea points to a gaming context, where 2 friends could duel and see who comes out on top, over a range of different categories (who has better technique? timing? pitch ranges/jumps? etc.).
+
MIDI data is output in real time from a MIDI guitar pedal unit, the Roland GR55. The data isn't perfect, so hopefully, we won't have to spend much time or energy scrubbing the data in order to get decent, guitar-like musical data into the system. We don't need to play it back, anyways. We could also augment the USB MIDI data from the GR55 with 3 other forms of data: the audio signal from the guitar, MIDI out from the GR55, and the audio signal from the GR55, which sounds significantly better than the USB out.  
  
== Libraries and Previous Work ==
+
The MIDI data are passed through functions to compute the aforementioned measures, such as number of notes. These functions are wired up to the graphical display and the graphical events.
  
* OpenCV: http://opencv.org/
+
Finally, a summary of the session is output once the session is terminated, either at the end of the backing track or when the user presses 'd'.
* Roland FriendJam, for use with their MIDI sensors / pedals / interfaces: http://www.roland.com/FriendJam/Guitar/
+
  
'''Relevant papers'''
+
== User ==
 +
 
 +
Musicians, specifically guitar players, interested in knowing more about their practice sessions. However, this software can be used by any instrument capable of producing MIDI output. The output can serve as a score, though we don't really think of it primarily that way; we're more interested in the statistics and progress one makes toward set goals in their practice time, such as the change in duration from session to session, or pitch and volume content.
 +
 
 +
== Libraries and previous work ==
 +
 
 +
* OpenCV (computer vision): http://opencv.org/
 +
* LibBass (simple audio player): http://www.un4seen.com/
 +
* Roland FriendJam, for use with their MIDI sensors / pedals / interfaces: http://www.roland.com/FriendJam/Guitar/
 +
* FaceTracker (66-point facial "mask"): https://github.com/kylemcdonald/FaceTracker
  
 
'''Sensors / Accessories'''
 
'''Sensors / Accessories'''
Line 54: Line 107:
 
* Roland GR55 guitar MIDI interface / pedals
 
* Roland GR55 guitar MIDI interface / pedals
 
* Computer camera to detect guitar face
 
* Computer camera to detect guitar face
* Lighting for the face?
+
* Lighting for the face
* Accelerometer / Game-Track to track hip gyration?
+
* FUTURE: Accelerometer / Game-Track to track hip gyration
 
+
== Design ==
+
 
+
 
+
== Testing ==
+
 
+
  
 
== Team ==
 
== Team ==
Line 69: Line 116:
 
== Milestones ==
 
== Milestones ==
 
* Week 1: OpenCV compilation, research; most of MIDI code; graphics setup
 
* Week 1: OpenCV compilation, research; most of MIDI code; graphics setup
* Week 2: OpenCV feature detection progress; MIDI + graphics integration and design; make the thing work, basically
+
* Week 2: MIDI + graphics integration and design; make the thing work, basically; OpenCV progress
* Week 3: UI/UX tweaks
+
* Week 3: Guitar face feature detection
* Week 4: Code code code
+
* Week 4: Sex it up
 
+
== Scratchwork ==
+

Latest revision as of 13:27, 12 December 2013

Welcome to the GuitarFace Wiki! Check out the GitHub repository for GuitarFace here: https://github.com/ginacollecchia/GuitarFace.

Why is this project called guitar face? It started with a feeling. Which felt a lot like this.

Brianmay guitar face.jpg

Oh hey there Brian May! I bet you're playing some sweet jams. Here are some other amazing guitar faces. Try to notice similarities between them.

Gary Moore guitar.jpg

Gary Moore, amazing

Ritchie guitar.jpg

Ritchie Sambora, squeezing one out

Metheny guitar.jpg

Pat Metheny is trying, people.

Malmsteen guitar.jpg

Yngwie! So many nooootes.

Joe Satriani guitar.jpg

Joe Satriani, stunned

(source for most of these images: http://www.guitarburn.com/2009/09/the-10-most-disturbing-guitar-faces/)

Similarities:

  • open mouth, maybe even some tongue action, OR pursed lips
  • closed eyes OR buggy eyes
  • scrunched face OR long face
  • raised head?

With these observations, we believe there might be extractable features of a guitar face. Using face tracking algorithms, we were able to successfully detect an open or closed mouth and open or closed eyelid. Upon this detection, a guitar face graphical event occurs.

MIDI guitar input is paired with the computer vision in order to trigger events in a visual environment, so that guitarists (and other musicians alike) can get real time feedback of their playing, and fun rewards for their practice sessions.

Usage

Open GuitarFace.xcodeproj with Xcode. After running, pressing s will start the GuitarFace game. Press q at any time to quit.

Goals

  • To detect the facial features of the guitar face using OpenCV (SUCCESS!)
  • To make a visualizer of musical MIDI data that records and rewards user input in real time (SURE!)
  • To be able to compare sessions against one another and track individual progress (NOT SO MUCH!)

Networking was a little too last-minute to be implemented. With networking, we were hoping to send guitar face events to a second player, which would appear on their screen.

Assumptions

In our design of the musical data that we'll be providing to players, we make a few assumptions about what musicians want. Our model is similar to an exercise routine, where the user could set goals / thresholds for their practice sessions. We are interested in tracking the following variables, namely in the context of solo guitar playing and improvisation:

  • duration of the session / number of notes played
  • count of pitches in the user-defined key
  • count of notes on or off the user-defined beats, e.g. tempo and meter (and an optional metronome feature)
  • count of vibratos*
  • count of pitch bends*
  • count of slides*
  • count of power chords
  • count of musical intervals (m2, M2, P4, etc.)
  • count of "big jumps" between pitch (>P8)
  • chord labeling
  • dynamic range (moving average / smart)
  • pitch range
  • stage presence, guitar face
  • fretboard heat-map: where on the guitar neck are you playing most frequently?*
  • repetition of pitch sequences
  • clarity and consistency of dynamics and intonation (streaks)
  • mixture of divisions of the beat (i.e., all quarter notes = bad)
  • pace of playing
  • extra-musical moments, such as palm mutes and artificial harmonics, if detectable
  • the distribution of these features over the specific beats of a measure

(*these data were not possible to gather from the MIDI guitar input)

These comprise the analytic structure of our software. We can abstract musical functions such as measure and chord naming. Each of these variables will trigger an event, whether it's a histogram/graph, numerical count, graphical object (a squiggly for vibrato, changing with time, fading away completely after some time lapse), or graphical environment change. Major changes will happen when certain (imaginary or user-set) goals are reached--for example, "100 notes!"->the tunnel is blue now!->(thought bubble) whoaaa!

Storyboard

Environment.jpg

Image: One idea for the graphical environment of GuitarFace. Facial tracking shown in the top left. Moving tunnel where the present is closest to the eye and past is at the center. MIDI events shown within the tunnel: 2 squiggly lines for vibrato, a star for a recent something or other. Tunnel texture looks here a lot like an FFT waterfall, but should rather represent pitches or just be pot-smokin'. Data and records shown along the bottom (first iteration ideas). Notifications of rewards in the top right.

MIDI data is output in real time from a MIDI guitar pedal unit, the Roland GR55. The data isn't perfect, so hopefully, we won't have to spend much time or energy scrubbing the data in order to get decent, guitar-like musical data into the system. We don't need to play it back, anyways. We could also augment the USB MIDI data from the GR55 with 3 other forms of data: the audio signal from the guitar, MIDI out from the GR55, and the audio signal from the GR55, which sounds significantly better than the USB out.

The MIDI data are passed through functions to compute the aforementioned measures, such as number of notes. These functions are wired up to the graphical display and the graphical events.

Finally, a summary of the session is output once the session is terminated, either at the end of the backing track or when the user presses 'd'.

User

Musicians, specifically guitar players, interested in knowing more about their practice sessions. However, this software can be used by any instrument capable of producing MIDI output. The output can serve as a score, though we don't really think of it primarily that way; we're more interested in the statistics and progress one makes toward set goals in their practice time, such as the change in duration from session to session, or pitch and volume content.

Libraries and previous work

Sensors / Accessories

  • Godin MIDI guitar
  • Roland GR55 guitar MIDI interface / pedals
  • Computer camera to detect guitar face
  • Lighting for the face
  • FUTURE: Accelerometer / Game-Track to track hip gyration

Team

  • Roshan Vidyashankar
  • Gina Collecchia

Milestones

  • Week 1: OpenCV compilation, research; most of MIDI code; graphics setup
  • Week 2: MIDI + graphics integration and design; make the thing work, basically; OpenCV progress
  • Week 3: Guitar face feature detection
  • Week 4: Sex it up