android 播放一段音效,android 之使用SoundPool播放音效(Duang~)
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~)相关推荐
- 【Android -- 音效】使用 SoundPool 播放音效
前言 SoundPool 一般用来 播放密集,急促而又短暂的音效,比如特技音效:Duang~,游戏用得较多,你也可以为你的 APP 添加上这个音效,比如酷狗音乐进去的时候播放"哈喽,酷狗&q ...
- Android IJKPlayer缓冲区设置以及播放一段时间出错解决方案
Android IJKPlayer缓冲区设置以及播放一段时间出错解决方案 参考文章: (1)Android IJKPlayer缓冲区设置以及播放一段时间出错解决方案 (2)https://www.cn ...
- Android之使用SoundPool播放一小段音频,实现猜歌的功能
这里,首先附上软件运行后的界面: 1.在播放音乐中,我介绍过利用MediaPlayer来播放音乐,这个类占用资源多,并且不支持播放多个音频,在Android中还提供了一个播放音频的类,即SoundPo ...
- android 播放提示音,[转载]android播放音效例子 (翻页音效、警报音效通用
音效播放: 资源文件: res/raw/filename 声音池类:SoundPool sp = new SoundPool(同时最大播放个数,AudioManager.STREAM_MUSIC,0) ...
- Android SoundPool播放音效详细步骤
MediaPlayer虽然也能播放音频,但是它有资源占用量较高,延迟时间较长,不支持多个音频同时播放等缺点,这些缺点决定MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对 ...
- Android如何连续播放多段短音频
Android原生目录下android.media.MediaPlayer可以播放音频,也可以播放多段连续音频,但是效果不太理想,间隔很明显,MediaPlayer播放音频代码如下: public c ...
- android 播放固定频率的声音,Android使用SoundPool播放音效
本文实例为大家分享了Android使用SoundPool播放音效的具体代码,供大家参考,具体内容如下 SoundPool(int maxStreams, int streamType, int src ...
- android 播放短铃声,Android使用SoundPool播放短音效
前言 对于Android播放一些简短音效,例如提示音,或者铃声,相对于使用MediaPlayer,SoundPool可以节省更多资源,并且可以同时播放多个音效,而且可以针对不同音效设置不同播放品质 实 ...
- android学习笔记---43_音乐播放器,音频采集,音乐播放,使用SoundPool播放音效
43_音乐播放器 ------------------------------------------ 1.注意在string.xml中不可以使用java的关键字,因为用关键字的话,会和java内部冲 ...
最新文章
- Nature解析中国AI现状,2030年能引领全球吗?
- Nginx流量拦截算法
- PCA 主成分分析 用Excel一步步演算过程详解
- c语言随机产生四位数,习题:随机产生N个四位正整数,将其中的素数选出,并升序排列之输…...
- c++ 结构体初始化_单片机C语言 - 基于结构体的面向对象编程技巧
- Codeforces.1051G.Distinctification(线段树合并 并查集)
- python大佬养成计划----Web框架(Flask)
- 洛谷——P2026 求一次函数解析式
- 【IMU】BMI160 Driver分析及使用
- XJOI_3541_开根号
- 【离散数学】关于欧拉图与哈密顿图的讨论
- NB-IoT(窄带物联网)相关知识
- Android 获得联系人并排序
- cisco 2821 路由器的端口映射
- Day02 Jinja2模板引擎Bootstrap
- scm中mysql作用_SCM系统的作用有哪些
- Vyos OpenVPN (SSL TLS+User Auth) 本地PAM认证 SSLVPN服务器搭建
- foxmail显示无法登陆到发信服务器,foxmail 无法发信,收信正常。
- MATLAB的FIR滤波算法
- 我和《窗边的小豆豆》
热门文章
- 面向对象:让我们红尘作伴,吃的白白胖胖
- magisk卸载内置软件_如何卸载/恢复iPhone自带的内置应用?
- VBS 从Excel中获取数据,批量替换word中的文字
- python做的游戏怎么导到微信_微信跳一跳游戏的脚本-scratch导出到微信-微信小程序是怎么做的...
- 做一个网站真的有那么难吗?
- android 11.0 状态栏通知栏的图标为白色解决方案
- python下载博文中微博图床图片
- window8系统 dns有问题怎么修复,浏览器代理设置,浏览器提示网页无法显示
- appstore开发者中文名称修改
- 比较802.11ac(Wi‑Fi 5)和802.11ax(Wi‑Fi 6)