前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发(44) 使用了 SoundPool 播放提示音

Android开发(44) 使用了 SoundPool 播放提示音

作者头像
张云飞Vir
发布2020-03-16 15:41:06
1.3K0
发布2020-03-16 15:41:06
举报
文章被收录于专栏:写代码和思考写代码和思考

概述 SoundPool

一个声音播放的辅助类,从名字可以看出,它具有 “池”的能力(缓存),它先加载声音文件到内存,以支持多次播放声音文件。

特点

  • SoundPool适合 短小的 声音文件
  • SoundPool适合播放 “需要多次播放的提示音”,比如在 一些常用的 请登录,请点击什么的
  • 相比mediaPlayer,耗用资源更少
  • 支持 同时 播放多个声音

使用方法

创建实例

代码语言:javascript
复制
    mSoundPool = new SoundPool(1, AudioManager.STREAM_ALARM, 0);
    soundPoolMap = new HashMap<Integer, Integer>(); //这里我创建一个 hash 表,用于记录加载过的声音的ID,一般我们会定义一个常量作为检索该声音的KEY

加载声音文件

代码语言:javascript
复制
    soundPoolMap.put(KEY_SOUND_A1, mSoundPool.load(this, R.raw.a1, 1));
        soundPoolMap.put(KEY_SOUND_A2, mSoundPool.load(this, R.raw.a2, 1));//注意,这里 hash表里 记录

播放声音文件

代码语言:javascript
复制
    mSoundPool.play(soundPoolMap.get(KEY_SOUND_A1), 1, 1, 0, 0, 1); //注意,这里从hash表里取出了具体的ID

注册一个监听器,在加载声音完毕的时候获得消息

代码语言:javascript
复制
    mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
                @Override
                public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                    alert(" " + sampleId);
                }
            });

代码

下面是完整的类的代码

代码语言:javascript
复制
package demo.vir56k.soundpooldemo;

import android.media.AudioManager;
import android.media.SoundPool;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import java.util.HashMap;

public class MainActivity extends AppCompatActivity {
    public static final int KEY_SOUND_A1 = 1;
    public static final int KEY_SOUND_A2 = 1;

    SoundPool mSoundPool;
    private HashMap<Integer, Integer> soundPoolMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSoundPool = new SoundPool(1, AudioManager.STREAM_ALARM, 0);
        mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                alert(" " + sampleId);
            }
        });
        soundPoolMap = new HashMap<Integer, Integer>();
        soundPoolMap.put(KEY_SOUND_A1, mSoundPool.load(this, R.raw.a1, 1));
        soundPoolMap.put(KEY_SOUND_A2, mSoundPool.load(this, R.raw.a2, 1));
    }

    private void alert(String s) {
        Log.i("Alert: ", s + "");
    }

    public void onClickView(View view) {
        if (view.getId() == R.id.button) {
            mSoundPool.play(soundPoolMap.get(KEY_SOUND_A1), 1, 1, 0, 0, 1);
        }
        if (view.getId() == R.id.button2) {
            mSoundPool.play(soundPoolMap.get(KEY_SOUND_A2), 1, 1, 0, 0, 1);
        }
    }

}

下载:https://github.com/vir56k/demo/tree/master/SoundPoolDemo

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述 SoundPool
  • 特点
  • 使用方法
    • 创建实例
      • 加载声音文件
        • 播放声音文件
          • 注册一个监听器,在加载声音完毕的时候获得消息
          • 代码
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档