Android开发中播放声音的两种方法分析

 更新时间:2017年09月01日 10:35:21   作者:pku_android  
这篇文章主要介绍了Android开发中播放声音的两种方法,结合实例形式简单分析了Android音频播放的常用函数、使用方法及相关注意事项,需要的朋友可以参考下

本文实例讲述了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 华为凹口屏适配小结

    这篇文章主要介绍了Android 华为凹口屏适配小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Android 模仿QQ侧滑删除ListView功能示例

    Android 模仿QQ侧滑删除ListView功能示例

    这篇文章主要介绍了Android 模仿QQ侧滑删除ListView功能示例,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • Android如何遍历特定目录下所有文件

    Android如何遍历特定目录下所有文件

    这篇文章主要为大家详细介绍了Android如何遍历特定目录下所有文件的代码,供大家参考,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android自定义Dialog实现加载对话框效果

    Android自定义Dialog实现加载对话框效果

    这篇文章将介绍如何定制当今主流的对话框,通过自定义dialog实现加载对话框效果,具体实现代码大家通过本文学习吧
    2018-05-05
  • Android EditText限制输入字数的方法

    Android EditText限制输入字数的方法

    这篇文章主要介绍了Android EditText限制输入字数的方法,涉及Android针对EditText文本与字符串操作相关技巧,需要的朋友可以参考下
    2016-01-01
  • Android实现调用系统分享功能示例的总结

    Android实现调用系统分享功能示例的总结

    这篇文章主要介绍了通过Android调用系统分享文本信息、单张图片、多个文件和指定分享到微信、QQ,同时分享图片和文字的功能示例,小编觉得挺不错,一起跟随小编过来看看吧
    2018-05-05
  • Android仿qq顶部消息栏效果

    Android仿qq顶部消息栏效果

    这篇文章主要介绍了Android仿qq顶部消息栏效果,需要的朋友可以参考下
    2018-04-04
  • 详解Android 蓝牙通信方式总结

    详解Android 蓝牙通信方式总结

    这篇文章主要介绍了详解Android 蓝牙通信方式总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2013-11-11
  • activity 获取rootView 设置backGroundColor的方法

    activity 获取rootView 设置backGroundColor的方法

    下面小编就为大家带来一篇activity 获取rootView 设置backGroundColor的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 使用Android原生WebView+Highcharts实现可左右滑动的折线图

    使用Android原生WebView+Highcharts实现可左右滑动的折线图

    折线图是Android开发中经常会碰到的效果,但由于涉及自定义View的知识,对许多刚入门的小白来说会觉得很高深,下面这篇文章主要给大家介绍了关于如何使用Android原生WebView+Highcharts实现可左右滑动的折线图的相关资料,需要的朋友可以参考下
    2022-05-05

最新评论