android SoundPool

news/2024/7/9 21:15:55 标签: 移动开发

SoundPool主要用于播放时间较短的音效,使用soundPool占用的资源也不会太大。

参考链接

http://o7planning.org/en/10523/playing-sound-effects-in-android-with-soundpool

http://www.cnblogs.com/plokmju/p/android_SoundPool.html

Example

创建一个按键,用于播放声音。打开app时,连续3次播放声音,每次点击按键一次,播放一次声音。

要播放的声音资源放在res/raw/目录中。

package com.example.soundpooltest;

import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    public SoundPool pool;

    Button btn;

    int soundId;

    static final int MAX_STREAMS = 10;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // SDK21以上已经有新的操作方法,原来的方法不推荐。
        // For Android SDK >= 21
        if (Build.VERSION.SDK_INT >= 21 ) {
            AudioAttributes audioAttrib = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_GAME)
                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                    .build();

            SoundPool.Builder builder = new SoundPool.Builder();
            builder.setAudioAttributes(audioAttrib).setMaxStreams(MAX_STREAMS);

            this.pool = builder.build();
        }
        // for Android SDK < 21
        else {
            /*  SoundPool(int maxStreams, int streamType, int srcQuality)
             *  maxStream:soundPoll可以支持的最大声音数量,可以添加多个声音道SoundPool中
             *  streamType:声音类型
             *  srcQuality: 声音品质
             */
            this.pool = new SoundPool(MAX_STREAMS, AudioManager.STREAM_RING, 0);
        }
        /* 添加声音到SoundPool中
         * 第一个参数,上下文参数
         * 第二个参数声音的id,我将声音文件是res/raw/carina.wav
         * 第三个参数声音的优先级,当有多个声音冲突时,优先级高的先播放
         */
        soundId = pool.load(this, R.raw.carina, 1);

        pool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                btn = (Button) findViewById(R.id.play);
                btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        /* int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
                         * soundID: 声音的ID
                         * leftVolume/rightVolume: 左右的音量
                         * priority: 声音优先级
                         * loop: 循环播放次数,0表示不循环, -1是一直循环
                         * rate: 播放的速率
                         */
                        pool.play(soundId, 1.0f, 1.0f, 0, 0, 1.0f);
                    }
                });
                // 加载成功之后循环播放3次
                pool.play(soundId, 1, 1, 0, 3, 1);
            }
        });
    }

    @Override
    protected void onStop()
    {
        super.onStop();
        pool.release();
    }
}

Tony Liu

2017-3-9, Shenzhen


http://www.niftyadmin.cn/n/1748386.html

相关文章

嵌入式系统终端分析

嵌入式系统终端分析 ------------------------------------本文系本站原创,欢迎转载! 转载请注明出处:http://sjj0412.cublog.cn/------------------------------------------ 当我们打开机器或一个嵌入式系统时&#xff0c;我们可能都适应了它会显示信息&#xff0c;我们也…

什么是 jQuery EasyUI

jQuery EasyUI 是一个基于 jQuery 的框架&#xff0c;集成了各种用户界面插件。 jQuery EasyUI 框架提供了创建网页所需的一切&#xff0c;帮助您轻松建立站点。 easyui 是一个基于 jQuery 的框架&#xff0c;集成了各种用户界面插件。easyui 提供建立现代化的具有交互性的 jav…

嵌入式 linux 智能设备应用中 web 支持的实现(一)

嵌入式 linux 智能设备应用中 web 支持的实现(一)由两篇文章组成的系列文章主要阐述如何在嵌入式 Linux 智能设备的应用程序中增加 Web 支持。第 1 部分&#xff0c;我们将会介绍嵌入式 Linux 智能设备开发的现状、Qt 和 WebKit 的概念。并以广告机和手持点菜机等应用为例&…

嵌入式 linux 智能设备应用中 web 支持的实现(二)

嵌入式 linux 智能设备应用中 web 支持的实现(二)由两篇文章组成的系列文章主要阐述如何在嵌入式 Linux 智能设备的应用程序中增加 Web 支持。第 1 部分介绍了如何设备上提供常规 Web 功能的支持。本文是第2部分&#xff0c;将重点介绍如何让在嵌入式设备上运行的 Web 程序能支…

使用LCP建立链路

2.3.5 使用LCP建立链路LCP操作包括链路建立、链路维护和链路终止。1&#xff0e;LCP操作LCP使用3种LCP帧来完成每个LCP阶段的工作。链路建立帧&#xff08;Configure-Request、Configure-Ack、Configure-Nak和Configure-Reject&#xff09;用于建立和配置链路。链路维护帧&…

使用DirecetFB支持Qt4.7.0,加速启动QT

使用DirecetFB支持Qt4.7.0 使用DirecetFB支持Qt4.7.0摘要&#xff1a;如何在ok6410上使用Directfb&#xff0c;并且使用它支持Qt4.7.0关键字&#xff1a;directfb 1.2.8 Qt4.7.0 tslib ok64101&#xff0e;前言&#xff1a;很久之前就已经听说过directFb&#xff0c;但实际上…

html img图片懒加载

2019独角兽企业重金招聘Python工程师标准>>> 参考链接&#xff1a;http://www.w3cways.com/1765.html 转载于:https://my.oschina.net/qimhkaiyuan/blog/856342

Qt WebKit可以做什么

Qt WebKit可以做什么2010-07-13 23:14欢迎看看我的另一个小窝,可能会有意外的惊喜哦^_^ www.devres.info From&#xff1a;http://software.intel.com/zh-cn/blogs/2010/06/08/qt-webkit-qt-webkit/ Author&#xff1a;Dawei Cheng程大伟&#xff08;Intel&#xff09;这个命题…