Android MediaPlayerでのエラーにつきまして
背景
リアルタイムで音声を流すため、大量のMediaPlayer対象を初期化して、 prepare()を呼びます。Map<String, MediaPlayer> mediaMapで管理してます。
会ったエラー
- 症状1: prepareが問題ないが、ある数の音声を流したら、これ以上流せない。
- 発生する端末
- AU ISW11F(2.3.5)
- ロブ: E/MediaPlayer(xxxx): Error (-19,0)
- 分析: 流してからrelease()しないと、メモリーが無くなる
- 解決策: 流した後、リリースして、再初期化してみます。
- 発生する端末
mp1 = MediaPlayer.create(sound.this, R.raw.pan1); mp1.start(); mp1.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer mp) { mp.release(); mp = MediaPlayer.create(); }; });
- 症状2: prepare()している時、7個しかinitできません
- 発生する端末
- SC-02B(2.3.3)
- IS05(2.2.1)
- F-10D(4.0.3) ※約20個しかinit出来ません
- ロブ: error (1, -17) / error (1, -2147483648)
- 分析: 同時prepareしている数に制限があります
- 解決策: 必要な音声が生成されてない場合、任意のMap内のインスタンスを 削除して、新たにロードします。
- 発生する端末
反省
SoundPoolを利用したほうがいいかもしれません。