Android游戏开发学习笔记(二):音频的播放

android中有两种方式可以播放音频,一种是SoundPool,一种是MediaPlayer。前者适合短促但对反应速度要求较高的情况(如游戏中的爆炸声),后者适合较长当对时间要求不高的情况(如游戏中的背景音乐)。示例如下:

首先,创建项目Sound,在res下新建目录raw用于存放声音文件,讲需要的声音文件放入该目录。

然后编写布局文件main.xml,代码如下:

  
  
  
  
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="vertical" 
  4.     android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent" 
  6.     > 
  7. <TextView   
  8.     android:id="@+id/textView"   
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"   
  11.     android:text="没有播放任何声音" 
  12.     /> 
  13. <Button 
  14.     android:id="@+id/btn1" 
  15.     android:layout_width="wrap_content" 
  16.     android:layout_height="wrap_content" 
  17.     android:text="使用MediaPlayer播放声音"   
  18.     /> 
  19. <Button 
  20.     android:id="@+id/btn2" 
  21.     android:layout_width="wrap_content" 
  22.     android:layout_height="wrap_content" 
  23.     android:text="暂停MediaPlayer声音"   
  24.     /> 
  25. <Button 
  26.     android:id="@+id/btn3" 
  27.     android:layout_width="wrap_content" 
  28.     android:layout_height="wrap_content" 
  29.     android:text="使用SoundPool播放声音"   
  30.     /> 
  31. <Button 
  32.     android:id="@+id/btn4" 
  33.     android:layout_width="wrap_content" 
  34.     android:layout_height="wrap_content" 
  35.     android:text="暂停SoundPool声音"   
  36.     /> 
  37. </LinearLayout> 
最后,在MainActivity.java中编写代码,根据不同的按钮事件执行播放和暂停的操作。代码如下:
  
  
  
  
  1. package game.test;  
  2.  
  3. import java.util.HashMap;  
  4. import android.app.Activity;  
  5. import android.content.Context;  
  6. import android.media.AudioManager;  
  7. import android.media.MediaPlayer;  
  8. import android.media.SoundPool;  
  9. import android.os.Bundle;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.Button;  
  13. import android.widget.TextView;  
  14.  
  15. public class MainActivity extends Activity {  
  16.     Button btn1, btn2, btn3, btn4;  
  17.     TextView tv;  
  18.     MediaPlayer media;  
  19.     SoundPool sound;  
  20.     HashMap<Integer, Integer> soundMap;  
  21.  
  22.     /** Called when the activity is first created. */ 
  23.     @Override 
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         initSounds();  
  27.         setContentView(R.layout.main);  
  28.         tv = (TextView) findViewById(R.id.textView);  
  29.         btn1 = (Button) findViewById(R.id.btn1);  
  30.         btn2 = (Button) findViewById(R.id.btn2);  
  31.         btn3 = (Button) findViewById(R.id.btn3);  
  32.         btn4 = (Button) findViewById(R.id.btn4);  
  33.         btn1.setOnClickListener(btn_listener);  
  34.         btn2.setOnClickListener(btn_listener);  
  35.         btn3.setOnClickListener(btn_listener);  
  36.         btn4.setOnClickListener(btn_listener);  
  37.     }  
  38.  
  39.     private void initSounds() {  
  40.         // TODO Auto-generated method stub  
  41.         media = MediaPlayer.create(this, R.raw.shadow);  
  42.         sound = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);  
  43.         soundMap = new HashMap<Integer, Integer>();  
  44.         soundMap.put(1, sound.load(this, R.raw.shake, 1));  
  45.     }  
  46.  
  47.     private OnClickListener btn_listener = new OnClickListener() {  
  48.         @Override 
  49.         public void onClick(View v) {  
  50.             switch (v.getId()) {  
  51.             case R.id.btn1:  
  52.                 tv.setText("使用MediaPlayer播放声音");  
  53.                 if (!media.isPlaying())  
  54.                     media.start();  
  55.                 break;  
  56.             case R.id.btn2:  
  57.                 tv.setText("暂停了MediaPlayer播放的声音");  
  58.                 if (media.isPlaying())  
  59.                     media.pause();  
  60.                 break;  
  61.             case R.id.btn3:  
  62.                 tv.setText("使用SoundPool播放声音");  
  63.                 this.playSound(10);  
  64.                 break;  
  65.             case R.id.btn4:  
  66.                 tv.setText("暂停了SoundPool播放的声音");  
  67.                 sound.pause(1);  
  68.                 break;  
  69.             }  
  70.         }  
  71.  
  72.         private void playSound(int sound, int loop) {  
  73.             // TODO Auto-generated method stub  
  74.             AudioManager mgr = (AudioManager) MainActivity.this 
  75.                     .getSystemService(Context.AUDIO_SERVICE);  
  76.             float streamVolumeCurrent = mgr  
  77.                     .getStreamVolume(AudioManager.STREAM_MUSIC);  
  78.             float streamVolumeMax = mgr  
  79.                     .getStreamMaxVolume(AudioManager.STREAM_MUSIC);  
  80.             float volume = streamVolumeCurrent / streamVolumeMax;  
  81.             MainActivity.this.sound.play(soundMap.get(sound), volume, volume,  
  82.                     1, loop, 1f);  
  83.         }  
  84.     };  

 

你可能感兴趣的:(android,移动开发,mediaplayer,SoundPool,休闲)