SoundPool类-游戏中即时音效的简介

SoundPool为即时音效,一般用于游戏里面的短暂的音效,与Android系统自带的MediaPlay而言不会占用大量的系统资源,并且播放是不需要缓冲,延迟较小,一般的文件大小为<=7秒的小音频文件。
SoundPool类的构造器和方法如下图:

本demo的运行结果如下图:

源码连接:

xml文件非常的简单 就两个button 的摆放所以 你们自己写,非常的简单
下面给出主要的.java文件的代码:

package com.xyliwp.soundpooldeom;

import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.util.HashMap;

/*
      需求:本dome主要为了熟悉解释  soundpool
      soundpool 主要用于  小于等于7秒的即时音乐的播放
      即为既时音乐。的简介,它相比较Android提供的MediaPlay而言 播放时并需要缓存 并且不会
      占用大量的系统资源。
 */
public class MainActivity extends AppCompatActivity {
    /**
     * 生命soundpool的引用
     */
    private SoundPool soundPool;
    //声明hashmap用来存放声音文件
    private HashMap<Integer,Integer> hashMap;
    //当前正在播放的streamid
    private int currStreamId;
    //对播放和暂停两个按钮的定义
    private Button button_bofang;
    private Button button_zanting;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化  soundpool
        initSoundPool();
        //控件id的绑定
        initId();
        //控件点击事件的设置
        idOnClick();
    }

    /**
     * id绑定
     */
    private void initId(){
        button_bofang = (Button)findViewById(R.id.bofang);
        button_zanting = (Button)findViewById(R.id.zanting);
    }

    /**
     * 点击事件的设置
     */
    private void idOnClick() {
        button_zanting.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //停止当前音效的播放
                soundPool.stop(currStreamId);
                Toast.makeText(getApplicationContext(),"暂停即时音效",Toast.LENGTH_SHORT).show();
            }
        });
        button_bofang.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //播放1号资源  并且播放一次
                playSound(1,0);
                Toast.makeText(getApplicationContext(),"播放即时音效",Toast.LENGTH_SHORT).show();
            }
        });
    }
    /**
     * 初始化  声音池
     */
    private void initSoundPool(){
        //创建soundpool对象
        soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC,0);
        hashMap = new HashMap<Integer, Integer>();
        //加载 zhandou音效 并这只为1号
        hashMap.put(1,soundPool.load(this,R.raw.qiangsheng,1));
    }

    /**
     * 播放即时音效
     * @param sound
     * @param loop
     */
    private void playSound(int sound,int loop){
        //AudioManager引用
        AudioManager audioManager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
        //获取当前系统音量
        float qian = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        //获取系统最大音量
        float max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        //计算得到播放音量
        float bofang = qian/max;
        /**
         * 设置播放文件的音量
         * hashMap.get(sound)  播放的id
         * bofang,bofang  左右升到的音量
         * loop   循环次数,0不循环,-1永远循环
         * 1  参数的优先级 0为最低
         * 1.0f  回放的速度
         */
        currStreamId = soundPool.play(hashMap.get(sound),bofang,bofang,1,loop,1.0f);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值