最近用sufaceview做了一个游戏,属于菜鸟级别吧~~然后加音效,背景用的是mediaplayer,主要是soundpool的问题先请教,感觉一开声音就卡,但又卡得不是很明显,应该是声音处理的方式不好吧!我把代码发上来,请大家指教~!
import java.util.HashMap;import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;public class Music {
Context context;
SoundPool sp; //得到一个声音池引用
HashMap<Integer,Integer> spMap; //得到一个map的引用

public Music(Context context){
this.context = context;
initSoundPool();
}
public void initSoundPool(){ //初始化声音池
     sp=new SoundPool(
     5,  //maxStreams参数,该参数为设置同时能够播放多少音效
     AudioManager.STREAM_MUSIC, //streamType参数,该参数设置音频类型,在游戏中通常设置为:STREAM_MUSIC
     0 //srcQuality参数,该参数设置音频文件的质量,目前还没有效果,设置为0为默认值。
     );
     spMap=new HashMap<Integer,Integer>();
     spMap.put(1, sp.load(context, R.raw.z1, 1));
     spMap.put(2, sp.load(context, R.raw.z2, 1));
    }
    public void playSound(int sound,int number){ //播放声音,参数sound是播放音效的id,参数number是播放音效的次数
     AudioManager am=(AudioManager)context.getSystemService(context.AUDIO_SERVICE);//实例化AudioManager对象
     float audioMaxVolumn=am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //返回当前AudioManager对象的最大音量值
     float audioCurrentVolumn=am.getStreamVolume(AudioManager.STREAM_MUSIC);//返回当前AudioManager对象的音量值
     float volumnRatio=audioCurrentVolumn/audioMaxVolumn;
     sp.play(
     spMap.get(sound),  //播放的音乐id
     volumnRatio,  //左声道音量
     volumnRatio,  //右声道音量
     1,  //优先级,0为最低
     number,  //循环次数,0无不循环,-1无永远循环
     1 //回放速度 ,该值在0.5-2.0之间,1为正常速度
     );
    }
}

解决方案 »

  1.   

    soundpool有bug。有些声音播放有问题。
      

  2.   

    个人觉得在playSound方法里写
    AudioManager am=(AudioManager)context.getSystemService(context.AUDIO_SERVICE);//实例化AudioManager对象
            float audioMaxVolumn=am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);    //返回当前AudioManager对象的最大音量值
            float audioCurrentVolumn=am.getStreamVolume(AudioManager.STREAM_MUSIC);//返回当前AudioManager对象的音量值
            float volumnRatio=audioCurrentVolumn/audioMaxVolumn;
    这些代码完全没必要,音量直接用1就可以,去掉这些代码或许就会好一些
      

  3.   

    加点时间debug 就知道到底卡在哪了~什么问题都能调试出来的。