@Override
    public void onAction(String name, boolean isPressed, float tpf) {
        if (!isPressed) return;

        if (name.equals("togglePlayPause")) {
            if (audioSource.getStatus() != AudioSource.Status.Playing) {
                audioSource.play();
            } else {
                audioSource.stop();
            }
        } else if (name.equals("togglePositional")) {
            boolean positional = audioSource.isPositional();
            audioSource.setPositional(!positional);

        } else if (name.equals("dryFilter")) {
            boolean hasFilter = audioSource.getDryFilter() != null;
            audioSource.setDryFilter(hasFilter ? null : dryFilter);

        } else if (name.equals("Volume+")) {
            volume = FastMath.clamp(volume + 0.1f, 0, 5f);
            audioSource.setVolume(volume);

        } else if (name.equals("Volume-")) {
            volume = FastMath.clamp(volume - 0.1f, 0, 5f);
            audioSource.setVolume(volume);

        } else if (name.equals("Pitch+")) {
            pitch = FastMath.clamp(pitch + 0.1f, 0.5f, 2f);
            audioSource.setPitch(pitch);

        } else if (name.equals("Pitch-")) {
            pitch = FastMath.clamp(pitch - 0.1f, 0.5f, 2f);
            audioSource.setPitch(pitch);
        }
    }
### Filters ###
Changing a parameter value in the Filter Object after it has been attached to a Source will not
affect the Source. To update the filter(s) used on a Source, an application must update the
parameters of a Filter object and then re-attach it to the Source.
jme3-examples/src/main/java/jme3test/audio/TestOgg.java