Only rewrite the audio buffer if changes have been made

This used to rewrite the whole audio buffer even if the values were
going to be exactly the same.  Now it keeps track of which portion of
the buffer has been overwritten so that it can only write to those
indices.
Make some changes to Sound struct

Some of this was lost because a certain someone deleted my changes :).
I changed some of the variables to volatile because they are being
changed within the interrupt and that was causing issues.
Initalize AudioController

Initialize the AudioController and start playing a background loop at
the main menu.  Stop the AudioController once the game starts.
Add missing function to header