All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jme3.system.gdx.GdxAudioRenderer Maven / Gradle / Ivy

The newest version!
package com.jme3.system.gdx;

import com.badlogic.gdx.Application;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Music;
import com.jme3.audio.*;

import java.util.HashMap;

/**
 * Created by kobayasi on 2013/12/28.
 */
public class GdxAudioRenderer implements AudioRenderer{
    private boolean audioDisabled = false;
    private Listener listener;
    private final HashMap musicMap = new HashMap();
    @Override
    public void setListener(Listener listener) {
        Gdx.app.log("GdxAudioRenderer", "setListener");
        if (audioDisabled) {
            return;
        }

        if (this.listener != null) {
            // previous listener no longer associated with current
            // renderer
            this.listener.setRenderer(null);
        }

        this.listener = listener;
        this.listener.setRenderer(this);

    }
    @Override
    public void setEnvironment(Environment environment) {
        Gdx.app.log("GdxAudioRenderer", "setEnvironment");
    }

    @Override
    public void playSourceInstance(AudioNode audioNode) {
        Gdx.app.log("GdxAudioRenderer", "playSourceInstance");
        GdxAudioData audioData;
        audioData = (GdxAudioData) audioNode.getAudioData();
        Music music = musicMap.get(audioNode);
        if (Gdx.app.getType() == Application.ApplicationType.iOS && audioData.getAssetKey().getName().endsWith(".ogg")) {
            return;
        }
        if (music == null) {
            music = Gdx.audio.newMusic(GdxAssetCache.getFileHandle(audioData.getAssetKey().getName()));
            musicMap.put(audioNode, music);
        }
        music.stop();
        music.play();
        audioNode.setStatus(AudioNode.Status.Playing);
    }

    @Override
    public void playSource(AudioNode audioNode) {
        Gdx.app.log("GdxAudioRenderer", "playSource");
        if (audioNode.getStatus() == AudioNode.Status.Playing) {
            stopSource(audioNode);
            playSourceInstance(audioNode);
        } else if (audioNode.getStatus() == AudioNode.Status.Stopped) {
            playSourceInstance(audioNode);
        }
    }

    @Override
    public void pauseSource(AudioNode src) {
        Gdx.app.log("GdxAudioRenderer", "pauseSource");
        if (src.getStatus() == AudioNode.Status.Playing) {
            if (src.getAudioData() instanceof GdxAudioData) {
                GdxAudioData audioData = (GdxAudioData) src.getAudioData();
                if (audioData.getAssetKey() instanceof AudioKey) {
                    AudioKey assetKey = (AudioKey) audioData.getAssetKey();

                    if (assetKey.isStream()) {
                        Music mp;
                        if (musicMap.containsKey(src)) {
                            mp = musicMap.get(src);
                            mp.pause();
                            src.setStatus(AudioNode.Status.Paused);
                        }
                    } else {
                        assert src.getChannel() != -1;

                        if (src.getChannel() > 0) {
//                            soundPool.pause(src.getChannel());
                            src.setStatus(AudioNode.Status.Paused);
                        }
                    }
                }
            }

        }
    }

    @Override
    public void stopSource(AudioNode src) {
        Gdx.app.log("GdxAudioRenderer", "stopSource");
        if (src.getStatus() != AudioNode.Status.Stopped) {
            if (src.getAudioData() instanceof GdxAudioData) {
                GdxAudioData audioData = (GdxAudioData) src.getAudioData();
                if (audioData.getAssetKey() instanceof AudioKey) {
                    AudioKey assetKey = (AudioKey) audioData.getAssetKey();
                    if (assetKey.isStream()) {
                        Music mp;
                        if (musicMap.containsKey(src)) {
                            mp = musicMap.get(src);
                            mp.stop();
                            src.setStatus(AudioNode.Status.Stopped);
                            src.setChannel(-1);
                        }
                    } else {
                        int chan = src.getChannel();
                        assert chan != -1; // if it's not stopped, must have id

                        if (src.getChannel() > 0) {
//                            soundPool.stop(src.getChannel());
                            src.setChannel(-1);
                        }

                        src.setStatus(AudioNode.Status.Stopped);

                        if (audioData.getId() > 0) {
//                            soundPool.unload(audioData.getId());
                        }
                        audioData.setId(-1);



                    }
                }
            }

        }

    }

    @Override
    public void updateSourceParam(AudioNode audioNode, AudioParam audioParam) {
        Gdx.app.log("GdxAudioRenderer", "updateSourceParam");
    }

    @Override
    public void updateListenerParam(Listener listener, ListenerParam listenerParam) {
        Gdx.app.log("GdxAudioRenderer", "updateListenerParam");

    }

    @Override
    public void deleteFilter(Filter filter) {
        Gdx.app.log("GdxAudioRenderer", "deleteFilter");

    }

    @Override
    public void deleteAudioData(AudioData audioData) {
        Gdx.app.log("GdxAudioRenderer", "deleteAudioData");

    }

    @Override
    public void initialize() {
        Gdx.app.log("GdxAudioRenderer", "initialize");

    }

    @Override
    public void update(float v) {
//        Gdx.app.log("GdxAudioRenderer", "update");
        for(AudioNode src : musicMap.keySet()) {
            Music music = musicMap.get(src);
            if (src.getStatus() == AudioNode.Status.Playing) {
                if (!music.isPlaying()) {
                    Gdx.app.log("GdxAudioRenderer","music Stopped");
                    src.setStatus(AudioNode.Status.Stopped);
                } else {
                }
            }
        }

    }

    @Override
    public void cleanup() {
        Gdx.app.log("GdxAudioRenderer", "cleanup");
        for(Music music : musicMap.values()) {
            music.dispose();
        }
        musicMap.clear();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy