Android SoundPool

博客围绕Android SoundPool展开,虽暂无具体内容,但可推测是关于其在Android开发中的相关知识,如功能、使用方法等信息技术方面内容。
package com.example.media.audio;

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

import com.example.media.R;


public class SoundPoolActivity extends AppCompatActivity {
    private static final String TAG = SoundPoolActivity.class.getSimpleName();

    private SoundPool mSoundPool;
    private int mSoundId;

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

        // SoundPool一般用来播放的文件特点有:声音短,文件小,延时慢。因此常用来播放游戏时的音效,解锁时的铃声等。

        // SoundPool(int maxStreams, int streamType, int srcQuality):
        // maxStreams:在声音池中允许同时存在的声音数量。当声音池中的声音超过这个数量时,
        //             优先级最低或者最早放进池中的声音将会被移除。这个数值越大则Android会给你预分配
        //             更大的空间,根据需要设置声音数量避免空间浪费。
        // streamType:声音流的类型,有STREAM_RING、STREAM_MUSIC等,一般使用STREAM_MUSIC。
        // srcQuality:采样速率转化器的质量,设置为0。

        // load(Context context, int resId, int priority):
        // priority:音效播放时的优先级,官方解释这个参数在这个方法中不起作用,建议用1暂时代替。

        // play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate):
        // soundID:在调用load()方法时返回的id
        // leftVolume:左声道音量大小,这是一个相对值,大小在0.0f-1.0f之间。具体计算方法为:
        //             你想要的声音大小 / 最大音量,比如取值0.8f标识最大音量的80%。
        // rightVolume:同上。
        // priority:优先级,值越大优先级越高,0的优先级最低。
        // loop:是否需要循环播放,其中负数表示无穷循环(如-1),非负数表示循环次数(如0表示播放一次,1表示循环1次)
        // rate:播放速率,取值0.5f-2.0f,其中0.5f表示播放速度为正常的0.5倍,1表示正常速率播放。

        mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
        mSoundId = mSoundPool.load(getApplicationContext(), R.raw.iphone, 1);
        // .... load多个文件就会在play时同时播放多个音频文件

        mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                Log.v(TAG, "onLoadComplete, sampleId = " + sampleId + ", status = " + status);
            }
        });
        findViewById(R.id.btn_play_sound).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 在调用load()之后不能立即调用play(),否则无法播放声音,因为此时声音正在加载
                mSoundPool.play(mSoundId, 0.8f, 0.8f, 1, -1, 1.0f);
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        mSoundPool.resume(mSoundId);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSoundPool.pause(mSoundId);
    }

    @Override
    protected void onStop() {
        super.onStop();
        mSoundPool.stop(mSoundId);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mSoundPool.release();
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值