private void reset() {
		synchronized (sequenceQueueLock) {
			if (sequenceQueue != null)
				sequenceQueue.clear();
		}

		// 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 "
					+ "'reset', because there wasn't " + "a sequencer to use.");
			return;
		}

		// 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);
	}