Android 怎么播放网页上的音频

发布网友 发布时间:2022-04-22 07:19

我来回答

2个回答

热心网友 时间:2022-05-17 21:28

对播放行为的控制是三个大家非常熟悉的方法: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,表示正常播放。

热心网友 时间:2022-05-17 21:28

不支持播放组件,目前大部分在线音频播放组件都是采用Windows media player或者Real player组件,Android上暂时还无法实现支持。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com