Advertisement
Guest User

jme3-audio-file-android.patch

a guest
Apr 16th, 2013
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.72 KB | None | 0 0
  1. diff -uNr jmonkeyengine-read-only/engine/src/android/com/jme3/audio/android/AndroidAudioRenderer.java jmonkeyengine-modified/engine/src/android/com/jme3/audio/android/AndroidAudioRenderer.java
  2. --- jmonkeyengine-read-only/engine/src/android/com/jme3/audio/android/AndroidAudioRenderer.java 2013-04-15 23:02:51.101339928 -0700
  3. +++ jmonkeyengine-modified/engine/src/android/com/jme3/audio/android/AndroidAudioRenderer.java  2013-04-15 23:42:38.873270084 -0700
  4. @@ -38,11 +38,15 @@
  5.  import android.media.AudioManager;
  6.  import android.media.MediaPlayer;
  7.  import android.media.SoundPool;
  8. +import com.jme3.asset.AssetInfo;
  9.  import com.jme3.asset.AssetKey;
  10.  import com.jme3.audio.*;
  11.  import com.jme3.audio.AudioSource.Status;
  12.  import com.jme3.math.FastMath;
  13.  import com.jme3.math.Vector3f;
  14. +import java.io.FileDescriptor;
  15. +import java.io.FileInputStream;
  16. +import java.io.InputStream;
  17.  import java.io.IOException;
  18.  import java.util.HashMap;
  19.  import java.util.logging.Level;
  20. @@ -69,12 +73,22 @@
  21.      private Listener listener;
  22.      private boolean audioDisabled = false;
  23.      private final AudioManager manager;
  24. +    private com.jme3.asset.AssetManager jme3AssetManager;
  25. +
  26. +    class SoundFileInfo{
  27. +        FileDescriptor fd;
  28. +        long startOffset;
  29. +        long length;
  30. +    }
  31.  
  32.      public AndroidAudioRenderer(Activity context) {
  33.          manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
  34.          context.setVolumeControlStream(AudioManager.STREAM_MUSIC);
  35.          assetManager = context.getAssets();
  36.      }
  37. +    public void setAssetManager(com.jme3.asset.AssetManager assetManager){
  38. +        jme3AssetManager = assetManager;
  39. +    }
  40.  
  41.      @Override
  42.      public void initialize() {
  43. @@ -328,8 +342,10 @@
  44.          try {
  45.  
  46.              if (audioData.getId() < 0) { // found something to load
  47. -                int soundId = soundPool.load(
  48. -                        assetManager.openFd(assetKey.getName()), 1);
  49. +       SoundFileInfo soundInfo = getSoundInfo(assetKey);
  50. +                int soundId = soundPool.load(soundInfo.fd, soundInfo.startOffset, soundInfo.length, 1);
  51. +//                int soundId = soundPool.load(
  52. +//                        assetManager.openFd(assetKey.getName()), 1);
  53.                  audioData.setId(soundId);
  54.              }
  55.  
  56. @@ -376,6 +392,31 @@
  57.          }
  58.      }
  59.  
  60. +    private SoundFileInfo getSoundInfo(AssetKey<?> key) throws IOException {
  61. +        SoundFileInfo ret = new SoundFileInfo();
  62. +        if(jme3AssetManager != null){
  63. +            AssetInfo aInfo = jme3AssetManager.locateAsset(key);
  64. +            System.out.println(key);
  65. +            if(aInfo != null){
  66. +                System.out.println(aInfo.getClass());
  67. +                InputStream is = aInfo.openStream();
  68. +                if(is instanceof FileInputStream){
  69. +                    ret.fd = ((FileInputStream)is).getFD();
  70. +                    ret.startOffset = 0;
  71. +                    ret.length = is.available();
  72. +                }
  73. +            }
  74. +        }
  75. +        if(ret.fd == null){
  76. +            AssetFileDescriptor afd = assetManager.openFd(key.getName()); // assetKey.getName()
  77. +            ret.fd = afd.getFileDescriptor();
  78. +            ret.startOffset = afd.getStartOffset();
  79. +            ret.length = afd.getLength();
  80. +        }
  81. +
  82. +        return ret;
  83. +    }
  84. +
  85.      public void playSource(AudioSource src) {
  86.          if (audioDisabled) {
  87.              return;
  88. @@ -395,9 +436,14 @@
  89.                  mp.reset();
  90.                  AssetKey<?> key = audioData.getAssetKey();
  91.  
  92. -                AssetFileDescriptor afd = assetManager.openFd(key.getName()); // assetKey.getName()
  93. -                mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),
  94. -                        afd.getLength());
  95. +       // FIXME: Still need to get zip files working.
  96. +                FileDescriptor fd = null;
  97. +                long startOffset = 0;
  98. +                long length = 0;
  99. +
  100. +       SoundFileInfo soundInfo = getSoundInfo(key);
  101. +
  102. +                mp.setDataSource(soundInfo.fd, soundInfo.startOffset, soundInfo.length);
  103.                  mp.prepare();
  104.                  setSourceParams(src, mp);
  105.                  src.setChannel(0);
  106. diff -uNr jmonkeyengine-read-only/engine/src/android/com/jme3/system/android/JmeAndroidSystem.java jmonkeyengine-modified/engine/src/android/com/jme3/system/android/JmeAndroidSystem.java
  107. --- jmonkeyengine-read-only/engine/src/android/com/jme3/system/android/JmeAndroidSystem.java    2013-04-15 23:02:53.509339858 -0700
  108. +++ jmonkeyengine-modified/engine/src/android/com/jme3/system/android/JmeAndroidSystem.java 2013-04-15 23:45:25.277265217 -0700
  109. @@ -29,6 +29,7 @@
  110.  public class JmeAndroidSystem extends JmeSystemDelegate {
  111.  
  112.      private static Activity activity;
  113. +    private AssetManager assetManager;
  114.  
  115.      static {
  116.          try {
  117. @@ -65,13 +66,15 @@
  118.      @Override
  119.      public AssetManager newAssetManager(URL configFile) {
  120.          logger.log(Level.FINE, "Creating asset manager with config {0}", configFile);
  121. -        return new AndroidAssetManager(configFile);
  122. +        assetManager = new AndroidAssetManager(configFile);
  123. +        return assetManager;
  124.      }
  125.  
  126.      @Override
  127.      public AssetManager newAssetManager() {
  128.          logger.log(Level.FINE, "Creating asset manager with default config");
  129. -        return new AndroidAssetManager(null);
  130. +        assetManager = new AndroidAssetManager(null);
  131. +        return assetManager;
  132.      }
  133.  
  134.      @Override
  135. @@ -105,7 +108,9 @@
  136.  
  137.      @Override
  138.      public AudioRenderer newAudioRenderer(AppSettings settings) {
  139. -        return new AndroidAudioRenderer(activity);
  140. +        AndroidAudioRenderer aar = new AndroidAudioRenderer(activity);
  141. +        aar.setAssetManager(assetManager);
  142. +        return aar;
  143.      }
  144.  
  145.      @Override
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement