您的位置:首页 > 移动开发 > Android开发

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

2016-08-08 10:22 381 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android soundpool