`

Android中播放声音的两种方法

 
阅读更多

在Android中,音频、视频等多媒体元素的加入,使得应用程序的用户体验更好。可以说,现在的手机,已经远远不只作为通信工具,更成为娱乐、办公的必备产品。

 

Android提供了简单的音频API。一般大家使用的是MediaPlayer播放音频,这也是最常见的一种播放声音的工具。这种工具在互联网上有大量的实例,因此在此只做简单的介绍。

 

对播放行为的控制是三个大家非常熟悉的方法:start()、stop()和pause()。

通过static MediaPlayer create(Context, Uri)这个方法,可以获得一个新创建的MediaPlayer对象。

在播放过程中,有几个可以监听播放过程的监听器,如:

n setOnCompletionListener(MediaPlayer.OnCompletionListener listener),监听音频播放结束;

n setOnErrorListener(MediaPlayer.OnErrorListener listener),监听播放过程中的错误事件;

n 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中播放声音的两种方法MediaPlayer 和SoundPool

    在Android平台上,开发人员可以利用两种主要的工具来播放...以上是对`MediaPlayer`和`SoundPool`在Android中播放声音的详细介绍。在实际操作中,可以通过`SoundPoolDemo`这样的示例代码来更好地理解和实践这两种方法。

    一种Android视频播放的双屏异显实现方法及系统.docx

    一种 Android 视频播放的双屏异显实现方法及系统 本资源摘要信息对应的技术领域是 Android 视频播放领域,具体来说是实现 Android 视频播放的双屏异显方法及系统。 knowledge point 1:Android 视频播放技术 ...

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

    Android开发中播放声音的两种方法分析,主要介绍了Android开发中播放声音的两种方法,结合实例形式简单分析了Android音频播放的常用函数、使用方法及相关注意事项。 一、MediaPlayer播放声音 MediaPlayer是Android...

    Android保活之循环播放无声音乐

    开发者可以通过`MediaPlayer`创建实例,设置无声音频源,调用`setLooping(true)`使其循环播放,并使用`start()`方法启动播放。 4. **BroadcastReceiver** 为了监控音乐播放服务的状态,开发者通常会创建一个`...

    海康威视 Android SDK网络库+播放库

    - **预览与播放模式**:提供预览和播放两种模式,满足不同场景需求。 3. **集成步骤** 在Android项目中集成海康威视SDK,通常需要以下步骤: - **引入库**:将提供的HC_Android_Demo_Monitor库导入项目,配置...

    在Android上播放声音及控制源码

    今天在做一款应用,想在里面添加一些音乐来增加用户体验,于是否翻看Android API,发现了其中有一个 MediaPlayer 类来控制媒体的音频播放,使用它有两种方式来达到声音播放的效果: MediaPlayer实例.setDataSource...

    android开发随声音大小变化的自定义view

    在Android Studio中,我们可以利用Java或Kotlin这两种主要的编程语言来创建自定义View。 1. 创建自定义View类: - 首先,我们需要创建一个新的Java类,继承自`View`或`ViewGroup`。例如,我们可以创建一个名为`...

    Android音频系统AudioTrack使用方法详解

    Android音频系统AudioTrack使用方法详解 Android音频系统中,...AudioTrack是Android音频系统中播放音频的重要组件,了解AudioTrack的使用方法和工作原理,可以帮助开发者更好地使用AudioTrack进行音频播放。

    Android来电时停止音乐播放的流程学习

    在Android系统中,针对来电时音乐播放的控制机制可以分为以下两种典型场景: 1. **电话处于响铃模式时**: - 当有来电时,系统首先会自动暂停正在后台播放的音乐。 - 接着,系统会播放来电铃声,并展示来电界面...

    Android-V-VisualizerView-音频随音谱率动跳动动画效果

    在Android中,有两种主要的动画框架:Property Animation和View Animation。鉴于我们要实现的是视图的动态变化,Property Animation更适合,因为它能直接改变View的属性,如大小、位置或颜色。我们可以使用...

    Android中一种效果奇好的混音方法详解

    Android 中一种效果奇好的混音方法详解 Android 中一种效果奇好的混音方法详解主要介绍了在 Android 中一种效果奇好的混音方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。...

    Android-语音录音以及播放

    以下是对这两种语音处理格式的详细解释,以及如何在Android环境中进行操作。 首先,我们来了解一下语音的文件格式。在Android中,常见的语音文件格式有WAV、MP3、AAC和AMR等。WAV是无损格式,数据量大但音质好;MP3...

    利用Java声音技术实现声音的采集与播放.

    在当今的IT行业,声音技术的应用变得越来越广泛,它涉及到的声音的采集与播放是多媒体应用中不可或缺的组成部分。Java作为一种流行的编程语言,其声音技术为开发者提供了方便的声音处理能力。接下来,我们将详细探讨...

    android webview autoplay video

    在Android的WebView中,我们可以通过加载包含`<video>`标签的网页,实现在应用中播放视频。 二、开启自动播放 默认情况下,由于节省流量和避免用户被打扰的考虑,Android的WebView会禁止视频的自动播放。要启用自动...

    Android实现直接播放麦克风采集到的声音

    本篇文章将深入探讨如何在Android中实现直接播放麦克风采集到的声音,涉及的关键技术包括AudioRecord和AudioTrack类的使用以及相关的音频配置。 AudioRecord是Android系统提供的一个用于录制音频的API,它可以将...

    android 后台音乐播放器

    Android提供了`startService()`和`bindService()`两种启动Service的方式,项目中的"BindService"可能指的是后者,通过绑定服务,可以实现应用和Service之间的通信,比如更新UI上的播放状态。 3. **MediaPlayer**:...

    Android 蓝牙 音频焦点(Audio Focus)——卡音,多年安卓开发经验,从实际项目中获取到的经验,对安卓开发者非常有

    在Android平台上,音频焦点(Audio Focus)是一个至关重要的概念,它涉及到多应用音频播放的协调,尤其是在涉及蓝牙设备如蓝牙耳机或扬声器时。当多个应用试图同时播放音频时,音频焦点机制确保了音频流之间的和谐共存...

    完整版android视频播放器

    11. **渲染方式**:Android提供了`SurfaceView`和`TextureView`两种渲染视频的方式,前者适合简单高效的显示,后者支持更复杂的图形变换。 12. **生命周期管理**:在Activity或Fragment的生命周期中,必须正确处理...

    Android中文输入法实现-杨武

    IMF即输入方法框架(Input Method Framework),它是Android系统中用于管理输入法的核心组件。了解其结构对于开发自定义输入法至关重要。IMF的架构涉及多个层次,包括但不限于`android.view.ViewRoot`和`...

Global site tag (gtag.js) - Google Analytics