Android 之 使用SoundPool播放音频

[size=small][color=olive][b]SoundPool :音效池
1、Android 中除了提供MediaPlayer播放音效外,还提供了SoundPool播放音效;
特点:
* SoundPool 使用音效池的概念来管理多个短促的音效;
* cpu资源占用量低和反应延迟小;
* 支持自行设置的品质、音量、播放比率等参数;
* 异步线程,占用资源少,可以同时合成多种音效;
用途:一般用于实现游戏音效;
提示:用SoundPool 载入和播放多个音效时用OGG格式,否则某些型号的手机可能会出现杂音,重复播放等问题;
2、使用SoundPool播放音效的步骤:
* 获得对象;SoundPool soundPool = new SoundPool();
* 调用load()方法,从指定资源、文件中加载声音;建议用key-value保存,因为该方法返回的是:该音频在音效池中的位置;
* 调用play()播放声音;
3、使用案例如下:[/b][/color][/size]
[color=brown]java代码:[/color]
package com.example.multimediaapp_soundpool;

import java.util.HashMap;

import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

private Button sound1,sound2,sound3;
private HashMap<Integer,Integer> map;
private SoundPool soundPool;
public void init(){
sound1 = (Button) findViewById(R.id.sound1);
sound2 = (Button) findViewById(R.id.sound2);
sound3 = (Button) findViewById(R.id.sound3);
}

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

init();

/* 获取SoundPool对象:参1:同时播放流的最大数量 ; 参2:流的类型,一般为:STREAM_MUSIC(具体在AudioManager类中列出) ; 参3:采样率转化质量,用0默认*/
soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);

/* 加载文件 *//* 执行该方法返回的是该音频文件在音效池中的位置,用HashMap保存 */
map.put(1, soundPool.load(this,R.raw.arrow , 1));
map.put(2, soundPool.load(this, R.raw.bomb, 1));
map.put(3, soundPool.load(this, R.raw.shot, 1));

}

/* 事件:启动音效 */
OnClickListener listener = new OnClickListener() {

public void onClick(View v) {
Button btn = (Button)v;
switch (btn.getId()) {
case R.id.sound1:
/* @ soundID 音效池中的ID
* @ leftVolume 左声道 :0.0-1.0
* @ rightVolume 右声道 :0.0-1.0
* @ priority 优先权 : 0 表示最低权限;
* @ loop : 循环 0 == 不循环 -1==永远循环 other==循环指定次数
* @ rate 比率 :playback 录音重放 rate : 0.5-2.0
* */
soundPool.play(map.get(1), 1, 1, 1, 0, 1);
break;
case R.id.sound2:
soundPool.play(map.get(2), 1, 1, 1, 0, 1);
break;
case R.id.sound3:
soundPool.play(map.get(3), 1, 1, 1, 0, 1);
break;
default:
break;
}
}
};


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值