脑力达人电脑版游戏的声音在哪里开?

Android游戏开发教程----游戏中的声音
SDK为我们提供了SoundPool 用于播放游戏音效,还提供了MediaPlayer为我们提供游戏音乐的播放。SoundPool(android.media.SoundPool),顾名思义是声音池的意思,主要用于播放一些较短的声音片段,支持从程序的资源或文件加载。
SoundPool技术
&&&& 在游戏开发中我们经常需要播放一些游戏音效(比如:子弹爆炸,物体撞击等),这些音效的共同特点是短促、密集、延迟程度小。在这样的场景下我们可以使用SoundPool。
SoundPool特性:
&1. SoundPool最大只能申请1M的内存空间,这就意味着我们只能使用一些很短的声音片段,而不是用它来播放歌曲或者游戏背景音乐。
&2. SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用。
&3. 音频格式建议使用OGG格式。
SoundPool使用方法:
1. 创建一个SoundPool
  public SoundPool(int maxStream, int streamType, int srcQuality)
  maxStream && 同时播放的流的最大数量
  streamType && 流的类型,一般为STREAM_MUSIC(具体在AudioManager类中列出)
  srcQuality && 采样率转化质量,当前无效果,使用0作为默认值
  SoundPool soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
&&& 创建了一个最多支持3个流同时播放的,类型标记为音乐的SoundPool。&
2 soundpool的加载:
& int& load(Context context, int resId, int priority)& //从APK资源载入
& int& load(FileDescriptor fd, long offset, long length, int priority)& //从FileDescriptor对象载入
& int& load(AssetFileDescriptor afd, int priority)& //从Asset对象载入
& int& load(String path, int priority)& //从完整文件路径名载入
最后一个参数为优先级。
play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate) ,
其中leftVolume和rightVolume表示左右音量 取值范围(range = 0.0 to 1.0)
priority表示优先级
loop表示循环次数
rate表示速率,如
//速率最低0.5最高为2,1代表正常速度
sp.play(soundId, 1, 1, 0, 0, 1);
关于音频流:
&&& 在Android系统中有多种音频流,通过Activity中的函数 setVolumeControlStream(int streamType)可以设置该Activity中音量控制键控制的音频流,一般在onCreate函数中设置。
Android中有如下几种音频流(streamType是需要调整音量的类型):
AudioManager.STREAM_MUSIC& /音乐回放即媒体音量/
AudioManager.STREAM_RING /铃声/
AudioManager.STREAM_ALARM& /警报/
AudioManager.STREAM_NOTIFICATION /窗口顶部状态栏通知声/
AudioManager.STREAM_SYSTEM& /系统/
AudioManager.STREAM_VOICECALL /通话 /
AudioManager.STREAM_DTMF /双音多频/
仔细分析了SoundPool 的API后,毫无疑问我们应该让事情简单些。
编写AndroidSoundPool类简化SoundPool的使用
[java] package com.gaofeng.&
  import java.io.IOE&
  import java.util.*;&
  import android.app.A&
  import android.content.res.AssetFileD&
  import android.content.res.AssetM&
  import android.media.AudioM&
  import android.media.SoundP&
  public class AndroidSoundPool {&
  & AssetM&
  &&& SoundPool soundP&
  && HashMap&String,Integer& soundMap=new HashMap&String,Integer&();&
  & public AndroidSoundPool(Activity activity) {&
  &&&&& activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);&
  &&&&&&& this.assets = activity.getAssets();&
  &&&&&&& this.soundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);&
    /** 从asset中加载声音文件
   & * @param filename 声音文件名
   & * @param identifer 声音标识名,在播放声音时调用
   & */&
  & public void load(String filename,String identifer) {&
  &&&&&&& try {&
  &&&&&&&&&&& AssetFileDescriptor assetDescriptor = assets.openFd(filename);&
  &&&&&&&&&&& int soundId = soundPool.load(assetDescriptor, 0);&
  &&&&&&&&&&& soundMap.put(identifer, soundId);&&
  &&&&&&& } catch (IOException e) {&
  &&&&&&&&&&& throw new RuntimeException(&Couldn't load sound '& + filename + &'&);&
  &&&&&&& }&
  &&& }&
  &&&& /**根据声音标识名播放声音
   & * @param identifer 声音标识名,在加载声音load方法中被设置的
   & * @param volume 播放音量
   & */&
  & public void play(String identifer,float volume) {&
  &&&&&&&&& soundPool.play(soundMap.get(identifer), volume, volume, 0, 0, 1);&
  &&&&& }&
  &&&& /**根据声音标识名播放声音
   & * @param identifer 声音标识名,在加载声音load方法中被设置的
   & */&
  & public void play(String identifer) {&
  &&&&&&&&& soundPool.play(soundMap.get(identifer), 1, 1, 0, 0, 1);&
  &&&&& }&
  &&&& /**卸载声音
  && * @param identifer 声音标识名,在加载声音load方法中被设置的
  && * @return
  && */&
  & public boolean unload(String identifer) {&
  &&&&&&&& return soundPool.unload(soundMap.get(identifer));&
  &&&&& }&
  package com.gaofeng.
  import java.io.IOE
  import java.util.*;
  import android.app.A
  import android.content.res.AssetFileD
  import android.content.res.AssetM
  import android.media.AudioM
  import android.media.SoundP
  public class AndroidSoundPool {
  &AssetM
  &&& SoundPool soundP
  && HashMap&String,Integer& soundMap=new HashMap&String,Integer&();
  &public AndroidSoundPool(Activity activity) {
  &&activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
  &&&&&&& this.assets = activity.getAssets();
  &&&&&&& this.soundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);
   &/** 从asset中加载声音文件
   & * @param filename 声音文件名
   & * @param identifer 声音标识名,在播放声音时调用
   & */
  &public void load(String filename,String identifer) {
  &&&&&&& try {
  &&&&&&&&&&& AssetFileDescriptor assetDescriptor = assets.openFd(filename);
  &&&&&&&&&&& int soundId = soundPool.load(assetDescriptor, 0);
  &&&&&&&&&&& soundMap.put(identifer, soundId);
  &&&&&&& } catch (IOException e) {
  &&&&&&&&&&& throw new RuntimeException(&Couldn't load sound '& + filename + &'&);
  &&&&&&& }
  &&& /**根据声音标识名播放声音
   & * @param identifer 声音标识名,在加载声音load方法中被设置的
   & * @param volume 播放音量
   & */
  &public void play(String identifer,float volume) {
  &&&&&&&& soundPool.play(soundMap.get(identifer), volume, volume, 0, 0, 1);
  &&&& }
  &&& /**根据声音标识名播放声音
   & * @param identifer 声音标识名,在加载声音load方法中被设置的
   & */
  &public void play(String identifer) {
  &&&&&&&& soundPool.play(soundMap.get(identifer), 1, 1, 0, 0, 1);
  &&&& }
  &&& /**卸载声音
  & * @param identifer 声音标识名,在加载声音load方法中被设置的
  & * @return
  &public boolean unload(String identifer) {
  &&&&&&& return soundPool.unload(soundMap.get(identifer));
  &&&& }
AndroidSoundPool 通过内置一个 HashMap&String,Integer& 实现了音效和声音标识的映射,使用的时候需要首先调用load方法加载音效文件,指定声音标识,然后再通过play方法根据音效对应的声音标识进行播放。
下面是AndroidSoundPool 的使用方法:
[java]  import com.gaofeng.game.AndroidSoundP&
  import android.app.A&
  import android.os.B&
  import android.util.L&
  import android.view.MotionE&
  import android.view.V&
  import android.view.View.OnTouchL&
  import android.widget.TextV&
  public class AudioTest extends Activity implements OnTouchListener {&
  & AndroidSoundP&
  & @Override&
  & public void onCreate(Bundle savedInstanceState) {&
  &&&&& super.onCreate(savedInstanceState);&
  &&&&& TextView textView = new TextView(this);&
  &&&&& textView.setOnTouchListener(this);&
  &&&&& setContentView(textView);&
   &&&&&&& //创建AndroidSoundPool&&
   &&&& andoridsoundpool = new AndroidSoundPool(this);&
&//加载声音文件explode.ogg,指定该声音标识为:sExplode&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   &&&&&&& andoridsoundpool.load(&explode.ogg&, &sExplode&);&
  & @Override&
  & public boolean onTouch(View v, MotionEvent event) {&
  &&&&& if (event.getAction() == MotionEvent.ACTION_UP) {&
   &&&&&&&& //根据声音标识sExplode播放声音文件&&
   &&&&&&&& andoridsoundpool.play(&sExplode&);&
  &&&&& }&
  &&&&&&
  import com.gaofeng.game.AndroidSoundP
  import android.app.A
  import android.os.B
  import android.util.L
  import android.view.MotionE
  import android.view.V
  import android.view.View.OnTouchL
  import android.widget.TextV
  public class AudioTest extends Activity implements OnTouchListener {
  &AndroidSoundP
  &@Override
  &public void onCreate(Bundle savedInstanceState) {
  &&super.onCreate(savedInstanceState);
  &&TextView textView = new TextView(this);
  &&textView.setOnTouchListener(this);
  &&setContentView(textView);
   &&&&&&& //创建AndroidSoundPool
   &&andoridsoundpool = new AndroidSoundPool(this);
&//加载声音文件explode.ogg,指定该声音标识为:sExplode&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   &&&&&&& andoridsoundpool.load(&explode.ogg&, &sExplode&);
  &@Override
  &public boolean onTouch(View v, MotionEvent event) {
  &&if (event.getAction() == MotionEvent.ACTION_UP) {
   &&&&&&&& //根据声音标识sExplode播放声音文件
   &&&andoridsoundpool.play(&sExplode&);
MediaPlayer技术
MediaPlayer使用简单,适合做游戏的背景音乐,但资源占用量较高、延迟时间较长、不支持多个音频同时播放等。
下面介绍MediaPlayer的相关技术:
1.获取MediaPlayer实例
MediaPlayer.create(Context context,int resId);&
//参数一:上下文对象,参数二:音乐资源ID
2.MediaPlayer常用的函数
prepare();//为播放音乐文件做准备工作
start();//播放音乐
pause();//暂停音乐播放
stop();//停止音乐播放
pause()和stop()主要的区别在于:暂停播放后可以调用start()继续播放,停止音乐播放后,需要调用prepare()再调用start()进行播放音乐。
3.MediaPlayer其它常用函数
setLooping(boolean looping);//设置音乐是否循环播放,true为循环播放
seekTo(int msec);//将音乐播放跳转到某一时间点,以毫秒为单位
getDuration();//获取播放的音乐文件总时间长度
getCurrentPosition();//获取当前播放音乐时间点
仔细分析了MediaPlayer的API后,毫无疑问我们应该让事情简单些。
编写AndroidMusicPool简化音乐播放
[java] import java.io.IOE&
  import java.util.HashM&
  import java.util.I&
  import java.util.Map.E&
  import android.app.A&
  import android.content.res.AssetFileD&
  import android.content.res.AssetM&
  import android.media.MediaP&
  public class AndroidMusicPool {&
  &&&& AssetM&
HashMap&String,AndroidMusic& musicMap=new HashMap&String,AndroidMusic&();&
  & public AndroidMusicPool(Activity activity) {&
  &&&&&& this.assets = activity.getAssets();&
  && * 从asset中加载音乐文件
  && * filename:加载的文件名
  && * identifer:声音标志名,音乐标识名,播音乐时调用
  && * */&
  & public void load(String filename,String identifer) {&&&&&&
  &&&&&&&&&&& AssetFileDescriptor assetDescriptor=&
  &&&&&&&&& try {&
  &&&&&&&&&&&&& assetDescriptor = assets.openFd(filename);&
  &&&&&&&&& } catch (IOException e) {&
  &&&&&&&&&&&&& e.printStackTrace();&
  &&&&&&&&& }&
  &&&&&&&&&&& AndroidMusic music = new AndroidMusic(assetDescriptor);&
  &&&&&&&&&&& musicMap.put(identifer, music);&
  &&&&&&&&&&
  &&& }&
  && /**根据音乐标识符播放音乐
  && * @param identifer 音乐标识符
  && * @param volume 音量大小
  && */&
  &&&& public void play(String identifer,float volume) {&
  &&&&&&&& if(!musicMap.containsKey(identifer))&
  &&&&&&&& musicMap.get(identifer).setVolume(volume);&
  &&&&&&&& musicMap.get(identifer).play();&
  &&&&& }&
  &&&& /*根据音乐标识符播放音乐
  &&&&& * */&
  &&&& public void play(String identifer) {&
  &&&&&&&& if(!musicMap.containsKey(identifer))&
  &&&&&&&& musicMap.get(identifer).play();&
  &&&&& }&
  &&& //根据音乐标识符停止音乐&&
  &&&&& public void stop(String identifer) {&
  &&&&&&&& if(!musicMap.containsKey(identifer))&
  &&&&&&&& musicMap.get(identifer).stop();&
  &&&&& }&
  &&&& //根据音乐标识符设定循环播放&&
  &&&& public void setLooping(String identifer,boolean isLooping) {&
  &&&&&&&& if(!musicMap.containsKey(identifer))&
  &&&&&&&& musicMap.get(identifer).setLooping(isLooping);&
  &&&&& }&
  &&&&& //根据音乐标识符暂停音乐&&
  &&&& public void pause(String identifer) {&
  &&&&&&&& if(!musicMap.containsKey(identifer))&
  &&&&&&&& musicMap.get(identifer).pause();&
  &&&& }&
  &&&&&& //根据音乐标识符注销音乐&&
  &&&& public void dispose(String identifer) {&
  &&&&&&&& if(!musicMap.containsKey(identifer))&
  &&&&&&&&&& musicMap.get(identifer).dispose();&
  &&&&&&&&&& musicMap.remove(identifer);&
  &&&&& }&
  &&&&&& //根据音乐标识符获取音乐&&
  &&&& public AndroidMusic getMusic(String identifer) throws Exception&
  &&&& {&&&
  &&&&&&&& if(!musicMap.containsKey(identifer))&&
   throw new Exception(&no music for identifer found&) ;&
  &&&&&& return& musicMap.get(identifer);&
  &&&& }&&&
  &&&& /*清除所有的音乐*/&
  &&&& public void clear()&
  &&&& {&
  &&&&&&&& Iterator&Entry&String, AndroidMusic&& iter&&
  &&&&&&&&&& = musicMap.entrySet().iterator();&&
  &&&&&&&& while (iter.hasNext()) {&&
  &&&&&&&&&&&& musicMap.get(iter.next().getKey()).dispose();&
  &&&&&&&& }&&
  &&&&&&&& musicMap.clear();&
  &&&& }&
&&& //该类是对MediaPlayer的轻度封装&&
   class AndroidMusic {&
  &&& MediaPlayer mediaP&
  &&& boolean isPrepared =&
  &&& public AndroidMusic(AssetFileDescriptor assetDescriptor) {&
  &&&&&&& mediaPlayer = new MediaPlayer();&
  &&&&&&& try {&
&&&&&&&& mediaPlayer.setDataSource(assetDescriptor.getFileDescriptor(),&
  &&&&&&&&&&&&&&&&&&& assetDescriptor.getStartOffset(),&
  &&&&&&&&&&&&&&&&&&& assetDescriptor.getLength());&
  &&&&&&&&&&& mediaPlayer.prepare();&
  &&&&&&&&&&& isPrepared =&
  &&&&&&& } catch (Exception e) {&
  &&&&&&&&&&& throw new RuntimeException(&Couldn't load music&);&
  &&&&&&& }&
  &&& }&
  &&& public void dispose() {&
  &&&&&&& if (mediaPlayer.isPlaying())&
  &&&&&&&&&&& mediaPlayer.stop();&
  &&&&&&& mediaPlayer.release();&
  &&& }&
  &&& public boolean isLooping() {&
  &&&&&&& return mediaPlayer.isLooping();&
  &&& }&
  &&& public boolean isPlaying() {&
  &&&&&&& return mediaPlayer.isPlaying();&
  &&& }&
  &&& public boolean isStopped() {&
  &&&&&&& return !isP&
  &&& }&
  &&& public void pause() {&
  &&&&&&& if (mediaPlayer.isPlaying())&
  &&&&&&&&&&& mediaPlayer.pause();&
  &&& }&
  &&& public void play() {&
  &&&&&&& if (mediaPlayer.isPlaying())&
  &&&&&&&&&&&&&
  &&&&&&& try {&
  &&&&&&&&&&& synchronized (this) {&
  &&&&&&&&&&&&&&& if (!isPrepared)&
  &&&&&&&&&&&&&&&&&&& mediaPlayer.prepare();&
  &&&&&&&&&&&&&&& mediaPlayer.start();&
  &&&&&&&&&&& }&
  &&&&&&& } catch (IllegalStateException e) {&
  &&&&&&&&&&& e.printStackTrace();&
  &&&&&&& } catch (IOException e) {&
  &&&&&&&&&&& e.printStackTrace();&
  &&&&&&& }&
  &&& }&
  &&& public void setLooping(boolean isLooping) {&
  &&&&&&& mediaPlayer.setLooping(isLooping);&
  &&& }&
  &&& public void setVolume(float volume) {&
  &&&&&&& mediaPlayer.setVolume(volume, volume);&
  &&& }&
  &&& public void stop() {&
  &&&&&&& mediaPlayer.stop();&
  &&&&&&& synchronized (this) {&
  &&&&&&&& isPrepared =&
  &&&&&&& }&
  &&& }&
  import java.io.IOE
  import java.util.HashM
  import java.util.I
  import java.util.Map.E
  import android.app.A
  import android.content.res.AssetFileD
  import android.content.res.AssetM
  import android.media.MediaP
  public class AndroidMusicPool {
  &&& AssetM
HashMap&String,AndroidMusic& musicMap=new HashMap&String,AndroidMusic&();
  &public AndroidMusicPool(Activity activity) {
  && this.assets = activity.getAssets();
  & * 从asset中加载音乐文件
  & * filename:加载的文件名
  & * identifer:声音标志名,音乐标识名,播音乐时调用
  & * */
  &public void load(String filename,String identifer) {&
  &&&&&&&&&&& AssetFileDescriptor assetDescriptor=
  &&&try {
  &&&&assetDescriptor = assets.openFd(filename);
  &&&} catch (IOException e) {
  &&&&e.printStackTrace();
  &&&&&&&&&&& AndroidMusic music = new AndroidMusic(assetDescriptor);
  &&&&&&&&&&& musicMap.put(identifer, music);
  &&&&&&&&
  && /**根据音乐标识符播放音乐
  & * @param identifer 音乐标识符
  & * @param volume 音量大小
  &&& public void play(String identifer,float volume) {
  &&&& if(!musicMap.containsKey(identifer))
  &&&& musicMap.get(identifer).setVolume(volume);
  &&&& musicMap.get(identifer).play();
  &&&& }
  &&& /*根据音乐标识符播放音乐
  &&&& * */
  &&& public void play(String identifer) {
  &&&& if(!musicMap.containsKey(identifer))
  &&&& musicMap.get(identifer).play();
  &&&& }
  && //根据音乐标识符停止音乐
  &&&&& public void stop(String identifer) {
  &&&& if(!musicMap.containsKey(identifer))
  &&&& musicMap.get(identifer).stop();
  &&&& }
  &&&& //根据音乐标识符设定循环播放
  &&& public void setLooping(String identifer,boolean isLooping) {
  &&&& if(!musicMap.containsKey(identifer))
  &&&& musicMap.get(identifer).setLooping(isLooping);
  &&&& }
  &&&&& //根据音乐标识符暂停音乐
  &&& public void pause(String identifer) {
  &&&& if(!musicMap.containsKey(identifer))
  &&&& musicMap.get(identifer).pause();
  &&&&&& //根据音乐标识符注销音乐
  &&& public void dispose(String identifer) {
  &&&& if(!musicMap.containsKey(identifer))
  &&&&&& musicMap.get(identifer).dispose();
  &&&&&& musicMap.remove(identifer);
  &&&& }
  &&&&&& //根据音乐标识符获取音乐
  &&& public AndroidMusic getMusic(String identifer) throws Exception
  &&& {&
  &&&& if(!musicMap.containsKey(identifer))
   throw new Exception(&no music for identifer found&) ;
  && return& musicMap.get(identifer);
  &&& }&
  &&& /*清除所有的音乐*/
  &&& public void clear()
  &&&& Iterator&Entry&String, AndroidMusic&& iter
  &&&&&&&&&& = musicMap.entrySet().iterator();
  &&&& while (iter.hasNext()) {
  &&&&&&&& musicMap.get(iter.next().getKey()).dispose();
  &&&& }
  &&&& musicMap.clear();
&&& //该类是对MediaPlayer的轻度封装
   class AndroidMusic {
  &&& MediaPlayer mediaP
  &&& boolean isPrepared =
  &&& public AndroidMusic(AssetFileDescriptor assetDescriptor) {
  &&&&&&& mediaPlayer = new MediaPlayer();
  &&&&&&& try {
&&&&&&&& mediaPlayer.setDataSource(assetDescriptor.getFileDescriptor(),
  &&&&&&&&&&&&&&&&&&& assetDescriptor.getStartOffset(),
  &&&&&&&&&&&&&&&&&&& assetDescriptor.getLength());
  &&&&&&&&&&& mediaPlayer.prepare();
  &&&&&&&&&&& isPrepared =
  &&&&&&& } catch (Exception e) {
  &&&&&&&&&&& throw new RuntimeException(&Couldn't load music&);
  &&&&&&& }
  &&& public void dispose() {
  &&&&&&& if (mediaPlayer.isPlaying())
  &&&&&&&&&&& mediaPlayer.stop();
  &&&&&&& mediaPlayer.release();
  &&& public boolean isLooping() {
  &&&&&&& return mediaPlayer.isLooping();
  &&& public boolean isPlaying() {
  &&&&&&& return mediaPlayer.isPlaying();
  &&& public boolean isStopped() {
  &&&&&&& return !isP
  &&& public void pause() {
  &&&&&&& if (mediaPlayer.isPlaying())
  &&&&&&&&&&& mediaPlayer.pause();
  &&& public void play() {
  &&&&&&& if (mediaPlayer.isPlaying())
  &&&&&&&&&&&
  &&&&&&& try {
  &&&&&&&&&&& synchronized (this) {
  &&&&&&&&&&&&&&& if (!isPrepared)
  &&&&&&&&&&&&&&&&&&& mediaPlayer.prepare();
  &&&&&&&&&&&&&&& mediaPlayer.start();
  &&&&&&&&&&& }
  &&&&&&& } catch (IllegalStateException e) {
  &&&&&&&&&&& e.printStackTrace();
  &&&&&&& } catch (IOException e) {
  &&&&&&&&&&& e.printStackTrace();
  &&&&&&& }
  &&& public void setLooping(boolean isLooping) {
  &&&&&&& mediaPlayer.setLooping(isLooping);
  &&& public void setVolume(float volume) {
  &&&&&&& mediaPlayer.setVolume(volume, volume);
  &&& public void stop() {
  &&&&&&& mediaPlayer.stop();
  &&&&&&& synchronized (this) {
  &&&&&&&& isPrepared =
  &&&&&&& }
  }以上代码中包含两个类AndroidMusic 和 AndroidMusicPool ,AndroidMusic 其实是对MediaPlayer的轻度封装,在AndroidMusicPool中会调用AndroidMusic 进行音乐播放,而AndroidMusicPool可以看作音乐容器, 通过内置一个 HashMap 实现了音乐和音乐标识的映射,使用的时候需要首先调用load方法加载音乐文件,指定音乐标识,然后再通过play方法根据音乐标识进行播放。
如果上述代码让你感到疑惑,也不必太纠结了,因为重要的是知道如何去使用,请看下面的实例代码:
使用AndroidMusicPool 播放音乐
以下代码演示:当我们轻触屏幕时,音乐就会响起。
[java]  public class AudioTest extends Activity implements OnTouchListener {&
  & AndroidMusicP&
  & @Override&
  & public void onCreate(Bundle savedInstanceState) {&
  &&&&& super.onCreate(savedInstanceState);&
  &&&&& TextView textView = new TextView(this);&
  &&&&& textView.setOnTouchListener(this);&
  &&&&& setContentView(textView);&
  &&&&& musicpool = new AndroidMusicPool(this);&
   &&&&&&& //从assets中加载音乐文件music.mp3,并设定其音乐标识为:mMusic&&
   &&&& musicpool.load(&music.mp3&, &mMusic&);&
  & @Override&
  & public boolean onTouch(View v, MotionEvent event) {&
  &&&&& if (event.getAction() == MotionEvent.ACTION_UP) {&
  &&&&&&& //根据音乐标识mMusic播放音乐&&
  &&&&&&&&& musicpool.play(&mMusic&);&
  &&&&& }&
  &&&&&&
  public class AudioTest extends Activity implements OnTouchListener {
  &AndroidMusicP
  &@Override
  &public void onCreate(Bundle savedInstanceState) {
  &&super.onCreate(savedInstanceState);
  &&TextView textView = new TextView(this);
  &&textView.setOnTouchListener(this);
  &&setContentView(textView);
  &&musicpool = new AndroidMusicPool(this);
   &&&&&&& //从assets中加载音乐文件music.mp3,并设定其音乐标识为:mMusic
   &&musicpool.load(&music.mp3&, &mMusic&);
  &@Override
  &public boolean onTouch(View v, MotionEvent event) {
  &&if (event.getAction() == MotionEvent.ACTION_UP) {
  &&&&&&& //根据音乐标识mMusic播放音乐
  &&&musicpool.play(&mMusic&);
AndroidMusicPool通过短短两行代码就实现了音乐的加载和播放,简单吧,但是请记住,在调用播放方法play之前,务必先调用load方法加载音乐文件,并指定音乐标识。}

我要回帖

更多关于 脑力达人为什么停运 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信