如果在程序应用中(比如:游戏的音效等)需要播放密集、短促的音效,这时就使用SoundPool来播放音效,SoundPool使用音效池的概念来管理多个短促的音效,例如它可以开始就10个音效,以后在程序中按音效的ID进行播放。

SoundPool主要用于播放一些较短的声音片段,与MediaPlayer相比,SoundPool的优势在 于CPU资源占用量低和反应延迟小。另外,SoundPool还支持自行设置声音的品质、音量、播放比率等参数。

一般使用SoundPool播放声音的步骤如下:

Step1:调用SoundPool.Builder的构造器创建SoundPool.Builder对象,并可通过该Builder对象为SoundPool设置属性;

Step2:调用SoundPool的构造器创建SoundPool对象;

Step3:调用SoundPool对象的load()方法从指定资源、文件中加载声音。最好使用HashMap< Integer, Integer>来管理所加载的声音;

Step4:调用SoundPool的play()方法播放声音。

下面的Demo程序示范了如何使用SoundPool来播放音效,该程序提供三个按钮,分别用于播放不同的声音。

layout/activity_main.xml界面代码如下:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:id="@+id/bomb"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="爆炸声" />

android:id="@+id/shot"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="射击声" />

android:id="@+id/arrow"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="射箭声" />

MainActivity.java逻辑代码如下:

package com.fukaimei.soundpooltest;

import android.media.AudioAttributes;

import android.media.SoundPool;

import android.os.Build;

import android.support.annotation.RequiresApi;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import java.util.HashMap;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

Button bomb, shot, arrow;

// 定义一个SoundPool

SoundPool soundPool;

HashMap soundMap = new HashMap<>();

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

bomb = (Button) findViewById(R.id.bomb);

shot = (Button) findViewById(R.id.shot);

arrow = (Button) findViewById(R.id.arrow);

AudioAttributes attr = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_GAME) // 设置音效使用场景

.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build(); // 设置音效的类型

soundPool = new SoundPool.Builder().setAudioAttributes(attr) // 设置音效池的属性

.setMaxStreams(10) // 设置最多可容纳10个音频流

.build(); // ①

// load方法加载指定音频文件,并返回所加载的音效ID

// 此处使用HashMap来管理这些音频流

soundMap.put(1, soundPool.load(this, R.raw.bomb, 1)); // ②

soundMap.put(2, soundPool.load(this, R.raw.shot, 1)); // ②

soundMap.put(3, soundPool.load(this, R.raw.arrow, 1)); // ②

bomb.setOnClickListener(this);

shot.setOnClickListener(this);

arrow.setOnClickListener(this);

}

// 重写OnClickListener监听器接口的方法

@Override

public void onClick(View v) {

// 判断哪个按钮被单击

if (v.getId() == R.id.bomb) {

soundPool.play(soundMap.get(1), 1, 1, 0, 0, 1); // ③

} else if (v.getId() == R.id.shot) {

soundPool.play(soundMap.get(2), 1, 1, 0, 0, 1); // ③

} else if (v.getId() == R.id.arrow) {

soundPool.play(soundMap.get(3), 1, 1, 0, 0, 1); // ③

}

}

}

上面Demo程序代码中标①的代码用于创建SoundPool对象;标②的代码用于使用SoundPool加载多个不同的声音;标③的代码则用于根据声音ID来播放指定的声音。这就是使用SoundPool播放声音的标准过程。

实际使用SoundPool播放声音时有如下几点需要注意:SoundPool虽然可以一次性加载多个声音,但由于内存限制,因此应该避免使用SoundPool来播放歌曲,只有那些短促、密集的声音才考虑使用SoundPool进行播放。

Demo程序运行效果界面截图如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android 声音池,Android使用SoundPool实现播放音效相关推荐

  1. Android中的多媒体开发(一)——使用SoundPool来播放音效

    SoundPool(int maxStreams, int streamType, int srcQuality) 参数依次是: ①指定支持多少个声音,SoundPool对象中允许同时存在的最大流的数 ...

  2. android 声音资源,Android系统声音文件目录

    1 系统自带声音文件存放的位置和内容. 1.1 总目录:/system/media/audio 1.2 闹钟:/system/media/audio/alarms 1.3 短信通知:/system/m ...

  3. Android中声音池SoundPool的使用

    对于MediaPlayer无法同时播放多个声音的问题,Android提供了声音池工具SoundPool,使用声音池即可对多个声音的播放进度调度. 1.SoundPool优点 资源占用量小,不像Medi ...

  4. android 播放声音资源,android播放音效例子 (翻页音效、警报音效通用 只需传入声音源)...

    音效播放: 资源文件: res/raw/filename 声音池类:SoundPool sp = new SoundPool(同时最大播放个数,AudioManager.STREAM_MUSIC,0) ...

  5. android 播放提示音,[转载]android播放音效例子 (翻页音效、警报音效通用

    音效播放: 资源文件: res/raw/filename 声音池类:SoundPool sp = new SoundPool(同时最大播放个数,AudioManager.STREAM_MUSIC,0) ...

  6. SoundPool 音频播放 详解 示例

    demo地址:https://github.com/baiqiantao/PermissionTest.git 官方文档 文档位置:https://developer.android.google.c ...

  7. SoundPool类播放音频、案例弹钢琴

    SoundPool即音频池,可以同时播放多个短小的音频,而且占用资源少,其适合在应用程序中播放按键音或者消息提示音等. SoundPool类常用方法 方法名称 功能描述 load() 加载音频文件 p ...

  8. Android开发音效增强中铃声播放Ringtone及声音池调度SoundPool的讲解及实战(超详细 附源码)

    需要源码请点赞关注收藏后评论区留下QQ~~~ 一.铃声播放 虽然媒体播放器MediaPlayer既可用来播放视频,也可以用来播放音频,但是在具体的使用场合,MediaPlayer存在某些播音方面的不足 ...

  9. android 播放固定频率的声音,Android使用SoundPool播放音效

    本文实例为大家分享了Android使用SoundPool播放音效的具体代码,供大家参考,具体内容如下 SoundPool(int maxStreams, int streamType, int src ...

最新文章

  1. 容器中的JVM资源该如何被安全的限制?
  2. Nova 启动虚拟机流程解析
  3. 湖大计算机考研分数线,湖南大学2017年考研分数线已公布
  4. mysql 已存在数据_MySQL跳过已存在的数据
  5. P1111 修复公路(并查集)
  6. cuda笔记-第一个cuda程序
  7. javascript 询问_JavaScript解释引擎
  8. 易筋经:现代化支付系统脉络梳理
  9. 20200427 FTL 模板语言参考 梳理 (常用)
  10. 智能开关如何实现双控
  11. 【算法】机器人走迷宫(适用于走迷宫、最短路径算法)-20200412
  12. python 自动生成问卷表的软件的设计与实现 毕业设计源码291138
  13. 将数据表的纵向数据横向显示
  14. OPS and So on.
  15. RCC APB2PeriphClockCmd RCC APB1PeriphClockCmd
  16. vue发送请求时遇到index.vue?6ced:90 Uncaught (in promise) TypeError: Cannot read properties of undefined
  17. Linux 学习网站汇总
  18. 什么样的量化策略才算好策略?
  19. Mavicat连接mysql关闭防火墙_连接navicat的一些问题 主要是防火墙
  20. Marathon主要功能介绍(一)

热门文章

  1. 计算机毕业设计Java无人售货机管理系统(源码+系统+mysql数据库+Lw文档)
  2. Robosense速腾激光雷达如何录制与解码rosbag
  3. 电动汽车充电接口通信协议
  4. 罗克韦尔AB PLC_FactoryTalk无法登录的解决方法
  5. 【软考】信息系统开发基础 - 信息系统规划(ISP)
  6. Pytorch:全连接神经网络-MLP回归
  7. 海康Visionmaster-3D工具-匹配-深度图
  8. FPGA Verilog 串口无限多字节收发+流水灯程序+ModelSim仿真
  9. Springer期刊latex投稿需要上传的文件
  10. labview 转标准c语言,如何将LabVIEW的VI转换为C语言代码..docx