安卓的SoundPool(音效池)播放声音(及具体参数解析)

OpenHarmony实战开发-使用SoundPool开发音频播放功能 使用SoundPool(音频池)提供的接口,可以实现低时延短音播放。 阅读详情

SoundPool一般用来播放的文件特点有:声音短,文件小,延时慢(不像使用MediaPlayer类播放音乐时,需要等待一段时间),因此常用来播放游戏时的音效,解锁时的铃声等。注意:该类不适合播放太大的文件资源,我测试了个900K左右的文件,播放不了


使用SoundPool一般需要下面几个步骤:

1、将音乐文件拷贝到工程下;

2、新建一个SoundPool实例;

3、使用load()方法,让SoundPool实例加载音效资源,该方法会返回一个整型的soundID,在第四步需要用到;

4、使用play()方法播放音效,该方法会返回一个整型的streamID,这个返回值可以保存起来,在需要暂停 /  恢复播放时需要用到。


具体实现以及参数如下:


1、新建一个工程,我取名SoundPoolDemo,在res文件夹下新建一个raw文件夹,将.mp3文件拷贝到其中


2、新建一个SoundPool实例。SoundPool只有一个构造方法,

SoundPool(int maxStreams, int streamType, int srcQuality)

参数如下:

int  maxStreams:在声音池中允许同时存在的声音数量。当池子中的声音超过这个数量时,优先级(后面会提到)最低、或者最早(Oldest,原谅我可怜的翻译水平)放进池中的,将被移除。这个数值不是越大越好,因为越大也就意味着,Android会给你预分配一个更大的空间,如果不需要使用会造成浪费。

int  streamType:声音流的类型,有STREAM_RING、STREAM_MUSIC等等,一般都是使用后者,即AudioManager.STREAM_MUSIC。

int srcQuality:官网解释为“采样速率转化器的质量”(再次原谅我的翻译),这个参数目前没有什么实际意义(可能还没实现这个功能),所以设置什么数值都无所谓,官方建议用0;


3、加载资源方法:

public int load(Context context, int resId, int priority)

参数如下:

Context  context:这个不必多解释,一般都是设置为getApplicationContext()获取

int resId:想要加载的音效资源ID,我用的是R.raw.XXX

int priority:音效播放时的优先级,官方解释这个参数在这个方法中不起作用,建议用1暂时代替(Currently has no effect. Use a value of 1 for future compatibility.)

注:该方法会返回一个soundID,在以后使用中需要使用


4、播放

07-08注:在load声音资源后,并不能立即调用play,否则无法播放声音,因为声音资源还没加载完成,应该给足够时间让它加载完成,比如在onCreate中load,在onclick中play

public final int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
参数如下:

int  soundID:在第3步中提到了。

float  leftVolume:左声道音量大小,这是一个相对值,大小在0.0f - 1.0f之间,具体计算方法为:你想要的声音大小 / 最大音量,比如取值0.8f表示最大音量的80%

float  rightVolume:右声道音量大小,具体如上

int  priority:优先级,值越大优先级越高,0的优先级最低。之前在第3步中也有一个优先级参数,但是那里无效,而现在这里的这个参数是正儿八经有效果的。

int loop:是否需要循环播放,取值不限。其中负数表示无穷循环(官方建议,如果无穷循环,用-1,当然-2、-3等也行),非负数表示循环次数,比如0表示循环0次,也就是播放一次就不再循环了,总共就只播放一次;1则表示循环1次(总共播放2次)。

float  rate:这个参数有点意思,可以理解为播放速率(就是快进、快退啥的),取值0.5f - 2.0f,其中0.5表示播放速度为正常的0.5倍。1表示正常速率播放。



下面开始正式编码:

1、资源文件如下图:


2、布局文件不解释了,只有一个简单的Button。下面是MainActivity.java的代码(总共就一个类)

  1. package com.exam.soundpooldemo;  
  2.   
  3. import android.app.Activity;  
  4. import android.media.AudioManager;  
  5. import android.media.SoundPool;  
  6. import android.os.Bundle;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10.   
  11. public class MainActivity extends Activity {  
  12.   
  13.     Button playButton;  
  14.     SoundPool sp;  
  15.     int soundID_1,soundID_2;  
  16.     int streamID_1,streamID_2;  
  17.       
  18.     @Override  
  19.     protected void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.activity_main);  
  22.           
  23.         sp=new SoundPool(10, AudioManager.STREAM_MUSIC,0);  
  24.         soundID_1=sp.load(getApplicationContext(), R.raw.lingsheng, 1);  
  25.         soundID_2=sp.load(getApplicationContext(), R.raw.moon, 1);  
  26.           
  27.         playButton=(Button)findViewById(R.id.play);  
  28.         playButton.setOnClickListener(new OnClickListener() {  
  29.               
  30.             @Override  
  31.             public void onClick(View v) {  
  32.                 streamID_1=sp.play(soundID_1, 0.8f, 0.8f,1, -1, 1.0f);  
  33.                 streamID_2=sp.play(soundID_2, 0.8f, 0.8f,1, -1, 1.0f);  
  34.             }  
  35.         });  
  36.     }  
  37. }  

发现按下按钮,可以听到两种音效同时播放(因为我的代码中是播放2种)。


尾声:

前面提到播放音效的方法play()会返回一个streamID,这个返回值在暂停 / 恢复时需要用到,比如恢复:

  1. public final void resume (int streamID)  
看到了吧,所以最好用一些变量将他们保存起来。


如果还有不懂的,可以直接参考API:

http://www.android-doc.com/reference/android/media/SoundPool.html
使用SoundPool播放音效 Android SoundPool 音效播放指南 摘要:SoundPool 是 Android 提供的轻量级音频播放类,专为短促音效设计(如按钮点击、游戏音效)。相比 MediaPlayer,它支持多音效并发播放,延迟更低,资源占用更少。本文介绍 SoundPool 的核心使用方法:1) 初始化时设置最大并发数和音频属性;2) 从资源文件或路径加载音效;3) 通过 play() 控制播放参数(音量、循环等);4) 播放过程中的暂停/恢复控制;5) 及时释放资源避免内存泄漏。文中还提供了结合属性动画的完整示例 阅读详情

相关推荐

soundPool播放音效没声音的解决办法并据此研究如何提高音效声音

利用soundPool播放简短的音效是非常有用的,优点是它比mediaPlayer占用资源少,还可以同时播放多个音效等但是缺点就是对于音效的大小和持续时间等都有比较高的要求,据传音效的大小不能超过1M,持续时间不超过5秒才能播放,但经过实际测试,其实超过1M也没什么,但是不能超太多,超太多的话,播放会有问题,一般表现为没有声音,或者有时有声音有时没有,音效持续时间也可以超过5秒,测试时发现持续时间

qiang_xi的专栏 9095

安卓SoundPool播放声音(及具体参数解析)

SoundPool一般用来播放的文件特点有:声音短,文件小,延时慢(不像使用MediaPlayer类播放音乐时,需要等待一段时间),因此常用来播放游戏时的音效,解锁时的铃声等。注意:该类不适合播放太大的文件资源,我测试了个900K左右的文件,播放不了 使用SoundPool一般需要下面几个步骤: 1、将音乐文件拷贝到工程下; 2、新建一个SoundPool实例; 3、使用load(

Programming 9336

Android SoundPool 无声音问题记录

项目场景: APP在交易成功,失败等条件下,需要有声音提示(短促音效,共4个),客户制作并提供了wav格式文件,自然的想到了用SoundPool预加载,之后需要的时候进行播放。 问题描述: SoundPool在一段时间频繁的切换播放后,没有声音: //初始化 public boolean init(Context context){ mSoundMap = new HashMap<>(); mAssetManager = context.getA

lucky_tom的专栏 2032

Android开发之SoundPool音频播放

SoundPool是android原生接口 提供的一个API类,用来播放短暂急促的音频。 构造方法中的三个参数说明:soundPool的方法:加载资源可能需要时间,一般使用: play():播放音频 方法参数说明:pause(int streamID):暂停播放resume(int streamID):恢复播放stop(int streamID):停止播放 文末 如果你想成为架构师,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还

bugyinyin的博客 2395

数字设计实验:自动售货机

本文旨在介绍数字设计实验:自动售货机的设计思路和实现代码

2401_83740084的博客 2227

PLL Performance,Simulation and Design 4th学习笔记——Chapter1

Chapter1:基本PLL概述 VCO:Voltage-Controlled Oscillator压控振荡器,对于给定的一个输入电压,输出特定频率的振荡信号。 PLL:Phase-Locked Loops锁相环,输出特定频率,特定相位的振荡信号。 基本PLL操作和术语 基本模块 基本模块 输入 输出 传输函数 说明 XTAL - 参考频率ϕref\phi_{ref}ϕref​ - 稳定的晶振提供输入参考频率(这里用相位,便于理解鉴相器) R Counter ϕref\phi_{ref

张硕的博客 1551

Android SoundPool.play方法的音量与系统音量的关系

上面的代码根据当前媒体音量和媒体音量的最大值,计算出一个比值传递给play方法,作为左右声道的音量,这样的结果是缩小了实际音量!尤其是(Bug),你在播放开始前将媒体音量调整为0,开始播放后,你将听不到声音!SoundPool使用音效池的概念来管理多个短促的音效,对于需要短促的提示音的场景特别合适。Android开发文档没有SoundPool.play的音量参数做详尽的说明,不过我们自己需要注意哦,否则就容易出现问题。这里要说的就是这个音量值与系统音量的关系。注意,实际的音量效果,是。

xiaowang_lj的博客 1053

CCC数字钥匙Release 3实战:如何用BLE/UWB实现无钥匙进入(附避坑指南)

本文深入解析CCC数字钥匙Release 3标准下BLE/UWB无钥匙进入系统的开发实践,涵盖硬件选型、安全测距协议、时序同步等关键环节,并提供实战调试技巧与安全攻防案例。特别针对BLE芯片配置、UWB模块选型等常见陷阱给出解决方案,帮助开发者高效实现厘米级精度的数字钥匙系统。

weixin_29326909的博客 254

Android音频播放之SoundPool 详解

SoundPool —— 适合短促且对反应速度比较高的情况(游戏音效或按键声等) 下面介绍SoundPool的创建过程: 1. 创建一个SoundPool(构造函数) public SoundPool(int maxStream, int streamType, int srcQuality)maxStream —— 同时播放的流的最大数量streamType —— 流的类型,一般为ST...

weixin_30430169的博客 1179

从设计到实战:手把手教你用SolidWorks完成一个简易离心泵叶轮的水力设计全流程

本文详细介绍了使用SolidWorks进行简易离心泵叶轮水力设计的全流程,涵盖参数计算、水力设计和三维建模等关键步骤。通过实际案例演示,帮助机械设计工程师和学生掌握从理论到实践的转化技巧,特别适合低比转速离心泵叶轮的设计需求。

weixin_30621711的博客 230

新年美食鉴赏——基于注意力机制CBAM的美食101分类

新年美食鉴赏——基于注意力机制CBAM的美食101分类一、数据预处理1.数据集介绍2.读取标签3.统一命名4.整理图片路径5.划分训练集与验证集6.定义美食数据集二、注意力机制1.简介2.卷积块注意力网络——CBAM通道注意力模块CAM空间注意力模块SAM3.将通道、空间注意力模块合并三、基于卷积块注意力模块的ResNet-CBAM1.代码实现2.模型测试3.查看网络结构4.模型训练5.模型预测四、总结与升华个人简介 春节是一年当中最隆重、最盛大的节日,吃得最好的一餐可能就是年夜饭了,想想就很激动呢!随着新

zbp_12138的博客 1万+

Android点击按钮播放音效

你想给你的按钮添加点击的音效吗,盘它~ package com.shanjing.demo01; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.media.AudioManager; import android.media.SoundPoo...

juer2017的博客 7575

【RT-DETR实战】117、华为昇腾CANN部署探索:从模型转换到推理踩坑实录

本文总结了RT-DETR模型在昇腾310B芯片上部署的关键挑战与解决方案。主要遇到四大问题:1)模型转换时需注意ONNX导出设置,建议先固定尺寸验证;2)内存布局差异导致推理异常,需精确匹配NHWC/NCHW格式;3)流水线并发优化中内存复用和异步处理是关键;4)调试阶段需利用专用工具逐层比对。作者提出六条实用建议,包括小尺寸验证、预处理对齐、内存池设计等,强调部署是持续适配过程,需建立完整的测试体系应对工具链迭代。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 191

android SoundPool 音效播放

音效播放:资源文件: res/raw/filename声音池类:SoundPool sp = new SoundPool(同时最大播放个数,AudioManager.STREAM_MUSIC,0);将加载里音频文件的SoundPool添加到一个HashMap中

HappyDelano的专栏 1万+

纳米尺度仿真软件:GROMACS_(3).分子动力学模拟原理

分子动力学(MD)模拟是一种强大的计算方法,通过数值积分牛顿运动方程,追踪粒子在时间上的位置和速度变化,提供关于体系动力学行为的详细信息。选择合适的力场、设置初始条件、应用边界条件、控制温度和压力、选择合适的时间步长、计算能量和力,是 MD 模拟的关键步骤。通过这些步骤,可以对各种化学、生物和材料体系进行模拟和分析,揭示其结构、动力学和热力学性质。高级应用如反应路径模拟和蛋白质折叠研究,进一步扩展了 MD 模拟的应用范围。

kkchenjj的博客 1100

40、5G NR射频要求解析

本文详细解析了5G NR射频相关要求,包括参考灵敏度与动态范围的定义、接收机对干扰信号的抗扰性要求(如阻塞、邻道选择性等)、辐射射频要求在FR1和FR2频段的差异,以及多标准无线电基站(MSR)的发展及其对射频要求的影响。内容涵盖测试模型、干扰场景、具体指标和实现挑战,为理解和应用5G NR射频规范提供了全面指导。

qsc901234的博客 245

android 声音池,Android使用SoundPool实现播放音效

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

weixin_39558391的博客 385

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

weixin_36237054的博客 1105

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android中播放声音的两种方法

作者:高天辰        在Android中,音频、视频等多媒体元素的加入,使得应用程序的用户体验更好。可以说,现在的手机,已经远远不只作为通信工具,更成为娱乐、办公的必备产品。 Android提供了简单的音频API。一般大家使用的是MediaPlayer播放音频,这也是最常见的一种播放声音的工具。这种工具在互联网上有大量的实例,因此在此只做简单的介绍。 对播放行为

移动平台应用软件开发技术 9万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android应用:SoundPool 播放音效

1.SoundPool 简介 开发Android软件中我们可能经常需播放多媒体声音文件,一般使用MediaPlayer类但该类占用资源较多,对于游戏等应用可能不是很适合,SoundPool类在SDK的android.media.SoundPool,顾名思义是声音池的意思。主要播放一些较短的声音片段,可以从程序的资源或文件系统加载,相对于MediaPlayer类可以做到使用较少的CPU资源和较短的

棺材深處 2516

Android SoundPool

SoundPool 一般用来播放密集,急促而又短暂的音效。SoundPool 对象可以看作是一个可以从 APK 中导入资源 或者从文件系统中载入文件的样本集合。它利用 MediaPlayer 服务为音频解码为一个原始16位 PCM流。这个特性使得应用程序可以进行流压缩,而无须忍受在播放音频时解压所带来的 CPU 负载和延时。

liuning1985622的博客 1644

Android Audio——使用SoundPool播放自定义音效

SoundPool 使用音效池的概念来管理多个播放流,如果超过流的最大数目, SoundPool 会基于优先级自动停止先前播放的流,另外,SoundPool 还支持自行设置声音的品质、 音量、 播放比率等参数。rate:指定播放速率:1.0的播放率可以使声音按照其原始频率,而2.0的播放速率,可以使声音按照其 原始频率的两倍播放。maxStreams 同时播放流的最大数量,当播放的流的数目大于此值,则会选择性停止优先级较低的流。加载声音资源,返回一个声音的ID,后面我们可以通过这个ID来播放指定的声音。

liuning1985622的博客 1476

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

SoundPool 一般用来 播放密集,急促而又短暂的音效,比如特技音效:Duang~,游戏用得较多,你也可以为你的 APP 添加上这个音效,比如酷狗音乐进去的时候播放"哈喽,酷狗",其实这个创意还是不错的 间接的让用户知道了当前播放器的音量...

Kevin Learn Android 891

Android使用SoundPool播放音效实例详解

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

yuhang01的博客 1043
上一篇: Git 怎样保证fork出来的project和原project(上游项目)同步更新
下一篇: ADB命令行卸载或删除你的Android设备中的应用
至鳟宝
博客等级 码龄10年 21粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值