Android中使用SoundPool来播放音频

今天找素材重做FlappyBird时学习了一下怎样为应用设置背景音频,发现通过封装SoundPool类就能够非常好的做到这一点。

SoundPool类比較适合播放一些类似游戏音效这样的比較短促并且较小的音频流,并且它支持同一时候播放多个音频流,而比較大的音频更适合用MediaPlayer来播放。

大致解说一下SoundPool类使用时的基本使用方法:

1. 把要用到的音频资源通过load()方法载入.

2. 通过创建的SoundPool对象的setOnLoadCompleteListener()方法创建并传入SoundPool.OnLoadCompleteListener对象。重载public void onLoadComplete(SoundPool arg0, int arg1, int arg2)方法来检查音频的载入是否成功.

3. 通过play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)方法来播放音频流.soundID是要播放的音频号,priority是音频的播放优先级,loop是播放遍数(-1是无限循环播放)。rate是播放速率~

以下是重做FlappyBird时封装的一个播放音频的类。相比所实用MediaPlayer。这样的方法播放音效会更加高效:

package com.example.flappy.util;

import java.util.HashMap;

import android.media.AudioManager;
import android.media.SoundPool;
import android.widget.Toast;

import com.example.flappy.MainActivity;
import com.example.flappy.R;

/*
 * SoundPlayer负责音频的播放
 */
public class SoundPlayer {
	private SoundPool soundPool;
	private MainActivity mainActivity;
	private HashMap<Integer, Integer> map;

	public SoundPlayer(MainActivity mainActivity) {
		this.mainActivity = mainActivity;
		this.map = new HashMap<Integer, Integer>();
		// SoundPool的构造函数的三个參数分别数:
		// 1.同一时候播放的流的最大数量(是同一时候播放哦)
		// 2.流的类型
		// 3.转化质量
		this.soundPool = new SoundPool(8, AudioManager.STREAM_MUSIC, 0);
		this.soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
			@Override
			public void onLoadComplete(SoundPool arg0, int arg1, int arg2) {
				// 音频载入失败时触发
				// 千万要记得音频是可能会载入失败的,一定要在这里对其做对应的处理
			}
		});
	}

	public void initSounds() {
		this.map.put(1, this.soundPool.load(this.mainActivity, R.raw.flappy, 1));
		this.map.put(2, this.soundPool.load(this.mainActivity, R.raw.pass, 1));
		this.map.put(3, this.soundPool.load(this.mainActivity, R.raw.hit, 1));
		this.map.put(4, this.soundPool.load(this.mainActivity, R.raw.die, 1));
		this.map.put(5, this.soundPool.load(this.mainActivity, R.raw.swooshing, 1));
		// 就像这样把你的APP要用到的声音都载入进来
	}

	// 在须要播放音频的地方把要播放的是哪首和要播放的遍数传进去
	public void playSound(int sound, int loop) {
		this.soundPool.play(sound, 1, 1, 1, loop, 1.0f);
	}

	public void release() {
		this.soundPool.release();
	}
}

转载请注明出处:http://blog.csdn.net/gophers

时间: 2024-08-11 11:45:03

Android中使用SoundPool来播放音频的相关文章

Android中的soundpool小结

之前只知道android中可以用mediaplayer播放音乐,原来今天才发现 可以用soundpool,用soundpool可以播一些短的反应速度要求高的声音, 比如游戏中的爆破声,而mediaplayer适合播放长点的. 1. SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的操作.但是这里如果音效文件过大没有载入完成,我们调用play方法时可能产生严重的后果,这里Android SDK提供了一个SoundPool.OnLoadCompleteListener类来帮助我们了

Android 使用系统的Activity播放音频文件 intent

Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File("/sdcard/record.wav")), "audio"); startActivity(intent); 这里可以播放wav.amr.MP3等

Android音视频之AudioTrack播放音频(二)

前一篇讲了如何录制wav音频文件,本篇就来讲讲如何播放wav文件,这里就是使用AudioTrack来播放音频,确切的说是播放pcm格式数据,使用AudioTrack播放也没什么难度,主要就是将数据写入到AudioTrack中就可以了,先贴代码 package cn.sskbskdrin.record.audio; import android.media.AudioManager; import android.media.AudioTrack; import java.io.FileNotFo

【转】Android播放音频MediaPlayer的几种方式介绍

接下来笔者介绍一下Android中播放音频的几种方式,android.media包下面包含了Android开发中媒体类,当然笔者不会依次去介绍,下面介绍几个音频播放中常用的类: 1.使用MediaPlayer播放音频 MediaPlayer的功能很强大,下面附上一张该类封装音频的生命周期图: MediaPlayer支持AAC.AMR.FLAC.MP3.MIDI.OGG.PCM等格式,MediaPlayer可以通过设置元数据和播放源来音频. 1.1播放Raw文件夹下面音频的元数据 //直接创建,不

android学习之播放音频

今天学习了如何通过android中的MediaPlayer方法进行音频的播放,具体代码如下. 首先新建一个android工程,将预先录制好的音频music.wma放在res/raw目录下,在布局文件中加入一个Button,当按下Button时音频响起. 1 public class TestAudio extends ActionBarActivity implements OnClickListener { 2 3 private MediaPlayer mp; 4 @Override 5 p

使用系统类播放音频和视频

iOS的系统类中提供了用于播放音频和视频的类,支持常见的多媒体格式 ? 框架支持:MediaPlayer.framework, ? ?AVFoundation.framework 1.音频 类: AVAudioPlayer ? 支持格式:?AAC,AMR,ALAC,iLBC,IMA4,PCM,MP3 初始化方法: initWithContentOfURL: error: initWithDate: error:? ? file type hint:是一个在AVMEdiiaFormat.h中声明的

Android中的音频播放(MediaPlayer和SoundPool)

Android中音频和视频的播放我们最先想到的就是MediaPlayer类了,该类提供了播放.暂停.停止.和重复播放等方法.该类位于android.media包下,详见API文档.其实除了这个类还有一个音乐播放类那就是SoundPool,这两个类各有不同分析一下便于大家理解 MediaPlayer: 此类适合播放较大文件,此类文件应该存储在SD卡上,而不是在资源文件里,还有此类每次只能播放一个音频文件. 此类用法如下: 1.从资源文件中播放 MediaPlayer   player  =   n

Android中的音频处理------SoundPool,MediaRecorder,MediaPlayer以及RingStone总结

用Soundpool可以播一些短的反应速度要求高的声音, 比如游戏中的爆破声, 而Mediaplayer适合播放长点的. MediaRecorder主要用来录音. SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的操作. 但是这里如果音效文件过大没有载入完成,我们调用play方法时可能产生严重的后果, 这里AndroidSDK提供了一个SoundPool.OnLoadCompleteListener类来帮助我们了解媒体文件是否载入完成, 我们重载onLoadComplete(S

如何在Android中播放网络传输过来的AAC音频?

============问题描述============ 如何在Android中播放网络传输过来的AAC音频?每个包都有ADTS头的. ============解决方案1============ 如果是应用的话,直接设置MediaPlayer setDataSource设置为网络音频的uri,然后prepareAsync(), prepare完成后调用start不就可以了吗? framework层的话还是要用aacdecoder进行解码播放,要么用软件解码,要么用硬件解码.