2012-04-16 10 views
0

SoundManagerを使用して、30秒のサウンドバイトをランダムに再生すると同時に、onTouchイベントによってトリガされたアニメーションシーケンス(点滅グラフィック)を開始しようとしています。何らかの理由で、約5秒の再生後にサウンドバイトがクリップされ、なぜその理由が分かりません。何かご意見は?Sound Managerでの問題ランダムファイルの再生

また、テスト後、最初のonTouchイベント後1分ほどで再生されないように見えます。

public class Soundboard extends Activity { 
    private SoundManager mSoundManager; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     mSoundManager = new SoundManager(); 
     mSoundManager.initSounds(getBaseContext()); 
     mSoundManager.addSound(0, R.raw.sound0); 
     mSoundManager.addSound(1, R.raw.sound1); 
     mSoundManager.addSound(2, R.raw.sound2); 
     mSoundManager.addSound(3, R.raw.sound3); 
    }; 

    public boolean onTouchEvent(MotionEvent evt){ 

     Random r = new Random(); 
     int x = r.nextInt(3); 

     switch (evt.getAction()) 
     { 
      case MotionEvent.ACTION_DOWN: 
      mSoundManager.playSound(x); 
      startAnimating(); 
      return super.onTouchEvent(evt); 

      case MotionEvent.ACTION_UP: 
      break; 
      default: 
      break; 
     } 
     return true; 
    } 

    private void startAnimating() { 

     ImageView wiub_screen01 = (ImageView) findViewById(R.id.wiub_screen01); 
     Animation fadein01 = AnimationUtils.loadAnimation(this, R.anim.fade_in01); 
     wiub_screen01.startAnimation(fadein01); 

     ImageView wiub_screen00 = (ImageView) findViewById(R.id.wiub_screen00); 
     Animation fadein00 = AnimationUtils.loadAnimation(this, R.anim.fade_in00); 
     wiub_screen00.startAnimation(fadein00); 
    } 

}

+0

再生しようとしているファイルの形式は何ですか? – MahdeTo

+0

すべてのファイルはmp3形式です。 – n00bdev

答えて

0

オーディオがロードされていないことを良いチャンスがあります。実際に多数の短いクリップを再生したい場合は、間違いなくSoundPoolを見てください。 (GoogleのSoundPool例から適応)

これを試してみてください:

public class Soundboard extends Activity { 
    private SoundPool mSoundPool; 
    boolean loaded = false; 
    private int[] soundIDs; 
    private int[] resIDs; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 
     mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
      @Override 
      public void onLoadComplete(SoundPool soundPool, int sampleId, 
          int status) { 
        loaded = true; 
      } 
     }); 
     resIDs = new int[]{R.raw.sound0,R.raw.sound1,R.raw.sound2.R.raw.sound3 }; 

     for(int i=0; i<resIDs.length; i++){ 
      soundIDs[i] = mSoundPool.load(this, resIDs[i], 1);    
     } 
    }; 

    public boolean onTouchEvent(MotionEvent evt){ 

     Random r = new Random(); 
     int x = r.nextInt(resIDs.length); 

     switch (evt.getAction()) 
     { 
      case MotionEvent.ACTION_DOWN: 
       AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); 
       float actualVolume = (float) audioManager 
           .getStreamVolume(AudioManager.STREAM_MUSIC); 
       float maxVolume = (float) audioManager 
           .getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
       float volume = actualVolume/maxVolume; 
       // Is the sound loaded already? 
       if (loaded) { 
         mSoundPool.play(soundIDs[x], volume, volume, 1, 0, 1f); 
         Log.i("Test", "Played sound"); 
       } 
      startAnimating(); 
      return super.onTouchEvent(evt); 

      case MotionEvent.ACTION_UP: 
      break; 
      default: 
      break; 
     } 
     return true; 
    } 

    private void startAnimating() { 

     ImageView wiub_screen01 = (ImageView) findViewById(R.id.wiub_screen01); 
     Animation fadein01 = AnimationUtils.loadAnimation(this, R.anim.fade_in01); 
     wiub_screen01.startAnimation(fadein01); 

     ImageView wiub_screen00 = (ImageView) findViewById(R.id.wiub_screen00); 
     Animation fadein00 = AnimationUtils.loadAnimation(this, R.anim.fade_in00); 
     wiub_screen00.startAnimation(fadein00); 
    } 
} 
+0

AudioManager/SoundPoolを使用する場合、サウンドファイルの長さも関係しますか?現在のオーディオクリップは約30秒ですが、元のAudioManagerメソッドを使用すると5秒程度しか再生されません。 – n00bdev

+0

私は後で見ていきますが、サウンドプールは短い音には普通です。あなたは確かにあなたのケースでこれを見てください:http://www.stealthcopter.com/blog/2010/08/android-soundpool-vs-mediaplayer-focus-on-soundboards-and-memory-problems/ –

+0

私はMediaPlayerを使用するようにコードを変更し始め、Null Pointer Exceptionの問題を解決しました。私はコードのテストと更新を続けます。 – n00bdev

0

は形式をOGGために、生のフォルダ内のファイルを変換してみます。

+0

コードを変更する前にファイルを.oggに変換しようとします – n00bdev

+0

.oggへの変換が問題を解決しないことを確認できるようになりました。 – n00bdev

+0

hmm ..私はかつてこれをメディアプレーヤーに持っていましたが、それはステージの恐怖のプレーヤーにバグがありました。サウンドトラックを使い、自分でデコードする必要があります。多分それがあなたに役立つか、サウンドプールを使用するでしょう。 – MahdeTo

関連する問題