声音的播放有两种方式,且分别适用于不同的情况。

首先介绍使用MediaPlayer类来播放声音的方法,步骤如下所示。

image

1)创建名为Android_Sample_2_3的Android项目。

2)将声音资源sound.mid存放到Android_Sample_2_3/res/raw目录下,如果raw文件夹不存在,直接创建一个即可。

3)打开Andorid_Sample_2_3/src/wyf/ytl目录下的Andorid_SAmple_2_3Activity.java文件,将其代码替换成如下代码。

  1: package wyf.ytl;
  2: 
  3: import android.app.Activity;
  4: import android.media.MediaPlayer;
  5: import android.os.Bundle;
  6: 
  7: public class Android_Sample_2_3Activity extends Activity {
  8: 	MediaPlayer mMediaPlayer; // 声音
  9: 
 10: 	public void onCreate(Bundle savedInstanceState) {
 11: 		super.onCreate(savedInstanceState);
 12: 		mMediaPlayer = MediaPlayer.create(this, R.raw.sound);// 得到声音资源
 13: 		setContentView(R.layout.main);// 设置当前显示的布局
 14: 		mMediaPlayer.start();// 播放声音
 15: 	}
 16: }

第9行声明声音资源的引用。

第15行则创建声音资源,将raw文件夹下的sound声音资源加载到内存。

第17行调用start方法播放声音。

4)运行该项目,如果听到悦耳的声音,则表明运行成功。

接下来介绍游戏中短促声音播放时经常使用的解决方案SoundPool类,虽然该类的使用方法较为复杂,但播放的声音往往更加精准。该案例的开发步骤如下所示。

image

1)创建一个名为Android_Sample_2_4的Android项目。

2)将声音资源sound.ogg存放到Sample_2_4/res/raw目录下。

3)打开Android_Sample_2_4Activity.java文件,用下列代码替换原有的代码。

  1: package wyf.ytl;
  2: 
  3: import java.util.HashMap;
  4: 
  5: import android.app.Activity;
  6: import android.content.Context;
  7: import android.media.AudioManager;
  8: import android.media.SoundPool;
  9: import android.media.SoundPool.OnLoadCompleteListener;
 10: import android.os.Bundle;
 11: import android.util.Log;
 12: 
 13: public class Android_Sample_2_4Activity extends Activity {
 14: 	SoundPool soundPool; // SoundPool对象引用
 15: 	HashMap<Integer, Integer> soundPoolMap;// 声音的管理容器
 16: 	boolean SOUND_PLAY = false;
 17: 
 18: 	@Override
 19: 	public void onCreate(Bundle savedInstanceState) {
 20: 		super.onCreate(savedInstanceState);
 21: 		initSounds();// 初始化声音资源
 22: 		setContentView(R.layout.main);
 23: 	}
 24: 
 25: 	public void initSounds() {
 26: 		soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
 27: 		soundPoolMap = new HashMap<Integer, Integer>();
 28: 
 29: 		soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
 30: 			@Override
 31: 			public void onLoadComplete(SoundPool soundPool, int sampleId,
 32: 					int status) {
 33: 				if (status != 0) {
 34: 					Log.e("SOUND LOAD", " Sound ID: " + sampleId
 35: 							+ " Failed to load.");
 36: 				} else {
 37: 					Log.i("SOUND LOAD", " Sound ID: " + sampleId + " loaded.");
 38: 					playSound(1, 5); // 播放5次
 39: 				}
 40: 			}
 41: 
 42: 		});
 43: 
 44: 		soundPoolMap.put(1, soundPool.load(this, R.raw.sound, 1));// 加载声音
 45: 	}
 46: 
 47: 	public void playSound(int sound, int loop)// 播放声音的方法
 48: 	{
 49: 		AudioManager mgr = (AudioManager) this
 50: 				.getSystemService(Context.AUDIO_SERVICE);
 51: 
 52: 		float streamVolumeCurrent = mgr
 53: 				.getStreamVolume(AudioManager.STREAM_MUSIC);
 54: 		float streamVolumeMax = mgr
 55: 				.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
 56: 		float volume = streamVolumeCurrent / streamVolumeMax;// 得到音量的大小
 57: 
 58: 		soundPool.play(soundPoolMap.get(sound), volume, volume, 1, loop, 1f);
 59: 	}
 60: }
第14~15行声明SoundPool的引用,然后声明声音管理容器soundPoolMap。

第19~22行为重写的onCreate方法,其中第21行调用声音初始化方法进行声音的初始化。

第25~44行为声音的初始化方法,其中先初始化soundPool与soundPoolMap,设置一个监听器,让声音文件在加载成功后循环播放5次,然后加载声音并将引用添加到soundPoolMap中方便管理。

第47~58行为声音的播放方法,首先得到音量管理器,然后设置音量,最后在第58行调用Play方法对指定的声音进行播放。

作者:银月莲
出处:http://www.cnblogs.com/moonsilvering
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,包括文章,代码,图片等本站内所有资源,否则保留追究法律责任的权利。

posted on 2011-12-24 17:55  银月莲  阅读(2258)  评论(1编辑  收藏  举报