|
@@ -53,6 +53,7 @@ import com.jme3.audio.Environment;
|
|
|
import com.jme3.audio.Filter;
|
|
|
import com.jme3.audio.Listener;
|
|
|
|
|
|
+import com.jme3.math.FastMath;
|
|
|
import com.jme3.math.Vector3f;
|
|
|
|
|
|
|
|
@@ -78,6 +79,10 @@ public class AndroidAudioRenderer implements AudioRenderer, SoundPool.OnLoadComp
|
|
|
private SoundPool soundPool = null;
|
|
|
private HashMap<AudioNode, MediaPlayer> musicPlaying = new HashMap<AudioNode, MediaPlayer>();
|
|
|
|
|
|
+ private final Vector3f listenerPosition = new Vector3f();
|
|
|
+ // For temp use
|
|
|
+ private final Vector3f distanceVector = new Vector3f();
|
|
|
+
|
|
|
private final AudioManager manager;
|
|
|
private final Context context;
|
|
|
private final AssetManager am;
|
|
@@ -110,6 +115,7 @@ public class AndroidAudioRenderer implements AudioRenderer, SoundPool.OnLoadComp
|
|
|
@Override
|
|
|
public void updateSourceParam(AudioNode src, AudioParam param)
|
|
|
{
|
|
|
+ logger.log(Level.INFO, "updateSourceParam " + param);
|
|
|
if (audioDisabled)
|
|
|
return;
|
|
|
|
|
@@ -204,47 +210,60 @@ public class AndroidAudioRenderer implements AudioRenderer, SoundPool.OnLoadComp
|
|
|
@Override
|
|
|
public void updateListenerParam(Listener listener, ListenerParam param)
|
|
|
{
|
|
|
- if (audioDisabled)
|
|
|
- return;
|
|
|
-
|
|
|
- switch (param){
|
|
|
- case Position:
|
|
|
- Vector3f pos = listener.getLocation();
|
|
|
-
|
|
|
- break;
|
|
|
- case Rotation:
|
|
|
- Vector3f dir = listener.getDirection();
|
|
|
- Vector3f up = listener.getUp();
|
|
|
-
|
|
|
- break;
|
|
|
- case Velocity:
|
|
|
- Vector3f vel = listener.getVelocity();
|
|
|
-
|
|
|
- break;
|
|
|
- case Volume:
|
|
|
- //alListenerf(AL_GAIN, listener.getVolume());
|
|
|
- break;
|
|
|
- }
|
|
|
+ logger.log(Level.INFO, "updateListenerParam " + param);
|
|
|
+ if (audioDisabled)
|
|
|
+ return;
|
|
|
+
|
|
|
+ switch (param){
|
|
|
+ case Position:
|
|
|
+ listenerPosition.set(listener.getLocation());
|
|
|
+
|
|
|
+ break;
|
|
|
+ case Rotation:
|
|
|
+ Vector3f dir = listener.getDirection();
|
|
|
+ Vector3f up = listener.getUp();
|
|
|
+
|
|
|
+ break;
|
|
|
+ case Velocity:
|
|
|
+ Vector3f vel = listener.getVelocity();
|
|
|
+
|
|
|
+ break;
|
|
|
+ case Volume:
|
|
|
+ //alListenerf(AL_GAIN, listener.getVolume());
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
-
|
|
|
+ @Override
|
|
|
public void update(float tpf)
|
|
|
{
|
|
|
- // does nothing
|
|
|
- }
|
|
|
-
|
|
|
- public void updateInThread(float tpf)
|
|
|
- {
|
|
|
- if (audioDisabled)
|
|
|
- return;
|
|
|
- if (!audioDisabled)
|
|
|
- return;
|
|
|
-
|
|
|
+ float distance;
|
|
|
+ float volume;
|
|
|
+
|
|
|
+ // Loop over all mediaplayers
|
|
|
+ for (AudioNode src : musicPlaying.keySet())
|
|
|
+ {
|
|
|
+ MediaPlayer mp = musicPlaying.get(src);
|
|
|
+ {
|
|
|
+ // Calc the distance to the listener
|
|
|
+ distanceVector.set(listenerPosition);
|
|
|
+ distanceVector.subtractLocal(src.getLocalTranslation());
|
|
|
+ distance = FastMath.abs(distanceVector.length());
|
|
|
+
|
|
|
+ if (distance < src.getRefDistance())
|
|
|
+ distance = src.getRefDistance();
|
|
|
+ if (distance > src.getMaxDistance())
|
|
|
+ distance = src.getMaxDistance();
|
|
|
+ volume = src.getRefDistance() / distance;
|
|
|
+
|
|
|
+ // Left / Right channel get the same volume by now, only positional
|
|
|
+ mp.setVolume(volume, volume);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- */
|
|
|
|
|
|
+
|
|
|
public void setListener(Listener listener)
|
|
|
{
|
|
|
if (audioDisabled)
|
|
@@ -341,6 +360,7 @@ public class AndroidAudioRenderer implements AudioRenderer, SoundPool.OnLoadComp
|
|
|
mp.seekTo(0);
|
|
|
mp.stop();
|
|
|
src.setStatus(Status.Stopped);
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -360,7 +380,9 @@ public class AndroidAudioRenderer implements AudioRenderer, SoundPool.OnLoadComp
|
|
|
|
|
|
if (audioData.getAssetKey() instanceof AudioKey)
|
|
|
{
|
|
|
- AudioKey assetKey = (AudioKey) audioData.getAssetKey();
|
|
|
+ AudioKey assetKey = (AudioKey) audioData.getAssetKey();
|
|
|
+
|
|
|
+ // streaming audionodes get played using android mediaplayer, non streaming uses SoundPool
|
|
|
if (assetKey.isStream())
|
|
|
{
|
|
|
MediaPlayer mp;
|
|
@@ -381,21 +403,21 @@ public class AndroidAudioRenderer implements AudioRenderer, SoundPool.OnLoadComp
|
|
|
AssetFileDescriptor afd = am.openFd(assetKey.getName());
|
|
|
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
|
|
|
|
|
|
- //mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
|
|
+ mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
|
|
mp.prepare();
|
|
|
mp.setLooping(src.isLooping());
|
|
|
mp.start();
|
|
|
- src.setStatus(Status.Playing);
|
|
|
src.setChannel(1);
|
|
|
- } catch (IllegalArgumentException e) {
|
|
|
- // TODO Auto-generated catch block
|
|
|
- e.printStackTrace();
|
|
|
+ src.setStatus(Status.Playing);
|
|
|
+ } catch (IllegalArgumentException e)
|
|
|
+ {
|
|
|
+ logger.log(Level.SEVERE, "Failed to play " + assetKey.getName(), e);
|
|
|
} catch (IllegalStateException e) {
|
|
|
// TODO Auto-generated catch block
|
|
|
- e.printStackTrace();
|
|
|
+ logger.log(Level.SEVERE, "Failed to play " + assetKey.getName(), e);
|
|
|
} catch (IOException e) {
|
|
|
// TODO Auto-generated catch block
|
|
|
- e.printStackTrace();
|
|
|
+ logger.log(Level.SEVERE, "Failed to play " + assetKey.getName(), e);
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -418,11 +440,11 @@ public class AndroidAudioRenderer implements AudioRenderer, SoundPool.OnLoadComp
|
|
|
|
|
|
try
|
|
|
{
|
|
|
- soundId = soundPool.load(am.openFd(audioData.getAssetKey().getName()), 1);
|
|
|
+ soundId = soundPool.load(am.openFd(assetKey.getName()), 1);
|
|
|
}
|
|
|
catch (IOException e)
|
|
|
{
|
|
|
- logger.log(Level.SEVERE, "Failed to load sound " + audioData.getAssetKey().getName(), e);
|
|
|
+ logger.log(Level.SEVERE, "Failed to load sound " + assetKey.getName(), e);
|
|
|
soundId = -1;
|
|
|
}
|
|
|
audioData.setSoundId(soundId);
|
|
@@ -431,7 +453,7 @@ public class AndroidAudioRenderer implements AudioRenderer, SoundPool.OnLoadComp
|
|
|
// Sound failed to load ?
|
|
|
if (audioData.getSoundId() <= 0)
|
|
|
{
|
|
|
- throw new IllegalArgumentException("Failed to load: " + audioData.getAssetKey().getName());
|
|
|
+ throw new IllegalArgumentException("Failed to load: " + assetKey.getName());
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -635,11 +657,5 @@ public class AndroidAudioRenderer implements AudioRenderer, SoundPool.OnLoadComp
|
|
|
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public void update(float tpf) {
|
|
|
- // TODO Auto-generated method stub
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
}
|