2

サウンドマネージャーで漠然とした問題に直面しています。私がロードした最初のサウンドだけが機能します。2番目の音はしません。

初期化、ここではWRONG_SOUNDはロードされません。

Globals.mSoundManager = new SoundManager();
Globals.mSoundManager.initSounds(getBaseContext());
Globals.mSoundManager.addSound(Globals.CORRECT_SOUND, R.raw.correct);
Globals.mSoundManager.addSound(Globals.WRONG_SOUND, R.raw.wrong);

ロードを逆にすると、CORRECT_SOUNDがロードされません

Globals.mSoundManager = new SoundManager();
Globals.mSoundManager.initSounds(getBaseContext());
Globals.mSoundManager.addSound(Globals.WRONG_SOUND, R.raw.wrong);
Globals.mSoundManager.addSound(Globals.CORRECT_SOUND, R.raw.correct);

SoundManagerのコンストラクタ

public void initSounds(Context theContext) {
    mContext = theContext;
    mSoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
    mSoundPool.setOnLoadCompleteListener(this);
    mSoundPoolMap = new HashMap<Integer, Integer>();
    mAudioManager = (AudioManager) mContext
            .getSystemService(Context.AUDIO_SERVICE);
}

addSoundメソッド

public synchronized void addSound(int Index, int SoundID) {
    mSoundPoolMap.put(Index, mSoundPool.load(mContext, SoundID, 1));

    synchronized(this) {
        try {
            this.wait(1000) ;
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

SoundManagerはOnLoadCompleteListenerを実装します

@Override
public void onLoadComplete(SoundPool arg0, int arg1, int arg2) {
    synchronized (this) {
        this.notifyAll();
    }
}

負荷の問題だと思ったので、OnLoadCompleteListenerを追加しましたが、ロードされた2番目のサウンドが機能しません。

4

1 に答える 1

8

これを修正するには、mp3ファイルを変更する必要がありましたが、機能しました。魔法のように、mp3ファイルはAndroidのメディアプレーヤーでも、Macでも機能します。しかし、何らかの理由で、新しいmp3へのこのクレイジーな変更がそれを修正する唯一の方法でした。多くのSOの質問にもこの解決策があります。

于 2012-11-05T18:27:53.980 に答える