16

サウンドプール クラスに問題があります。ここに行きます:

私のゲームアプリ (ところで音楽アプリ) では、少なくとも 32 の短いサウンドを同時に再生する必要があるため、サウンドプールを次のように宣言します。

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

その後、必要なすべての MP3 サウンドをロードします。それぞれ 55 KB の約 80 のサウンドです。すべてのサウンドをロードするのに問題はありませんが、遅いです! まあ、それは問題ではありません。実際の問題は、同時に約 20 のサウンドを再生すると、ログにエラーが記録されることです。

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

その後、再生しようとするすべてのサウンドで同じエラーがスローされ、サウンドを再生できません。別のアクティビティ/サウンドプールの音さえありません。何が起こっているのか、それを修正する方法についての手がかりがありません!サウンド ファイルの形式を変更する必要がありますか? サウンドを再生した後、メモリなどを解放する必要がありますか?

(Samsung Galaxy S I9000、2.3.3 OS システムでテストしています。アプリは 2.1 です)

4

2 に答える 2

7

これを参照してください(Androidグループ内)

オーディオの場合、デバイスごとに 32 個のアクティブな AudioTrack オブジェクトというハード リミットがあります(アプリごとではありません。これらの 32 個をシステムの他の部分と共有する必要があります)。

于 2012-11-23T15:17:00.107 に答える
1

ここでいくつかの考えがあります。1: SoundPool コンストラクターの最初のパラメーターは、ロードするサウンドの数ではなく、再生する同時ストリームの最大数です。次に、SoundPool のサウンド用メモリは約 1MB と限られています。したがって、一度にロードできるトラックの数が文書化されていない制限に達したとしても、まったく驚かないでしょう。80 サウンド x 1 サウンドあたり 55k は、間違いなく 1MB を超えていることに注意してください。そして、その制限は、mp3 が SoundPool 内のオーディオ データに圧縮解除された後のものです。

于 2012-08-12T00:16:44.580 に答える