您的位置:首页 > 移动开发 > Android开发

Android中SoundPool播放音频示例

2017-02-22 09:08 453 查看
SoundPool能加载一批声音资源到内存中,并支持同时播放多个音频文件。

创建SoundPool的示例代码如下:

.............
public BeatBox(Context context) {
mAssetManager = context.getAssets();

if (Build.VERSION.SDK_INT >= 21) {
//SDK_INT >= 21时,才能使用SoundPool.Builder创建SoundPool
SoundPool.Builder builder = new SoundPool.Builder();

//可同时播放的音频流
builder.setMaxStreams(MAX_SOUNDS);

//音频属性的Builder
AudioAttributes.Builder attrBuild = new AudioAttributes.Builder();

//音频类型
attrBuild.setLegacyStreamType(AudioManager.STREAM_MUSIC);

builder.setAudioAttributes(attrBuild.build());

mSoundPool = builder.build();
} else {
//低版本的构造方法,已经deprecated了
mSoundPool = new SoundPool(MAX_SOUNDS, AudioManager.STREAM_MUSIC, 0);
}

loadSounds();
}
.............


SoundPool播放音频前,需要先加载对应的音频文件,示例代码如下:

public void soundPoolPreload() throws IOException {
for (Sound sound : mSounds) {
//sound中含有Assets中的音频文件地址
//利用AssetManager的接口得到音频文件的afd
AssetFileDescriptor afd = mAssetManager.openFd(sound.getAssetPath());

//SoundPool加载音频文件后,将返回一个int类型的id
//该id与对应音频文件一一对应
//load接口的后一个参数表示优先级
int soundId = mSoundPool.load(afd, 1);
sound.setSoundId(soundId);

sound.setBeLoaded(true);
}
}


加载完音频后,就可以进行播放,示例代码如下:

public void play(Sound sound) {
//得到音频文件对应的id
Integer soundId = sound.getSoundId();
if (soundId == null) {
return;
}

//参数为:音频ID、左声道音量、右声道音量、优先级、是否循环及播放速率
mSoundPool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f);
}


最后,释放音频的示例代码如下:

public void release() {
mSoundPool.release();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: