Android开发中播放声音的两种方法分析
发布时间 - 2026-01-11 03:03:55 点击率:次本文实例讲述了Android开发中播放声音的两种方法。分享给大家供大家参考,具体如下:

在Android中,音频、视频等多媒体元素的加入,使得应用程序的用户体验更好。可以说,现在的手机,已经远远不只作为通信工具,更成为娱乐、办公的必备产品。
Android提供了简单的音频API。一般大家使用的是MediaPlayer播放音频,这也是最常见的一种播放声音的工具。这种工具在互联网上有大量的实例,因此在此只做简单的介绍。
对播放行为的控制是三个大家非常熟悉的方法:start()、stop()和pause()。
通过static MediaPlayer create(Context, Uri)这个方法,可以获得一个新创建的MediaPlayer对象。
在播放过程中,有几个可以监听播放过程的监听器,如:
setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
监听音频播放结束;
setOnErrorListener(MediaPlayer.OnErrorListener listener)
监听播放过程中的错误事件;
setOnPreparedListener(MediaPlayer.OnPreparedListener listener)
当prepare()被调用时触发。
然而,使用MediaPlayer播放时,也有一些问题。我们知道MediaPlayer在创建和销毁时都会耗费大量的系统资源,且创建和销毁的时间相对较长。此外,如果我们需要在同一时刻播放很多声音,MediaPlayer是不支持的。
因此,我们需要一个更加轻量级的声音播放工具。
Android提供了另外一种,叫做SoundPool,它适合播放那些需要反复播放,但时间较短的音效。它支持同时播放多种声音,这些声音在系统开始时会加载到列表中,按照这些声音的id,我们可以调用这些音效。
下面我们进入一个实例看看SoundPool到底是怎么工作的。
例如,现在在一个五子棋游戏中,我们需要在棋子落盘的时候播放一段声音。我们可以利用SoundPool,因为它时间很短,而且需要反复播放,并且我们不希望声音占用太大资源。
先看看代码:
private SoundPool soundPool; soundPool= newSoundPool(10,AudioManager.STREAM_SYSTEM,5); soundPool.load(this,R.raw.collide,1); soundPool.play(1,1, 1, 0, 0, 1);
代码非常简单,第一行是声明了一个SoundPool对象,这个一般是作为类的成员属性出现的。第二行将soundPool实例化,第一个参数为soundPool可以支持的声音数量,这决定了Android为其开设多大的缓冲区,第二个参数为声音类型,在这里标识为系统声音,除此之外还有AudioManager.STREAM_RING以及AudioManager.STREAM_MUSIC等,系统会根据不同的声音为其标志不同的优先级和缓冲区,最后参数为声音品质,品质越高,声音效果越好,但耗费更多的系统资源。
第三行,系统为soundPool加载声音,第一个参数为上下文参数,第二个参数为声音的id,一般我们将声音信息保存在res的raw文件夹下,如下图所示。
第三个参数为声音的优先级,当多个声音冲突而无法同时播放时,系统会优先播放优先级高的。
第四行就是播放了,第一个参数为id,id即为放入到soundPool中的顺序,比如现在collide.wav是第一个,因此它的id就是1。第二个和第三个参数为左右声道的音量控制。第四个参数为优先级,由于只有这一个声音,因此优先级在这里并不重要。第五个参数为是否循环播放,0为不循环,-1为循环。最后一个参数为播放比率,从0.5到2,一般为1,表示正常播放。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android资源操作技巧汇总》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
# Android
# 播放
# 声音
# android系统在静音模式下关闭camera拍照声音的方法
# Android中通知Notification使用实例(振动、灯光、声音)
# Android如何为按键添加声音
# Android中默认系统的声音/大小修改和配置详解
# 第一个
# 操作技巧
# 第二个
# 在这里
# 为其
# 第三个
# 过程中
# 的是
# 进阶
# 加载
# 这一
# 互联网
# 也有
# 相关内容
# 多个
# 在此
# 可以说
# 是怎么
# 两种
# 系统资源
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在腾讯云服务器上快速搭建个人网站?
Laravel怎么连接多个数据库_Laravel多数据库连接配置
微信小程序 配置文件详细介绍
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Laravel如何配置和使用缓存?(Redis代码示例)
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
怎么用AI帮你为初创公司进行市场定位分析?
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何在Windows 2008云服务器安全搭建网站?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Java垃圾回收器的方法和原理总结
无锡营销型网站制作公司,无锡网选车牌流程?
如何在IIS中新建站点并解决端口绑定冲突?
昵图网官网入口 昵图网素材平台官方入口
Laravel如何使用Collections进行数据处理?(实用方法示例)
活动邀请函制作网站有哪些,活动邀请函文案?
如何在云主机上快速搭建多站点网站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
如何构建满足综合性能需求的优质建站方案?
百度浏览器如何管理插件 百度浏览器插件管理方法
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
如何批量查询域名的建站时间记录?
Mybatis 中的insertOrUpdate操作
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
如何在IIS服务器上快速部署高效网站?
Python文件异常处理策略_健壮性说明【指导】
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
node.js报错:Cannot find module 'ejs'的解决办法
打造顶配客厅影院,这份100寸电视推荐名单请查收
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
如何在Windows服务器上快速搭建网站?
如何在Windows环境下新建FTP站点并设置权限?
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
韩国服务器如何优化跨境访问实现高效连接?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Laravel怎么调用外部API_Laravel Http Client客户端使用
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
如何获取免费开源的自助建站系统源码?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
详解jQuery停止动画——stop()方法的使用
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
千库网官网入口推荐 千库网设计创意平台入口
JavaScript如何实现倒计时_时间函数如何精确控制

