1.相关方法介绍:

1)构造方法:

SoundPool(int maxStreams, int streamType, int srcQuality) 参数依次是:

①指定支持多少个声音,SoundPool对象中允许同时存在的最大流的数量。

②指定声音类型,流类型可以分为STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING,STREAM_MUSIC 和 STREAM_ALARM四种类型。在AudioManager中定义。

③指定声音品质(采样率变换质量),一般直接设置为0!

在低版本中可以用上述构造方法,而API 21(Android 5.0)后这个构造方法就过时了! 而用到一个SoundPool.Builder的东东,我们要实例化SoundPool只需调用:

SoundPool.Builder spb = new SoundPool.Builder();

spb.setMaxStreams(10);

spb.setAudioAttributes(null); //转换音频格式

SoundPool sp = spb.build(); //创建SoundPool对象

要使用上述代码的话,TargetSDK版本要设置大于等于21哦!而且如果minSDK版本小于21 会出现下面的提醒:

image

2)常用方法介绍:

①加载声音资源:

load(Context context, int resId, int priority)

load(String path, int priority)

load(FileDescriptor fd, long offset, long length, int priority)

load(AssetFileDescriptor afd, int priority) 上述方法都会返回一个声音的ID,后面我们可以通过这个ID来播放指定的声音

参数介绍:

context:上下文

resId:资源id

priority:没什么用的一个参数,建议设置为1,保持和未来的兼容性

path:文件路径

FileDescriptor:貌似是流吧,这个我也不知道

AssetFileDescriptor:从asset目录读取某个资源文件,用法:

AssetFileDescriptor descriptor = assetManager.openFd("biaobiao.mp3");

②播放控制:

play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

参数依次是:

soundID:Load()返回的声音ID号

leftVolume:左声道音量设置

rightVolume:右声道音量设置

priority:指定播放声音的优先级,数值越高,优先级越大。

loop:指定是否循环:-1表示无限循环,0表示不循环,其他值表示要重复播放的次数

rate:指定播放速率:1.0的播放率可以使声音按照其原始频率,而2.0的播放速率,可以使声音按照其 原始频率的两倍播放。如果为0.5的播放率,则播放速率是原始频率的一半。播放速率的取值范围是0.5至2.0。

③资源释放:

可以调用release()方法释放所有SoundPool对象占据的内存和资源,当然也可以根据声音 ID来释放!

3.使用代码示例:

运行效果图:

image

当点击按钮的时候会,"Duang"一下,这里演示了两种load的方法,分别是raw和assests!

关键代码:

MainActivity.java:

private void initSP() throws Exception{

//设置最多可容纳5个音频流,音频的品质为5

mSoundPool = new SoundPool(5, AudioManager.STREAM_SYSTEM, 5);

soundID.put(1, mSoundPool.load(this, R.raw.duang, 1));

soundID.put(2 , mSoundPool.load(getAssets().openFd("biaobiao.mp3") , 1)); //需要捕获IO异常

soundID.put(3, mSoundPool.load(this, R.raw.duang, 1));

soundID.put(4, mSoundPool.load(this, R.raw.duang, 1));

soundID.put(5, mSoundPool.load(this, R.raw.duang, 1));

}

@Override

public void onClick(View v) {

switch (v.getId()){

case R.id.btn_play1:

mSoundPool.play(soundID.get(1), 1, 1, 0, 0, 1);

break;

case R.id.btn_play2:

mSoundPool.play(soundID.get(2), 1, 1, 0, 0, 1);

break;

case R.id.btn_play3:

mSoundPool.play(soundID.get(3), 1, 1, 0, 0, 1);

break;

case R.id.btn_play4:

mSoundPool.play(soundID.get(4), 1, 1, 0, 0, 1);

break;

case R.id.btn_play5:

mSoundPool.play(soundID.get(5), 1, 1, 0, 0, 1);

break;

case R.id.btn_release:

mSoundPool.release(); //回收SoundPool资源

break;

}

代码非常简单,另外如果你点击了最后一个按钮的话,SoundPool就会被释放,然后再其他按钮 就不会Duang了哦~

4.OnLoadCompleteListener监听声音文件是否加载完毕

嗯,这个是临时想起的,写完在写另一篇的时候突然想起,用法也很简单,我们可以 往上面的代码中添加OnLoadCompleteListener这个东东,然后重写onLoadComplete()方法 ,最后为SoundPool对象设置这个东东即可!

mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {

@Override

public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {

Toast.makeText(MainActivity.this,"加特技准备完毕~",Toast.LENGTH_SHORT).show();

}

});

android 播放一段音效,android 之使用SoundPool播放音效(Duang~)相关推荐

  1. 【Android -- 音效】使用 SoundPool 播放音效

    前言 SoundPool 一般用来 播放密集,急促而又短暂的音效,比如特技音效:Duang~,游戏用得较多,你也可以为你的 APP 添加上这个音效,比如酷狗音乐进去的时候播放"哈喽,酷狗&q ...

  2. Android IJKPlayer缓冲区设置以及播放一段时间出错解决方案

    Android IJKPlayer缓冲区设置以及播放一段时间出错解决方案 参考文章: (1)Android IJKPlayer缓冲区设置以及播放一段时间出错解决方案 (2)https://www.cn ...

  3. Android之使用SoundPool播放一小段音频,实现猜歌的功能

    这里,首先附上软件运行后的界面: 1.在播放音乐中,我介绍过利用MediaPlayer来播放音乐,这个类占用资源多,并且不支持播放多个音频,在Android中还提供了一个播放音频的类,即SoundPo ...

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

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

  5. Android SoundPool播放音效详细步骤

    MediaPlayer虽然也能播放音频,但是它有资源占用量较高,延迟时间较长,不支持多个音频同时播放等缺点,这些缺点决定MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对 ...

  6. Android如何连续播放多段短音频

    Android原生目录下android.media.MediaPlayer可以播放音频,也可以播放多段连续音频,但是效果不太理想,间隔很明显,MediaPlayer播放音频代码如下: public c ...

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

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

  8. android 播放短铃声,Android使用SoundPool播放短音效

    前言 对于Android播放一些简短音效,例如提示音,或者铃声,相对于使用MediaPlayer,SoundPool可以节省更多资源,并且可以同时播放多个音效,而且可以针对不同音效设置不同播放品质 实 ...

  9. android学习笔记---43_音乐播放器,音频采集,音乐播放,使用SoundPool播放音效

    43_音乐播放器 ------------------------------------------ 1.注意在string.xml中不可以使用java的关键字,因为用关键字的话,会和java内部冲 ...

最新文章

  1. Nature解析中国AI现状,2030年能引领全球吗?
  2. Nginx流量拦截算法
  3. PCA 主成分分析 用Excel一步步演算过程详解
  4. c语言随机产生四位数,习题:随机产生N个四位正整数,将其中的素数选出,并升序排列之输…...
  5. c++ 结构体初始化_单片机C语言 - 基于结构体的面向对象编程技巧
  6. Codeforces.1051G.Distinctification(线段树合并 并查集)
  7. python大佬养成计划----Web框架(Flask)
  8. 洛谷——P2026 求一次函数解析式
  9. 【IMU】BMI160 Driver分析及使用
  10. XJOI_3541_开根号
  11. 【离散数学】关于欧拉图与哈密顿图的讨论
  12. NB-IoT(窄带物联网)相关知识
  13. Android 获得联系人并排序
  14. cisco 2821 路由器的端口映射
  15. Day02 Jinja2模板引擎Bootstrap
  16. scm中mysql作用_SCM系统的作用有哪些
  17. Vyos OpenVPN (SSL TLS+User Auth) 本地PAM认证 SSLVPN服务器搭建
  18. foxmail显示无法登陆到发信服务器,foxmail 无法发信,收信正常。
  19. MATLAB的FIR滤波算法
  20. 我和《窗边的小豆豆》

热门文章

  1. 面向对象:让我们红尘作伴,吃的白白胖胖
  2. magisk卸载内置软件_如何卸载/恢复iPhone自带的内置应用?
  3. VBS 从Excel中获取数据,批量替换word中的文字
  4. python做的游戏怎么导到微信_微信跳一跳游戏的脚本-scratch导出到微信-微信小程序是怎么做的...
  5. 做一个网站真的有那么难吗?
  6. android 11.0 状态栏通知栏的图标为白色解决方案
  7. python下载博文中微博图床图片
  8. window8系统 dns有问题怎么修复,浏览器代理设置,浏览器提示网页无法显示
  9. appstore开发者中文名称修改
  10. 比较802.11ac(Wi‑Fi 5)和802.11ax(Wi‑Fi 6)