@Override
    public void playSourceInstance(AudioSource src) {
        checkDead();
        synchronized (threadLock) {
            if (audioDisabled) {
                return;
            }

            AudioData audioData = src.getAudioData();
            if (audioData == null) {
                logger.log(Level.WARNING, "playSourceInstance called on source with null AudioData: {0}", src);
                return;
            }
            if (audioData instanceof AudioStream) {
                throw new UnsupportedOperationException(
                        "Cannot play instances of audio streams. Use play() instead.");
            }

            if (audioData.isUpdateNeeded()) {
                updateAudioData(audioData);
            }

            // Allocate a temporary channel
            int index = newChannel();
            if (index == -1) {
                logger.log(Level.WARNING, "No channel available to play instance of {0}", src);
                return;
            }

            // Ensure channel is clean before use
            int sourceId = channels[index];
            clearChannel(index);

            // Set parameters for this specific instance (force non-looping)
            setSourceParams(sourceId, src, true);
            attachAudioToSource(sourceId, audioData, false);
            channelSources[index] = src;

            // play the channel
            al.alSourcePlay(sourceId);
        }
    }
Plays an audio source as a one-shot instance (non-looping buffer).
A free channel is allocated temporarily.
@param src The audio source to play.
jme3-core/src/main/java/com/jme3/audio/openal/ALAudioRenderer.java