public Clip loadAudioClip(URL clipName) {
        Clip loadedClip = null;

        try {
            AudioInputStream inputStream = AudioSystem.getAudioInputStream(clipName);
            AudioFormat format = inputStream.getFormat();

            // Convert ULAW/ALAW compressed clip formats to (uncompressed)
            // PCM format. This is to prevent any problems with a lack of support 
            // for ULAW/ALAQ within the AudioSystem
            if ((format.getEncoding() == AudioFormat.Encoding.ULAW) 
                    || (format.getEncoding() == AudioFormat.Encoding.ALAW)) {
                AudioFormat pcmFormat = new AudioFormat(
                        AudioFormat.Encoding.PCM_SIGNED, format.getSampleRate(), 
                        format.getSampleSizeInBits() * 2, format.getChannels(), 
                        format.getFrameSize() * 2, format.getFrameRate(), true); 
                
                // Update the stream and format details
                inputStream = AudioSystem.getAudioInputStream(pcmFormat, inputStream);
                format = pcmFormat;
            }

            DataLine.Info clipInfo = new DataLine.Info(Clip.class, format);
            if (AudioSystem.isLineSupported(clipInfo) == false) {
                throw new IllegalArgumentException("AssetLoader.loadAudioClip: " +
                        "Clip format for " + clipName + " is not supported.");
            }
            
            loadedClip = (Clip) AudioSystem.getLine( clipInfo );
            loadedClip.open(inputStream);
            inputStream.close();

            loadedClip.setFramePosition(0);
        } catch (UnsupportedAudioFileException exception) {
            throw new IllegalArgumentException("SoundAsset.loadAudioClip: " +
                    "Unsupported audio file exception generated for " + clipName);
        } catch (LineUnavailableException exception) {
            throw new IllegalArgumentException("SoundAsset.loadAudioClip: " +
                    "Unsupported audio file exception generated for " + clipName);
        } catch (IOException exception) {
            throw new IllegalArgumentException("SoundAsset.loadAudioClip: " +
                    "Could not read from " + clipName);
        }

        return loadedClip;
    }