Android 游戏开发--即时音效
即时音效,顾名思义,是一个又短又快的音效,适合于播放时间较短反应迅速的音频文件,例如输入法打字时的“哒哒”声就是这个东西,下象棋时的下棋声也是...
该技术继承自android.media.SoundPool
SoundPool类用于和播放应用程序的声音资源,该类将声音文件加载到内存中,处于性能的考虑,一般只将时间小于7秒左右的声音文件用该技术播放。
构造方法SoundPool(int maxStreams, int streamType, int srcQuality)
• maxStreams:该参数用于设置同时能够播放多少音效,如设置为3,则最多同时可以播放3个音效
• streamType:音频类型,在游戏中通常设置为STREAM_MUSIC
• srcQuality:音频文件的质量,默认设置为0
加载音频文件public int load(Context context, int resId, int priority)
• context:应用程序上下文,即调用它的Activity
• resId:资源id
• priority:优先级,可以设置为1
播放音效public final int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
• soundID:播放的音乐ID
• leftVolume:用来控制左声道音量
• rightVolume:用来控制右声道音量
• priority:优先级,0最低
• loop:循环次数,0为不循环,-1为永远循环
• rate:回放速度,该值在0.5-2.0之间,1为正常速度
暂定播放public final void pause(int streamID)
• streamID音效ID
下面是应用这个即时音效的一个例子
package com.loulijun.quicksound;
import java.util.HashMap;
import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class QuickSoundActivity extends Activity {
//创建一个声音池
private SoundPool sp;
HashMap<Integer, Integer> map;
private Button startOne = null;
private Button stopOne = null;
private Button startTwo = null;
private Button stopTwo = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化声音池
initSoundPool();
startOne = (Button)findViewById(R.id.startone);
stopOne = (Button)findViewById(R.id.stopone);
startTwo = (Button)findViewById(R.id.starttwo);
stopTwo = (Button)findViewById(R.id.stoptwo);
startOne.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v) {
playSound(1,1);//播放第一首音效,循环一遍
}
});
stopOne.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v) {
//暂停第一首音效www.zzzyk.com
sp.pause(map.get(1));
}
});
startTwo.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v) {
//播放第二首音效,循环两次
playSound(2,2);
}
});
stopTwo.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v) {
//暂定第二首音效
sp.pause(map.get(2));
}
});
}
//声音池初始化方法
private void initSoundPool()
{
sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
map = new HashMap<Integer, Integer>();
map.put(1, sp.load(this, R.raw.one, 1));
map.put(2, sp.load(this, R.raw.two, 1));
}
//播放声音方法
public void playSound(int sound, int number)
{
AudioManager am = (AudioManager)this.getSystemService(this.AUDIO_SERVICE);
//返回当前AlarmManager最大音量
float audioMaxVolume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//返回当前AudioManager对象的音量值
float audioCurrentVolume = am.getStreamVolume(AudioManager.STREAM_MUSIC);
float volumnRatio = audioCurrentVolume/audioMaxVolume;
sp.play(
map.get(sound), //播放的音乐Id
volumnRatio, //左声道音量
volumnRatio, //右声道音量
&
补充:移动开发 , Android ,