Android声音资源的使用

来源:互联网 发布:fgo羁绊礼装 知乎 编辑:程序博客网 时间:2024/05/21 10:04
Android声音资源的使用

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

首先介绍使用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

原创粉丝点击