0

私の最後の質問は、単純な medaiplayer を使用した場所で回答されていないため (複数のサウンドを連続して再生すると、サウンドが無音のままになることがあります。なぜですか? )、SoundPool を使用して全体を作成しようとしました。しかし、ほとんど同じことが起こりますが、エラーが発生します

AudioFlinger could not create track, status: -12
Error creating AudioTrack

最大で 32 のサウンドをサウンドプールのメモリに保存できると読んだ場合、エラーが発生します。そうです、32 番目のサウンドの後、常にエラーが発生するため、どのサウンドも再生できません。では、SoundPool で 32 を超えるサウンドを使用するにはどうすればよいでしょうか? それぞれに 20 のサウンドを含む 3 つのサウンドプールを使用しようとしましたが、常に他のプールからすべてのサウンドをアンロードします。

    mSoundPoolMapV1.clear();  //clearing HashMap
    for(int i=1;i<15;i++){
    mSoundPoolV1.unload(i);  
    }

しかし、同じエラーが再び発生します。(私は 44.1k の代わりに 22k サウンドを使用しています。これで解決できると読みましたが、何も起こりませんでした) mediaplayer でも soundpool でも 50 くらいのサウンドを再生できないのは一体何なのですか? そんなことがあるものか??

release():

    mSoundPoolMap.clear();
    for(int i=1;i<50;i++){
    mSoundPool.unload(i);
    }
    mSoundPool.release();

    mSoundPoolMap.put(1, mSoundPool.load(Main.this, R.raw.sound1, 1));
    ...
    mSoundPoolMap.put(50, mSoundPool.load(Main.this, R.raw.sound50, 1));

だから私は hashmp をクリアし、すべてのサウンドをアンロードしてから、サウンドプールを解放します。次に、ハッシュマップを再度入力しますが、今ではまったく音が出ません。私は何かを逃す必要があります、何を教えてもらえますか?

4

2 に答える 2

1

AudioMixer には、同時に 32 個の AudioTracks しか許可されないという制限があります。SoundPool は、プールに属するいずれかのチャネル (これはサンプルに対応していると思います) の再生を開始するたびに、AudioTrack を作成しようとします。ただし、SoundPool を破棄するまでトラックは破棄されないため、停止してもトラック名は割り当てられたままになります。

release()SoundPoolを呼び出してみてください。これにより、ネイティブの SoundPool オブジェクトが破棄され、作成されたすべての AudioTrack が破棄され、AudioMixer 内のそれらの名前の割り当てが解除されます。

于 2012-10-24T15:42:23.360 に答える
0

基盤となるオーディオ ハードウェアは無制限ではありません。一度にメモリに保持できるサウンドの数は限られています。デスクトップ用の 3D オーディオ ライブラリを作成したとき、制限は可変だったので、開始する前にハードウェアから制限を照会する必要がありました。単一の SoundPool を用意し、必要に応じてサウンドをロードおよびアンロードする必要があります。次に、再生するサウンドにある種の優先順位を設定する必要があります。これにより、オプションのバックグラウンド ノイズを再生するために本当に必要なサウンドがアンロードされないようにすることができます。

実際、SoundPool のドキュメントには、典型的なユースケースの非常に優れた説明があります。

于 2012-10-24T15:41:17.360 に答える