Since I can't attach my code here, understanding the context of this question depends on having the Headfirst Java book.
In reference to the BeatBox code in HeadFirst Java, I followed the code from the first edition book, but in J2EE 5. (Edition 1 was written for 1.3 by the looks of it.) The program is supposed to restart the midi sequence after beat 16, but it seems to get stuck and doesn't respond to anything. To be more specific, it seems like the Meta event handler gets called recursively.
I've had a spot of bother (alright it's driving me nuts! ) in that the code for chapter 13 beatbox goes through once and fails to restart the sequence. I inserted a system.out.println("..."); line in the 'meta' method, and it seems that this is being called recursively. I need to break the recursive nature of this evident loop, but I don't know how.
I'd appreciate any help y'all can offer.
posted 11 years ago
I nailed it! I went hunting down the api for sequencer @ javax.sound.midi, found a method called setTickPosition. So, in the event that anyone else gets stuck at this point (and by some miracle can find my post), the last method should look like this:
The key was that the sequencer figured that it had played on past tick position 16, and wasn't looking at messages before that point. Resetting the tick position essentially made the sequencer rewind to the beginning.