private boolean incrementSequence()
    {
        synchronized( sequenceQueueLock )
        {
            // Is there a queue, and if so, is there anything in it:
            if( sequenceQueue != null && sequenceQueue.size() > 0 )
            {
                // grab the next filename/URL from the queue:
                filenameURL( SET, sequenceQueue.remove( 0 ) );

                // Let everyone know we are busy loading:
                loading( SET, true );

                // Check if we have a sequencer:
                if( sequencer == null )
                {
                    // nope, try and get one now:
                    getSequencer();
                }
                else
                {
                    // We have a sequencer.  Stop it now:
                    sequencer.stop();
                    // rewind to the beginning:
                    sequencer.setMicrosecondPosition( 0 );
                    // Stop listening for a moment:
                    sequencer.removeMetaEventListener( this );
                    // wait a bit for the sequencer to shut down and rewind:
                    try{ Thread.sleep( 100 ); }catch( InterruptedException e ){}
                }
                // We need to have a sequencer at this point:
                if( sequencer == null )
                {
                    errorMessage( "Unable to set the sequence in method " +
                                  "'incrementSequence', because there wasn't " +
                                  "a sequencer to use." );

                    // Finished loading:
                    loading( SET, false );
                    
                    // failure:
                    return false;
                }
                // set the new sequence to be played:
                setSequence( filenameURL( GET, null ).getURL() );
                // start playing again:
                sequencer.start();
                // make sure we play at the correct volume:
                // (TODO: This doesn't always work??)
                resetGain();
                // start listening for end of track event again:
                sequencer.addMetaEventListener( this );

                // Finished loading:
                loading( SET, false );

                // We successfully moved to the next sequence:
                return true;
            }
        }
        
        // Nothing left to load
        return false;
    }