|
|
|
@ -40,7 +40,7 @@ import android.media.MediaPlayer; |
|
|
|
|
import android.media.SoundPool; |
|
|
|
|
import com.jme3.asset.AssetKey; |
|
|
|
|
import com.jme3.audio.*; |
|
|
|
|
import com.jme3.audio.AudioNode.Status; |
|
|
|
|
import com.jme3.audio.AudioSource.Status; |
|
|
|
|
import com.jme3.math.FastMath; |
|
|
|
|
import com.jme3.math.Vector3f; |
|
|
|
|
import java.io.IOException; |
|
|
|
@ -59,13 +59,13 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
|
|
|
|
|
private static final Logger logger = Logger.getLogger(AndroidAudioRenderer.class.getName()); |
|
|
|
|
private final static int MAX_NUM_CHANNELS = 16; |
|
|
|
|
private final HashMap<AudioNode, MediaPlayer> musicPlaying = new HashMap<AudioNode, MediaPlayer>(); |
|
|
|
|
private final HashMap<AudioSource, MediaPlayer> musicPlaying = new HashMap<AudioSource, MediaPlayer>(); |
|
|
|
|
private SoundPool soundPool = null; |
|
|
|
|
private final Vector3f listenerPosition = new Vector3f(); |
|
|
|
|
// For temp use
|
|
|
|
|
private final Vector3f distanceVector = new Vector3f(); |
|
|
|
|
private final AssetManager assetManager; |
|
|
|
|
private HashMap<Integer, AudioNode> soundpoolStillLoading = new HashMap<Integer, AudioNode>(); |
|
|
|
|
private HashMap<Integer, AudioSource> soundpoolStillLoading = new HashMap<Integer, AudioSource>(); |
|
|
|
|
private Listener listener; |
|
|
|
|
private boolean audioDisabled = false; |
|
|
|
|
private final AudioManager manager; |
|
|
|
@ -84,7 +84,7 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void updateSourceParam(AudioNode src, AudioParam param) { |
|
|
|
|
public void updateSourceParam(AudioSource src, AudioParam param) { |
|
|
|
|
if (audioDisabled) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -99,7 +99,7 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Vector3f pos = src.getWorldTranslation(); |
|
|
|
|
Vector3f pos = src.getPosition(); |
|
|
|
|
break; |
|
|
|
|
case Velocity: |
|
|
|
|
if (!src.isPositional()) { |
|
|
|
@ -220,13 +220,13 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
float volume; |
|
|
|
|
|
|
|
|
|
// Loop over all mediaplayers
|
|
|
|
|
for (AudioNode src : musicPlaying.keySet()) { |
|
|
|
|
for (AudioSource src : musicPlaying.keySet()) { |
|
|
|
|
|
|
|
|
|
MediaPlayer mp = musicPlaying.get(src); |
|
|
|
|
|
|
|
|
|
// Calc the distance to the listener
|
|
|
|
|
distanceVector.set(listenerPosition); |
|
|
|
|
distanceVector.subtractLocal(src.getLocalTranslation()); |
|
|
|
|
distanceVector.subtractLocal(src.getPosition()); |
|
|
|
|
distance = FastMath.abs(distanceVector.length()); |
|
|
|
|
|
|
|
|
|
if (distance < src.getRefDistance()) { |
|
|
|
@ -275,7 +275,7 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Cleanup media player
|
|
|
|
|
for (AudioNode src : musicPlaying.keySet()) { |
|
|
|
|
for (AudioSource src : musicPlaying.keySet()) { |
|
|
|
|
MediaPlayer mp = musicPlaying.get(src); |
|
|
|
|
{ |
|
|
|
|
mp.stop(); |
|
|
|
@ -294,7 +294,7 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
} |
|
|
|
|
// XXX: This has bad performance -> maybe change overall structure of
|
|
|
|
|
// mediaplayer in this audiorenderer?
|
|
|
|
|
for (AudioNode src : musicPlaying.keySet()) { |
|
|
|
|
for (AudioSource src : musicPlaying.keySet()) { |
|
|
|
|
if (musicPlaying.get(src) == mp) { |
|
|
|
|
src.setStatus(Status.Stopped); |
|
|
|
|
break; |
|
|
|
@ -312,7 +312,7 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
* a specific streamid, so removing is not possilbe -> noone knows when |
|
|
|
|
* sound finished. |
|
|
|
|
*/ |
|
|
|
|
public void playSourceInstance(AudioNode src) { |
|
|
|
|
public void playSourceInstance(AudioSource src) { |
|
|
|
|
if (audioDisabled) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -357,7 +357,7 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { |
|
|
|
|
AudioNode src = soundpoolStillLoading.remove(sampleId); |
|
|
|
|
AudioSource src = soundpoolStillLoading.remove(sampleId); |
|
|
|
|
|
|
|
|
|
if (src == null) { |
|
|
|
|
logger.warning("Something went terribly wrong! onLoadComplete" |
|
|
|
@ -376,7 +376,7 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void playSource(AudioNode src) { |
|
|
|
|
public void playSource(AudioSource src) { |
|
|
|
|
if (audioDisabled) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -414,13 +414,13 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void setSourceParams(AudioNode src, MediaPlayer mp) { |
|
|
|
|
private void setSourceParams(AudioSource src, MediaPlayer mp) { |
|
|
|
|
mp.setLooping(src.isLooping()); |
|
|
|
|
mp.setVolume(src.getVolume(), src.getVolume()); |
|
|
|
|
//src.getDryFilter();
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void setSourceParams(AudioNode src) { |
|
|
|
|
private void setSourceParams(AudioSource src) { |
|
|
|
|
soundPool.setLoop(src.getChannel(), src.isLooping() ? -1 : 0); |
|
|
|
|
soundPool.setVolume(src.getChannel(), src.getVolume(), src.getVolume()); |
|
|
|
|
} |
|
|
|
@ -452,7 +452,7 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void pauseSource(AudioNode src) { |
|
|
|
|
public void pauseSource(AudioSource src) { |
|
|
|
|
if (audioDisabled) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -469,7 +469,7 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void stopSource(AudioNode src) { |
|
|
|
|
public void stopSource(AudioSource src) { |
|
|
|
|
if (audioDisabled) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -494,7 +494,7 @@ public class AndroidAudioRenderer implements AudioRenderer, |
|
|
|
|
@Override |
|
|
|
|
public void deleteAudioData(AudioData ad) { |
|
|
|
|
|
|
|
|
|
for (AudioNode src : musicPlaying.keySet()) { |
|
|
|
|
for (AudioSource src : musicPlaying.keySet()) { |
|
|
|
|
if (src.getAudioData() == ad) { |
|
|
|
|
MediaPlayer mp = musicPlaying.remove(src); |
|
|
|
|
mp.stop(); |
|
|
|
|