Should look more like that. You weren't using the right HEX values to represent the correct PORTA pins, you missed an equals sign and for the default case you missed the LATB assignment. Also, you don't need to enclose the various cases in curly brackets.
You should be warned though, this code will not work if more than one pin on PORTA is high. Your first example did not have this problem.
____________________________________________________________________________
Edit: I just noticed the negative logic in your first example. Are the other PORTA pins (0,4-7) to be presumed always high or low? In the latter case your code should look like this:
Aha, I tried your edited code and it worked! I assumed I would have the first bit always on since my speaker was on, but I guess that isn't the case.
Edit: Oh dear, I just realized that the first bit in PORTA will be a '0' after all, it is only a '1' after I initiate one of my commands and a song begins to play. Sorry!
The code blocks are not necessary for the cases but I prefer that people learning C use them in that it makes the code flow a bit more clear. That is why I ask EN0 to use them.
It would be good to mask PORTA by anding it with 0x0E. This would eliminate any problem regarding the 0 bit which is not a switch. If the switches are active low the three case values would be:
0b1100 or 0x0C
0b1010 or 0x0A
0b0110 or 0x06
You do not need more code to debounce the switches. The first time the code see the switch it goes off and plays a song. Then it ignores the switches until the song finishes.
If we set the switches up on interrupts or checked the switches frequently while the songs were playing we would need to make sure we did not have switch bounce problems.