Android使用SoundPool实现播放音效

如果在程序应用中(比如:游戏的音效等)需要播放密集、短促的音效,这时就使用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界面代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="horizontal">

  <Button
    android:id="@+id/bomb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="爆炸声" />

  <Button
    android:id="@+id/shot"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="射击声" />

  <Button
    android:id="@+id/arrow"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="射箭声" />
</LinearLayout>

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<Integer, Integer> 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程序运行效果界面截图如下:

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

(0)

相关推荐

  • Android使用SoundPool播放音效

    本文实例为大家分享了Android使用SoundPool播放音效的具体代码,供大家参考,具体内容如下 SoundPool(int maxStreams, int streamType, int srcQuality) 参数依次是: ①指定支持多少个声音,SoundPool对象中允许同时存在的最大流的数量. ②指定声音类型,流类型可以分为STREAM_VOICE_CALL(通话), STREAM_SYSTEM(系统), STREAM_RING(铃声),STREAM_MUSIC(媒体音量) 和STR

  • android使用SoundPool播放音效的方法

    在Android开发中我们经常使用MediaPlayer来播放音频文件,但是MediaPlayer存在一些不足,例如:资源占用量较高.延迟时间较长.不支持多个音频同时播放等.这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中. 在游戏开发中我们经常需要播放一些游戏音效(比如:子弹爆炸,物体撞击等),这些音效的共同特点是短促.密集.延迟程度小.在这样的场景下,我们可以使用SoundPool代替MediaPlayer来播放这些音效. Sou

  • Android使用SoundPool播放短音效

    前言 对于Android播放一些简短音效,例如提示音,或者铃声,相对于使用MediaPlayer,SoundPool可以节省更多资源,并且可以同时播放多个音效,而且可以针对不同音效设置不同播放品质 实现 SoundPool的具体作用,就不再阐述,直接贴代码 private SoundPool.Builder spBuilder; private SoundPool soundPool; private Integer[] fmSound = FmManager.getRawAudios(); i

  • Android使用SoundPool播放音效实例

    使用场景 SoundPool一般用来 播放密集,急促而又短暂的音效,比如特技音效:Duang~,游戏用得较多,你也可以为你的 APP添加上这个音效,比如酷狗音乐进去的时候播放"哈喽,酷狗" 是不是提起了对于SoundPool的兴趣了呢 ok,废话不多说 详细的参数解释请看注释 public class SoundPlayer extends AppCompatActivity { private SoundPool mSoundPool; @Override protected voi

  • Android SoundPool实现简短小音效

    一.SoundPool介绍 我们之前有用过MediaPlayer进行播放音频文件,但是当我们的应用程序需要经常的播放密集.短促的音效时,调用MediaPlayer则会占用系统的大量资源,且延时时间较长,不支持多个音频同时播放.这种简单的音乐的播放就运用到了我们的SoundPool,它使用音效池的概念来管理短促的音效,例如它可以开始就加载20 个音效,通过他们的id进行管理与播放.SoundPool的优势在于占用的CPU资源少,反应延迟降低.另外它还支持自行设置声音的品质,音量,播放比率. 二.使

  • Android使用SoundPool实现播放音效

    如果在程序应用中(比如:游戏的音效等)需要播放密集.短促的音效,这时就使用SoundPool来播放音效,SoundPool使用音效池的概念来管理多个短促的音效,例如它可以开始就10个音效,以后在程序中按音效的ID进行播放. SoundPool主要用于播放一些较短的声音片段,与MediaPlayer相比,SoundPool的优势在 于CPU资源占用量低和反应延迟小.另外,SoundPool还支持自行设置声音的品质.音量.播放比率等参数. 一般使用SoundPool播放声音的步骤如下: Step1:

  • Android使用SoundPool实现播放音频

    最近做一个播放音频的小功能,使用毛坯界面简单记录下(点击上边的ImageButton播放,下边的ImageView请无视) activity_picture.xml页面: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="ht

  • Android中SoundPool的使用步骤实例

    大家知道MediaPlayer占用的资源比较多,且不可以同时支持播放多个音频,所以我们有一种叫做SoundPool,比如我们常见的按键音或者是手机提示音,还比如我们在游戏的开发中会有大量的音效效果等,下边介绍一下她的用法: 步骤如下: 1.创建SoundPool对象 源码如下 /** *SoundPool源码中的构造方法方法体 * @param maxStreams 最多可以容纳多少个音频 * @param streamType 指定的声音类型,通过AudioManager类提供的常量进行指定

  • Android利用SoundPool实现音乐池

    本文实例为大家分享了Android利用SoundPool实现音乐池的具体代码,供大家参考,具体内容如下 运行效果图如下: 布局文件(activity_sound_pool.xml) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&

  • Android MediaPlayer实现音乐播放器实例代码

    Android MediaPlayer实现音乐播放器 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height=&qu

  • iOS App中实现播放音效和音乐功能的简单示例

    播放音效 iOS开发过程中可能会遇到播放音效的功能 其实很简单,iOS已经提供了一个框架直接负责播放音效 AudioToolbox.framework 新建项目  TestWeChatSounds 给新建的项目导入AudioToolbox.framework 导入成功之后如下图 项目目录如下 接下来我们给项目中添加几个caf格式的音效文件 接下来 我们打开 项目默认生成的ViewController中添加代码 导入 AudioToolbox 复制代码 代码如下: #import <AudioTo

  • Android编程开发音乐播放器实例

    本文实例讲述了Android编程开发音乐播放器,分享给大家供大家参考,具体如下: 音乐播放器中综合了以下内容: SeekBar.ListView.广播接收者(以代码的形式注册Receiver).系统服务.MediaPlayer 实现的功能: 1.暂停/播放.下一首/上一首,点击某一首时播放 2.支持拖动进度条快进 3.列表排序 4.来电话时,停止播放,挂断后继续播放 5.可在后台播放 效果图: 界面: main.xml: <?xml version="1.0" encoding=

  • Android 开源在线音乐播放器

    封面图:  简介 波尼音乐是一款开源Android在线音乐播放器. 播放本地音乐与在线音乐 在线音乐排行榜,如热歌榜.新歌榜等 高仿云音乐的黑胶唱片专辑封面 歌词显示,自动搜索歌词 夜间模式 定时关闭 更新说明 v 1.0 First Release TODO 在线音乐可以免下载加入我的音乐列表 在线音乐自动缓存 编辑音乐信息 项目公开API 在线音乐:百度音乐 天气数据:高德地图 开源技术 okhttp-utils Android-Universal-Image-Loader 关键代码 黑胶唱

随机推荐