Creating a state machine turned out to be a harder challenge than I originally thought. Between my new job and moving, starting to date again, moving again, then moving again, I didn't think I'd get it done!
The idea behind building a state machine was both a learning opportunity for me and to optimize readability of the code. The interesting thing about it was it exposed some timing issues which meant the crossfade wouldn't work as smoothly as it should.
As the code is written now, it will wait until the proper point in a cycle to start the crossfade so that the full process executes properly. It was incredibly minor, but during the debugging process I discovered that instead of starting on the first phase of the cycle, it might actually start the crossfade on the third or seventh step of the cycle causing a very jagged crossfade.