疯狂猜歌实现(13)—— 播放歌曲与音效

来源:互联网 发布:周立波与郭德纲 知乎 编辑:程序博客网 时间:2024/05/16 01:16

之前我们把界面以及ui上的逻辑都基本上实现了,但是点击播放按钮,却没有音乐播放出来,作为一款音乐游戏怎能少了对媒体的操作呢,这一期我们就来将音乐播放的功能实现了。

要播放音乐当然就要用到MediaPlayer类与AssetFileDescriptor类,前者是对媒体的操作类,后者是对媒体操作进行设置的数据类。在调用mediaPlayer.start()之前需要将AssertFileDescriptor中的文件名称,文件长度,文件起始位置都设置好。详细的情况可以看看下面的代码

package com.crazy.guess.music.utils;import android.content.Context;import android.content.res.AssetFileDescriptor;import android.media.MediaPlayer;import com.crazy.guess.music.data.Constants;import java.io.IOException;/** * Created by vic_ma on 15/9/21. */public class MusicMediaPlayer {    //播放音乐player    private static MediaPlayer mMediaPlayer = null;    //播放音效player    private static MediaPlayer mTonePlayer = null;    /**     * 播放歌曲     * @param context     * @param fileName     */    public static void playTheSong(Context context, String fileName){        if(mMediaPlayer == null){            mMediaPlayer = new MediaPlayer();        }        try {            mMediaPlayer.reset();            AssetFileDescriptor fd = context.getAssets().openFd(fileName);            mMediaPlayer.setDataSource(fd.getFileDescriptor(),fd.getStartOffset(),                                       fd.getLength());            mMediaPlayer.prepare();            mMediaPlayer.start();        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * 停止播放音乐     */    public static void stopTheSong(){        if(mMediaPlayer != null){            mMediaPlayer.stop();        }    }}
我们可以看到mediaPlayer有一个设置dataSource的方法,这里就是讲AssetFileDescriptor中的获取到的数据相关信息设置好,并且注意在调用start之前需要调用mediaPlayer的prepare方法。而在fileName字段对应的就是之前在Constants类中定义的二维数组常量,将其取出设置到此处即可。

除了播放音乐之外,还需要设置播放音效的功能,音效指的是比如弹出对话框的时候会有声音,当用户点击花费相应金币去进行操作时,会有金币掉落的声音,用于增加app的交互性,它和音乐的不同之处就在于音效往往长度都比较短,播放时间一般在1秒以内。由于播放音效与音乐在代码上的实现基本上都是一样的,这里就只把代码贴出来,大家看看即可。

/**     * 播放音效     * @param context     * @param toneType     */    public static void playTheTone(Context context, int toneType){        playTone(context,Constants.TONES_INFO[toneType]);    }    private static void playTone(Context context, String fileName){        if(mTonePlayer == null){            mTonePlayer = new MediaPlayer();        }        try {            mTonePlayer.reset();            AssetFileDescriptor fd = context.getAssets().openFd(fileName);            mTonePlayer.setDataSource(fd.getFileDescriptor(),fd.getStartOffset(),fd.getLength());            mTonePlayer.prepare();            mTonePlayer.start();        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * 停止播放音效     */    public static void stopTheTone(){        if(mTonePlayer != null){            mTonePlayer.stop();        }    }
源码下载

0 0
原创粉丝点击