最近用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为正常速度
);
}
}
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为正常速度
);
}
}
解决方案 »
- ubuntu下jni的使用问题,已经用NDK已经编译好了.SO,但就是调用不成功。
- 【让2D和3D完美结合】view上如何叠加 glSurfaceView?
- android 多媒体stagefright和openmax解码几个问题
- 关于opengl es的GLRender类中实现了Render接口的问题
- Android和winM7相比谁走的更远?
- android应用程序移植到开发板问题
- jjs如何调用打开android apk 应用
- 如何在图片上显示闪烁的标记?地图定位
- arcgis地图怎么标注当前位置
- 安卓程序无法获取位置信息的问题
- 怎样列出/data/data/mypackage/files目录下的文件结构
- 求救:Android中植入google广告为什么不成功?
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就可以,去掉这些代码或许就会好一些