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如何实现倒计时_时间函数如何精确控制