Memorize the Circle of Fifths – 2048 Infinite

July 4th, 2014
memorize-2048-infinite-circle-of-fifths

2048 Infinite – The Circle of Fifths

Learning the Circle of Fifths deeply is something that can take years to do. When I looked at the circle in high school, I understood very little about it. I knew about how it related to key signatures and the order of flats and sharps. But then there are modes, the fact that it’s a tone row, seeing how it works with symmetrical scales, what it can sound like, understanding how it relates to modulation, transposition, etc. Looking at the circle of fifths can actually get a little overwhelming when you have a deep understanding of it. Learning it exhaustively takes a lot of time and effort. The first step is in understanding where it gets its name and how to draw it out for yourself. The second step is to flat out memorize it.

Why Memorize the Circle of Fifths?

Pathways in the brain that are used often and for a long period of time become fluid mental reflexes. The circle of fifths becomes this for a skilled musician, but only to a point without actually taking the time to study it. Most intermediate (and some advanced) musicians will be a little slow when working with the bottom part of the circle (B, F#/Gb, Db). But learning to think your way around the bottom is crucial both in musical performance and in theoretical understanding. You will be able to read common enharmonic spellings fluently. You will be able to memorize music more quickly by connecting it to the circle. You will understand formal structures and phrasing more coherently. It all starts with having the circle memorized in its entirety. But this can be tedious and frustrating, so we made a game out of it!

memorize-Circle-of-FifthsThe original 2048 has value because it is a game good for the mind in and of itself. But when I played the Dr. Who edition, I quickly realized its potential to help anyone memorize any sequence they wanted to. It has even been applied to pi! Why not reuse the idea to help music students memorize the circle of fifths. And that’s exactly what we did. But we didn’t stop there. This is music, and music should be heard. As you play, you’ll notice how pretty the circle can be. Our plans for the game in the future will include a more complex interactive composition than what we have so far. But for now it is an entertaining and aesthetically palatable way to inherently memorize the circle of fifths. Enjoy!


Enharmonics – Why F♯ and G♭ are (Usually) the Same – 2048 Infinite

July 1st, 2014

The simple answer is in a demonstration. Go to a piano. Play a C. Knowing that a flat lowers the affected note by a half-step, play a C flat. Now play a B. Since the B is a half step below the C, C-flat and B are the same note. Any time this happens, it is an enharmonic spelling. 2048 Infinite uses random enharmonic spellings for the three notes that are the most useful to learn to spell enharmonically: B-Cb, F#-Gb, and Db-C#. We have the game switching between these spellings to make you learn them! They are some of the hardest to learn because they are so rarely used. But without them, you will not be able to think your way around the bottom of the circle of fifths.

In the image below, we show all of the most common enharmonic spellings. The beamed notes are enharmonic spellings of each other:

enharmonic-spellings

But it gets a little more complicated than that. (This post gets pretty heady at this point. You’ve been warned!) If you are playing an instrument on which you can make small modifications to your pitch, you should bend the note slightly in the direction that the accidental (the pitch modifier) is already going. This is because different intervals tune differently depending of where they are in the chord. For example, let’s say you are in the key of C and you see a B-flat. Most likely, that note is going to be part of a dominant seven chord (borrowed from the key of F), and your pitch should be very low. Do this, and you’ll be in tune. The degree to which you raise or lower your pitch depends on the harmonic context and really just comes down to listening. This concept is called just intonation. Use it!

And now for the nitty gritty stuff that theoreticians and composers like to argue about. The fights I’ve seen are really quite amusing. Is a C-flat equal to a B? Theoreticians (who tend to be more traditional) would say no. Composers (this one, anyway) would say it depends on the time period on harmonic context. Back in the day (1890’s and earlier) nearly everything was tonal. The purpose of equal temperament was for all keys to sound great on instruments that could not be tuned easily (piano, mallet percussion, and others). Composers bent over backwards to make sure they were always in a key. Then Schoenberg happened. When we play atonal music we strictly use equal temperament. Why? Because there’s no key to tune to! Sharps and flats are simply a way to tell the performer what note to play and nothing beyond that. Now, the circle of fifths is technically a tone row. So really it should be interpreted by modern theoreticians as such when no other context is given. The circle of fifths is a very broad tool and should not be limited to the tonal system when using it for analysis.

The circle of fifths is about more than key signatures. It’s a method of understanding sound in general. When teaching the circle of fifths without context, an F-sharp is the same as a G-flat.


Music Theory in the Sounds of "2048 Infinite – The Circle of Fifths"

June 27th, 2014

music-theory-2048-infinate

The trouble with implementing the sounds in “2048 Infinite – The Circle of Fifths” is that the circle of fifths is a natural tone row. Nothing against tone rows, but it’s not necessarily something people want to hear the entire time they are playing a game. Therefore, it wasn’t a simple matter of having an octave of available sounds to play when the tiles merge. There had to be a logical organization in the orchestration of the chords being formed in order to be palatable to a wide audience. Using some music theory, we found that the solution was to change the bass depending what range of notes the game needed to use.

The way that 2048 Infinite had to be adapted from the original 2048 necessitated that no more than 10 of the 12 different keys be on the board at a time. By the time the player finishes the first circle, there are up to 6 keys displayed. This means that in order for the game to make sounds, it might have to play an F and an F-sharp at the same time without logical tonal harmonic support. Unless, of course, you change the bass note to something the tonicizes the pitch necessary to maintain the impression that a tonal scale is being used.

Using Music Theory to “Set the Mode”

As popular as the Ionian (major) scale is, it’s on the edge of the spectrum when it comes to tension in the church modes. Without a composer asserting his/her total control over it, it can sound sloppy. In the hands of a computer using an algorithm, it can be quite unruly without needlessly complicated logic. The better choice was to tonicize the music using the Aeolian (minor) mode. In 2048 terms, to make the 16 tile the root of the chord.

But why stop there? We then changed that sound to strings to make the music more interesting. But then the bass sounded too exposed, so we let a few other random sounds be strings too.

And that’s how you use music theory to make a tone row tonal.


Music Theory in the Sounds of “2048 Infinite – The Circle of Fifths”

June 27th, 2014

music-theory-2048-infinate

The trouble with implementing the sounds in “2048 Infinite – The Circle of Fifths” is that the circle of fifths is a natural tone row. Nothing against tone rows, but it’s not necessarily something people want to hear the entire time they are playing a game. Therefore, it wasn’t a simple matter of having an octave of available sounds to play when the tiles merge. There had to be a logical organization in the orchestration of the chords being formed in order to be palatable to a wide audience. Using some music theory, we found that the solution was to change the bass depending what range of notes the game needed to use.

The way that 2048 Infinite had to be adapted from the original 2048 necessitated that no more than 10 of the 12 different keys be on the board at a time. By the time the player finishes the first circle, there are up to 6 keys displayed. This means that in order for the game to make sounds, it might have to play an F and an F-sharp at the same time without logical tonal harmonic support. Unless, of course, you change the bass note to something the tonicizes the pitch necessary to maintain the impression that a tonal scale is being used.

Using Music Theory to “Set the Mode”

As popular as the Ionian (major) scale is, it’s on the edge of the spectrum when it comes to tension in the church modes. Without a composer asserting his/her total control over it, it can sound sloppy. In the hands of a computer using an algorithm, it can be quite unruly without needlessly complicated logic. The better choice was to tonicize the music using the Aeolian (minor) mode. In 2048 terms, to make the 16 tile the root of the chord.

But why stop there? We then changed that sound to strings to make the music more interesting. But then the bass sounded too exposed, so we let a few other random sounds be strings too.

And that’s how you use music theory to make a tone row tonal.


Trigonometry – the Flame of the Rudiment Rock-it

June 25th, 2014

trigonometry needed

This week I have been thankful that I paid attention and did well in my high school trigonometry class. Sine, Cosine, and Tangent really came in handy when the flames of my rocket in Rudiment Rock-it wanted to do detach themselves and do their own thing.

A Trigonometry Story Problem

It had been a very long time since I used trigonometry for anything. This problem presented itself whilst I was innocently developing a game for drummers who are looking for a fun way to learn some of their basic rudiments. In the game, the player taps each side of their mobile device in the pattern specified. The goal is to perform the pattern correctly and evenly as quickly as possible. If its not even, the rocket will tip and the flames on the side of the inaccurate hand will get smaller. Or if the player is going too slowly the flames will go out altogether and the rocket will not go higher. This gives the player feedback on what they need to fix in order to do better. The problem happened when the rocket rotated and the flames would not come with it.

The flames needed to be programmed separately from the rocket. They needed to act independently of each other to give correct and good looking feedback. Yes, I could have asked my animator to graciously draw 50 versions of a rocket with flames. But that would have been a waste of memory (mobile app) and not an efficient use of his time either. The better solution was to tie the separate flames to the rocket and get better results with less strain on the device. I hesitated when I realized that the answer to tying a rotating image to a part of another rotating image required some very difficult trigonometry. “I know some people who could do this faster,” I thought. But no, I wanted the challenge all to myself.

The Solution

superhuman-trigonometryIf you’re not into actually doing trigonometry with me, now would be the time to check out and go play Rudiment Rock-it. Have fun, we’ll join you in a minute!

The rotation of the flame was easy: flame.rotation = rocket.rotation. If the rocket always stood up straight, the rest would be easy too:

flame.x = rocket.x and flame.y = rocket.y

Oh, but the flame changes length so we need to make an adjustment: flame.y = rocket.y – (flame.length/2)

This ties the top of the flame instead of the middle. But now we need to actually tie the flame to the engine of the rocket (we’ll just do the left one for now):

flame.y = (rocket.y – 26) – (flame.height/2)

flame.x = rocket.x – 7

But what about when the rocket tips? The flame will detach and look silly. And that’s where the trigonometry comes in. First we need to figure out how far away the flame is (the hypotenuse) because this number will not change. x and y will be changing every frame! So x and y need to be based upon the total distance:

7^2 + 26^2 = 26.93

So now we can use a combination of the hypotenuse and the angle of the rocket’s rotation to determine either x or y first. I think it’s easier to think horizontally, so we’ll do x first. We want “flame.x” to equal “-7” when the rocket is straight since the flame should be directly left of the rocket (we’re ignoring y for now). We have to use cosine because x will the adjacent side once the rocket rotates. So since “cos(-90) = 0” and “cosine = adjacent/hypotenuse” we can do this (assuming that flame.x is -7 and rotation is 0):

flame.x/26.93 + 7 = cos(rocket.rotation-90)

flame.x = (cos(rocket.rotation-90) * 26.93) – 7

But we also need flame.x to be “+7” when the rocket is up-side-down. To fix that we need to modify that “-7” in our equation by finding a way to switch it to a positive number when the angle is 180 degrees.  I found this easier to do while thinking of the rotation in 90 degree increments:

flame.x = (cos(rocket.rotation-90) *26.93) + (cos(rocket.rotation)*7)

This way, when the rotation is at 180 degrees, the 7 becomes positive and it’s still negative when the rocket is right-side-up! But now when it on its sides, x should be +/-26 and not the length of the hypotenuse like it is right now. But I really don’t care because it’s not even a whole pixel of difference. Moving on!

We have one more major problem to solve: we still have to compensate for the changing height of the flame. So we modify our hypotenuse because that is the flame’s distance from the rocket. Currently, the middle of the flame is touching the engine. To change that to be the end of the flame, all we do it add half of the length of the flame to the distance from the center of the rocket.

flame.x = ((cos( rocket.rotation -90)*(26.93+( flame.height /2))) – (cos( rocket.rotation )*7))

And of course we should probably add in rocket.x

flame.x = ((cos( rocket.rotation -90)*(26.93+( flame.height /2))) – (cos( rocket.rotation )*7)) + rocket.x

Now for flame.y. Just use sine instead of cosine to find the other axis. Simple as that:

flame.y = ((sin( rocket.rotation -90)*(26.93+( flame.height /2))) – (sin(rocket.rotation)*7)) + rocket.y

Now for the right engine. Just add instead of subtract:trigonometry-flame

flame.x = ((cos( rocket.rotation -90)*(26.93+( flame.height /2))) + (cos( rocket.rotation )*7)) + rocket.x

flame.y = ((sin( rocket.rotation -90)*(26.93+( flame.height /2))) + (sin(rocket.rotation)*7)) + rocket.y

Simple trigonometry, right?

Send Caleb a message!

Blog Subscription

Loading