2013-10-02 2 views
0

Я добавил один 5-секундный звуковой mp3 в свое приложение на экран заставки, но его игра колеблется во время загрузки приложения, что мне нужно делать для плавной игры?пульсирует звук брызг

public class Splash extends Activity{ 
    MediaPlayer ourSong; 
    @Override 
    protected void onCreate(Bundle TravisLoveBacon) { 
     // TODO Auto-generated method stub 
     super.onCreate(TravisLoveBacon); 
     setContentView(R.layout.splash); 
     ourSong = MediaPlayer.create(Splash.this, R.raw.onkar); 
     ourSong.start(); 
     Thread timer = new Thread(){ 
      public void run(){ 
       try{ 
        sleep(4000); 
       } catch (InterruptedException e){ 
        e.printStackTrace(); 
       }finally{ 
        Intent openStartingPoint = new Intent("com.sport.sport.MAINLAUNCHER2"); 
        startActivity(openStartingPoint); 
       } 
      } 
     }; 
     timer.start(); 
    } 

    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     ourSong.release(); 
     finish(); 
    } 
} 

ответ

1

Что вам нужно для гладкой игры? Больше CPU, особенно в UI-Thread. (хорошо, просто шучу :-)

Вы можете использовать SoundPool и предварительно загрузить песню перед ее воспроизведением. SoundPool специально создан для коротких звуков в играх и т. П.

Вот кратчайший фрагмент кода для загрузки музыки. Не забудьте запустить его в AsyncTask. Это может занять полсекунды, но без проблем.

SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); 
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
    @Override 
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { 
     if(status == 0) soundPool.play(sampleId, 1f, 1f, Integer.MAX_VALUE, 0, 1f); 
    } 
}); 
try { 
    soundId = soundPool.load(getAssets().openFd(file), 1); 
} catch (IOException e) { 
    Log.e("TAG", e.getMessage(), e); 
    return; 
} 

Для этого требуется, по крайней мере, уровень API 8, и используется громкость для музыки.

Две другие вещи, которые я вижу в вашем коде:

  • Независимо от того, если это Soundpool или медиа-плеер. Вы должны запустить часть воспроизведения звука в фоновом режиме.
  • Как вы это сделали до startActivity в другой теме ??? Эта часть не должна работать.
+0

его основная деятельность всплеска, когда начинается применение его первый экран отображается –

+0

могли бы вы адаптировать свой код с звуковым бассейном, им новыми для этого –

+0

I 've отправил новый ответ с кодом. Надеюсь, что это работает. – jboi

0

Вот как я построил бы экран Splash с некоторым звуком на нем.

Это довольно длительное время, поэтому позвольте мне сделать несколько замечаний.

  • Потому что это так долго, я положил его в новый ответ
  • Как загрузки и воспроизведение звуков еще асинхронное, есть шанс, что ваш экран выплеска просто вспышка и следующая деятельность будут начаты немедленно , В этом случае вы должны использовать Java-Lock, например, Semaphore, который вы установили, и aquire в doInBackground, и что вы release() в конце onLoadComplete().

Всё. Не проверяли это тяжело, но надеюсь, что вы можете использовать его начальной точку:

public class Splash extends Activity { 
@Override 
protected void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.splash); 
    /* 
    * I would finish here, to give 
    * Android some time for layout 
    * and other things 
    */ 
} 

/* (non-Javadoc) 
* @see android.app.Activity#onResume() 
*/ 
@Override 
protected void onResume() { 
    super.onResume(); 

    /* 
    * Now start background task 
    * There was a discussion about 
    * Splash screen some time ago. 
    * Especially when you should do the 
    * startActivity and what flags you 
    * should use in the Intent. 
    */ 

    // Start playing sound asynchronously 
    // R.raw.onkar 
    new AsyncTask<Void, Void, Void>() { 
     private SoundPool soundPool = new SoundPool(
       1, AudioManager.STREAM_MUSIC, 0); 

     @Override 
     protected Void doInBackground(Void... params) { 
      // Put in here the code I've already posted! 
      return null; 
     } 

     /* (non-Javadoc) 
     * @see android.os.AsyncTask#onPostExecute(java.lang.Object) 
     */ 
     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      soundPool.release(); 

      Intent openStartingPoint = new Intent(
        "com.sport.sport.MAINLAUNCHER2"); 
      startActivity(openStartingPoint); 
      /* 
      * Actually, you can start the next activity here 
      * or from onResume method with postDelayed(...) 
      * This way here ensures that the Activity is 
      * started right after the sound was played. 
      */ 
     } 
    }.execute((Void) null); 
} 
} 
Смежные вопросы