public synchronized void playSound(String name) {
		if (volume == 0) { return; }
		int i = 0;
		// Search for a unused sound.
		while (true) {
			String n = name + "#" + i++;
			if (sounds.containsKey(n)) {
				if (sounds.get(n).isRunning()) {
					continue;
				} else {
					// Found one!
					Clip c = sounds.get(n);
					// Try to set audio volume.
					try {
						FloatControl gc = (FloatControl) c.getControl(FloatControl.Type.MASTER_GAIN);
						gc.setValue(getGain());
					} catch (Exception e) {}
					c.setFramePosition(0);
					c.start();
					//if (SEGame.isLinux()) { try { Thread.sleep(120); } catch (Exception e) {} }
					return;
				}
			} else {
				// Load a new sound.
				try {
					Clip c = getClip(name);
					sounds.put(n, c);
					// Try to set audio volume.
					try {
						FloatControl gc = (FloatControl) c.getControl(FloatControl.Type.MASTER_GAIN);
						gc.setValue(getGain());
					} catch (Exception e) {}
					c.start();
					//if (SEGame.isLinux()) { try { Thread.sleep(120); } catch (Exception e) {} }
				} catch (Exception e) {}
				return;
			}
		}
	}