2011-12-05 29 views
12

私はsoundpoolクラスに問題があります。ここではそれを行く:SoundPoolエラー:利用可能なトラック名がありません

私のゲームアプリ(ところで音楽アプリ)で、私は同時に少なくとも32の短い音を再現する必要があるので、私はそのように私soundpoolを宣言:

private SoundPool sp; 
sp = new SoundPool(128, AudioManager.STREAM_MUSIC, 0); 

そのI負荷後必要なすべてのMP3サウンド、それぞれ55KBの約80音。私はすべての音を読み込むことに問題はないが、その速度は遅い!それは問題ではありません。それは私が再生しようと、すべての音が同じエラーをスローし、何の音を再生することはできないの後

ERROR/AudioFlinger(59): no more track names available 
ERROR/AudioTrack(26349): AudioFlinger could not create track, status: -12 
ERROR/SoundPool(26349): Error creating AudioTrack 

:本当の悩みは、私は同じ時間で約20サウンドを再生するとき、私のログにエラーがありますです。別のアクティビティ/サウンドプールのサウンドさえありません。私は何が起こっているのか、それをどう修正するのかを知りません!サウンドファイルのフォーマットを変更する必要がありますか?音を鳴らした後、記憶や何かを解放すべきですか?

(私はサムスンギャラクシーS I9000、2.3.3 OSシステム上でテストしています。アプリは2.1である)

+0

おそらくあなたは、 SoundPool.OnLoadCompleteListenerを実装する必要がありますか? – Codeman

+0

各AudioTrackのrelease()を呼び出すには? – Codeman

+0

ループモードが有効になっていないこと、トラックが一時停止に設定されておらず、すべてのmp3が実際には短いと思う(最後は無音)。利用可能なオーディオトラックの量が限られているので、実行中のオーディオトラックの量を低く抑えなければなりません。多分、利用可能なトラックが32以下であるため、同時に多くのサウンドを再生することはできません。また、いくつかの実装はバグがあり、いくつかのトラック(おそらく悪いmp3ファイルや何かに依存しているかもしれません)でハングアップする可能性があります。アプリケーションがクラッシュすると、トラックが解放されないことがあるので、サウンドはありません。 – dronus

答えて

1

思考のカップルをここに。 One:SoundPoolコンストラクタの最初のパラメータは、ロードするサウンドの数ではなく、再生する同時ストリームの最大数です。次に、SoundPoolはサウンドのメモリが約1MBに制限されています。あなたが一度に読み込むことができるトラックの数にいくつかの文書化されていない制限を打つならば、私は全く驚くことはありません。 80音と55k音が1MBを超えることは確かです。そしてその制限は、mp3がSoundPool内のオーディオデータに解凍された後のものです。

4

オーディオについてthis (in android group)

を参照してください、デバイスあたり32個のアクティブAudioTrackオブジェクトのハードリミットがあります(ないアプリあたりは: あなたがシステムの残りの部分とそれらの32を共有する必要がある)、

関連する問題