用soundpool可以播一些短的反应速度要求高的声音,
比如游戏中的爆破声,而mediaplayer适合播放长点的。
1. SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的操作。但是这里如果音效文件过大没有载入完成,我们调用play方法时可能产生严 重的后果,这里Android SDK提供了一个SoundPool.OnLoadCompleteListener类来帮助我们了解媒体文件是否载入完成,我们重载 onLoadComplete(SoundPool soundPool, int sampleId, int status) 方法即可获得。
2. 从上面的onLoadComplete方法可以看出该类有很多参数,比如类似id,是的SoundPool在load时可以处理多个媒体一次初始化并放入内存中,这里效率比MediaPlayer高了很多。 人人
3. SoundPool类支持同时播放多个音效,这对于游戏来说是十分必要的,而MediaPlayer类是同步执行的只能一个文件一个文件的播放。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><Buttonandroid:id="@+id/play01"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="play 01" /><Buttonandroid:id="@+id/play02"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="play 02" /></LinearLayout>

package com.example.soundpooldemo;import java.util.HashMap;
import java.util.Map;import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;@SuppressLint("UseSparseArrays")
public class MainActivity extends Activity implements OnClickListener
{private Button player1;private Button player2;private SoundPool sp;private Map<Integer,Integer> soundMap = new HashMap<Integer,Integer>();private int loadFlag = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sp = new SoundPool(4, AudioManager.STREAM_MUSIC, 5);soundMap.put(1, sp.load(this, R.raw.xxxx, 1));soundMap.put(2, sp.load(this, R.raw.yyyy, 1));sp.setOnLoadCompleteListener(new OnLoadCompleteListener() {@Overridepublic void onLoadComplete(SoundPool soundPool, int sampleId, int status) {//判断是否加载完loadFlag = 1;}});player1 = (Button)findViewById(R.id.play01);player2 = (Button)findViewById(R.id.play02);player1.setOnClickListener(this);player2.setOnClickListener(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onClick(View v) {if(loadFlag == 0)Toast.makeText(this, "音频正在加载中......", Toast.LENGTH_SHORT).show();else{switch(v.getId()){case R.id.play01:sp.play(soundMap.get(1), 1, 1, 1, 0, 1);break;case R.id.play02:sp.play(soundMap.get(2), 1, 1, 1, 0, 1);}}}}

转载于:https://www.cnblogs.com/Bigmouse123/p/3345802.html

Android多媒体之SoundPool相关推荐

  1. Android多媒体之SoundPool+pcm流的音频操作

    零.前言 今天比较简单,先理一下录制和播放的四位大将 再说一下SoundPool的使用和pcm转wav 讲一下C++文件如何在Android中使用,也就是传说中的JNI 最后讲一下变速播放和变调播放 ...

  2. Android 多媒体综述

    Android 多媒体综述 多媒体系统是Android中最为庞大的系统,涉及了硬件抽象层.编解码.OpenCore多媒体框架.Android多媒体框架.Java层接口多方面的内容. 一.引言 本系列内 ...

  3. Android 多媒体之音频----(日积月累)

    在开发上,习惯的将音频.视频功能的使用称之为多媒体,实际上如果讲的宽泛一些的话,相机的使用,比如拍照,录制视频等,也可以划分到多媒体的范畴里面. 从本节课开始,我们就来看看Android中多媒体的AP ...

  4. Android多媒体开发介绍

    Android多媒体开发介绍 一.       多媒体架构 基于第三方PacketVideo公司的OpenCORE来实现,支持所有通用的音频/视频/静态图像格式,包括:MPEG4.H.264.MP3. ...

  5. Android 多媒体之音频

    在开发上,习惯的将音频.视频功能的使用称之为多媒体,实际上如果讲的宽泛一些的话,相机的使用,比如拍照,录制视频等,也可以划分到多媒体的范畴里面. 从本节课开始,我们就来看看Android中多媒体的AP ...

  6. Android多媒体之GLES2战记第四集--移形换影

    视野限制了人对这个宇宙的认知,但没有视野,人将会一无所知 上集说到勇者坠入黑暗之渊,凭借对世界的认知构建出了世界系 到此为止,OpenGL的世界观已经映入脑海,新手十二副本已经通过 接下来等待他们的将 ...

  7. Android多媒体开发

    Android多媒体开发系列文章 Android多媒体开发:录音机 Android多媒体开发:照相机 TextureView+MediaPlayer实现在线短视频播放 Android多媒体开发:第三方 ...

  8. Android 多媒体视频播放一( 多媒体理解与经验分享)

    前言 说到android的多媒体,一把辛酸一把泪,当初听说会多媒体的比较牛掰,公司也有需求,于是乎我也积极的加入研究android多媒体的行列,记得以前刚接触的时候,最开始还是比较头大的,主要是但是很 ...

  9. Android多媒体整体架构图

    Android多媒体整体架构图 MediaPlayer框架图 Camera框架图 SoundRecorder框架图 VideoCamera框架图 OpenCore与Skia ALSA Audio框架图 ...

最新文章

  1. linux安装8168网卡,Fedora 配置 RTL8168/8111 网卡 Linux下 RTL8168/8111 网卡配置
  2. 喜大普奔,网易猪肉要到你碗里来了!
  3. where is SAP CRM One Order event callback registered
  4. 『设计模式』电话接线员与中介者模式
  5. Docker运行操作系统环境(BusyBoxAlpineDebian/UbuntuCentOS/Fedora)
  6. 前端学习(3009):vue+element今日头条管理--登录中的loding
  7. nagios mysql 监控_nagios监控mysql
  8. Spark源码系列(五)分布式缓存
  9. java基于springboot+vue的校园一卡通管理系统 ssm nodejs
  10. SEO优化与网站浏览量提升
  11. java 获取全球国家名称,语言,简称
  12. 一个开源在线IDE项目
  13. emacs python_将Emacs打造成强大的Python代码编辑工具
  14. 灰、黄、蓝三种颜色的收集装置模型练习及实现思路
  15. 怎么用迅捷PDF转换器在线为PDF文件添加文字内容
  16. Java显示文件层级目录函数_[转载]文件和目录复制函数
  17. 抓取APP中的素材步骤之一
  18. flutter Icon一览表,使用字符映射表查看所有图标并使用
  19. Mysql同步数据到Elasticsearch(实时Canal)
  20. 大数据与算法系列之算法性能分析

热门文章

  1. python 中__name__ = '__main__' 的作用
  2. C++ Vector 使用总结
  3. 什么函数不能声明为虚函数
  4. 读取位置 0x00000028 时发生访问冲突该怎么解决
  5. OpenCV中的数据结构
  6. GaussianBlur函数
  7. cx_Freeze脚本实现--Python使用cx_Freeze编译可执行文件(exe,mac)
  8. 《梦断代码》读后感一
  9. 2011年9月 成都 腾讯笔试 面试过程(亲身体验,仅供参考娱乐)(一)
  10. visual studio 不能创建biztalk 项目