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();
}
}
Android SoundPool
最新推荐文章于 2023-05-31 19:03:41 发布
