android多媒体——4步学会SoundPool

之前学习过了MediaPlayer用于播放手机音乐,但是在手机中很多的提示音并不是使用MediaPlayer来播放的比如短信铃声,通知铃声,android中使用SoundPool来播放小的音频文件;



下面一起学习SoundPool的使用

【1】先搭界面设置一个按钮用于播放开始

【2】得到SoundPool

查看API,得知要得到SoundPool根据版本不同有两种方式

21版本以前使用

SoundPool pool =new SoundPool(int maxStreams, int streamType, int srcQuality)



21版本之后:使用Builder来生成



【3】调用load方法加载音频

【4】调用play方法

public final int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)



参数介绍

Parameters

soundID a soundID returned by the load() function

leftVolume left volume value (range = 0.0 to 1.0)左声道

rightVolume right volume value (range = 0.0 to 1.0)右声道

priority stream priority (0 = lowest priority)优先级

loop loop mode (0 = no loop, -1 = loop forever)循环与否

rate playback rate (1.0 = normal playback, range 0.5 to 2.0)播放返回的速度

注意事项

如果你的没有声音,那是因为加载音频需要时间,不要把load和play放在一起

也不要使线程休眠,以免阻碍主线程

下面是源码

public class MainActivity extends Activity {
    private Button mButton;
    private SoundPool pool = null;
    private int id;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton = (Button) findViewById(R.id.button_sound);
        //必须放在外面因为加载音频需要时间不然会没有声音
        id= initSound();
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                playSound();
            }
        });

    }

    private void playSound() {

        //public final int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
//         Parameters
//                soundID   a soundID returned by the load() function
//                leftVolume    left volume value (range = 0.0 to 1.0)左声道
//                rightVolume   right volume value (range = 0.0 to 1.0)右声道
//                priority  stream priority (0 = lowest priority)优先级
//                loop  loop mode (0 = no loop, -1 = loop forever)循环与否
//                rate  playback rate (1.0 = normal playback, range 0.5 to 2.0)播放返回的速度
        pool.play(id, 1, 1, 0, -1, 1);
    }

    public int initSound() {
        if (Build.VERSION.SDK_INT > 21) {
            SoundPool.Builder builder = new SoundPool.Builder();
            builder.setMaxStreams(2);
            AudioAttributes.Builder builder1 = new AudioAttributes.Builder();
            builder1.setLegacyStreamType(AudioManager.STREAM_MUSIC);
            builder.setAudioAttributes(builder1.build());
            pool = builder.build();

        } else {
            //21版本以前使用SoundPool(int maxStreams, int streamType, int srcQuality)
            pool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
        }
        return  pool.load(getApplicationContext(), R.raw.outgoing, 1);

    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-08 05:43:28

android多媒体——4步学会SoundPool的相关文章

android多媒体——6步学会MediaRecorder录音

MediaRecorder即录音 要想使用首先查看API,可以看到MediaRecorder的生命周期 API不仅给了生命周期图,还有例子如下 MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.set

Android多媒体开发介绍(转)

Android多媒体开发介绍 转自:http://blog.csdn.net/reiliu/article/details/9060557 一.       多媒体架构 基于第三方PacketVideo公司的OpenCORE来实现,支持所有通用的音频/视频/静态图像格式,包括:MPEG4.H.264.MP3.AAC.AMR.JPG.PNG.GIF等.从功能上分为两部分,一是音/视频的回放(PlayBack),二是音视频的纪录(Recorder). CODEC(编解码器)使用OpenMAX 1L

android多媒体框架学习 详解 最新版本

一:多媒体框架概述   jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了!也体现了media 在整个android系统中的重要性!framework/av下都是些C/C++代码(libmedia,libmediaplayerservice,libstagefright),jni和 java api 还是保留在原来的位置,改革还不够彻底,但还是迈出了这一步,以后维护能更好的进

一步一步学会puppet(二)--模块和类

上一篇主要介绍了puppet的基本工作原理和资源的相关初步使用: 这一篇主要介绍puppet中很重要的2个概念:模块和类: =================================================================== 1 模块 1.1 需求 1.2 定义 1.3 详细说明 1.4 模块的目录组织结构 1.5 模块管理 2 类 2.1 定义 2.2 详细说明 2.3 类的分类 2.4 类的声明 2.5 实例 ========================

一步一步学会puppet(三)--节点和模板

这篇主要介绍puppet中需要理解的2个重要概念:节点和模板: =================================================================== 1 节点 1.1 定义 1.2 详细说明 1.3 实例 2 模板 2.1 定义 2.2 详细说明 2.3 模板文件的语法 2.4 模板文件实例 2.5 使用模板文件生成实际配置文件 ===========================================================

一步一步学会puppet(四)--master/agent模型

这篇博文主要介绍puppet在实际生产环境下的master/agent模型的使用: =================================================================== 1 原理介绍 1.1 原理图 1.2 详细说明 2 配置实例 2.0 准备 2.1 master配置 2.2 agent配置 2.3 master签署证书 2.4 agent一次完整的同步案例 ===========================================

一步一步学会puppet(一)

简介 puppet是一种Linux.Unix.windows平台的集中配置管理系统: 使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统服务等,puppet把这些系统实体称之为资源: puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系 puppet的基础架构 puppet是集中式的配置管理工具,通过自有配置语言对节点进行目标状态定义,并能够基于网络实现目标状态的维护: puppet的工作模型 puppet通过声明性.基于模块的方法进行IT自动化

Android多媒体框架图

Android多媒体整体架构图 MediaPlayer框架图 Camera框架图 SoundRecorder框架图 VideoCamera框架图 OpenCore与Skia ALSA Audio框架图 Video Overlay框架图 Camera HAL演化图

Android多媒体框架对音乐播放器的支持

下面介绍一下Andriod多媒体框架对开发者提供的支持有哪些. 1. MediaScannerReceiver 这个广播接收者在接收到ACTION_BOOT_COMPLETED.ACTION_MEDIA_MOUNTED或 ACTION_MEDIA_SCANNER_SCAN_FILE 广播时对SD卡中的图片.音乐和视频文件进行了扫描,因为扫描不能影响用户使用,这里启动了一个服务MediaScannerService,扫描的文件类型如下: /* Audio */ addFileType("MP3&q