加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 应用 > 正文

Android多媒体功能开发(7)——使用SoundPool类播放音频

发布时间:2022-11-21 14:31:57 所属栏目:应用 来源:转载
导读: 使用SoundPool的基本流程是:创建一个SoundPool对象、载入要播放的音频、播放某个音频、停止播放某个音频。
一个SoundPool对象可以载入多个音频音频应用,每个音频载入后对应一个SoundID。

使用SoundPool的基本流程是:创建一个SoundPool对象、载入要播放的音频、播放某个音频、停止播放某个音频。

一个SoundPool对象可以载入多个音频音频应用,每个音频载入后对应一个SoundID。播放某个音频时用SoundID指定要播放的音频,并返回播放该音频的ChannelID。要停止播放某个音频,需要通过其ChannelID,注意不是SoundID!使用SoundPool播放音频的示意图如下:

做音频底层还是应用_布鲁斯应用音频_音频应用

下面用SoundPool编写一个播放音效的应用,可以单次、循环播放音效,界面如下:

布鲁斯应用音频_做音频底层还是应用_音频应用

有的设备上循环播放参数无效,可以采用Thread来实现。应用主要代码如下:

布鲁斯应用音频_做音频底层还是应用_音频应用

SoundPool类的主要方法包括:

1)构造函数:SoundPool(int maxStreams, int streamType, int srcQuality)。第一个参数maxStreams指定同时支持多少个声音,即Channel数量;第二个参数streamType指定声音类型,一般游戏中用AudioManager.STREAM_MUSIC;第三个参数srcQuality指定声音品质,目前没用,给0即可。

2)载入音频的load方法一共有4个,这里只列出最常用的两个:

int load(Context context, int resld, int priority):从 resld 所对应的资源加载音频

int load(String path, int priority):从path对应的文件去加载音频

priority参数,目前没用,Android建议设为1,保持和未来的兼容性;加载音频之后都会返回该声音的ID,以后可以通过ID来播放指定音频。

3)播放音频:int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)。第一个参数soundID指定播放哪个声音;第二三个参数leftVolume、rightVolume指定左、右的音量;第四个参数priority指定播放声音的优先级,数值越大,优先级越高;第五个参数loop指定是否循环,0为不循环,-1为循环;经测试目前无效;第六个参数rate指定播放的比率,数值可从0.5到2, 1为正常比率;返回播放该音频的ChannelID,也叫StreamID,用此ID来对播放进行控制,如停止、暂停等。

4)卸载音频:boolean unload(int soundID)。卸载soundID指定的音频,成功返回true。

5)释放所有资源:void release()。

例子的完整代码如下:

public class MainActivity extends AppCompatActivity {
    int[] soundResId = {R.raw.fly, R.raw.fire, R.raw.explode};	// 音频资源
    SoundPool soundPool;
    int[] soundId;		// soundPool为每个装入的音频资源生成的SoundID
    int flyStreamId;	// soundPool播放fly音频时使用的Channel,通过Channel控制音效播放
    PlayThread playThread;	// 因为SoundPool的循环播放功能无效,所以用Thread来实现循环播放
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        setContentView(ll);
        soundId = new int[soundResId.length];
        soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 100);	// 创建SoundPool对象
        for(int i=0; i

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!