声音管理器我面临一个模糊的问题.只有我加载的第一个声音才有效.第二个声音没有.
初始化,这里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);
Run Code Online (Sandbox Code Playgroud)
如果我反向加载,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);
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
SoundManager实现了OnLoadCompleteListener
@Override
public void onLoadComplete(SoundPool arg0, int arg1, int arg2) {
synchronized (this) {
this.notifyAll();
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这是一个加载问题,所以我添加了一个OnLoadCompleteListener,但仍然加载了第二个声音无法工作.
为了解决这个问题,我不得不改变mp3文件,并且它有效.奇怪的是,mp3文件适用于Android的媒体播放器,也适用于Mac.但出于某种原因,这种对新mp3的疯狂改变是解决它的唯一方法.许多SO问题也有这个解决方案.
| 归档时间: |
|
| 查看次数: |
3127 次 |
| 最近记录: |