当前位置:操作系统 > 安卓/Android >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,