疯狂猜歌实现(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
- 疯狂猜歌实现(13)—— 播放歌曲与音效
- 疯狂猜歌实现(4)—— 实现文字待选框与已选文字框布局
- 疯狂猜歌实现(1)—— 实现顶部布局
- 疯狂猜歌实现(2)—— 实现唱片布局以及播放动画
- 疯狂猜歌实现(3)—— 实现播放相关动画
- 疯狂猜歌实现(8)—— 实现答案判断逻辑
- 疯狂猜歌实现(11)—— 过关、通关界面及相关逻辑实现
- 疯狂猜歌实现(12)——实现主界面的提示对话框
- 【Unity快速实现小功能】声音控制三部曲之(二)—— 音效与背景音乐的叠加及控制
- 播放歌曲
- 疯狂猜歌实现(7)—— 文字选择框的显示和隐藏
- 疯狂猜歌实现(9)—— 为游戏主界面添加浮动按钮
- 疯狂猜歌实现(5)—— 实现待选文字框动画以及点击事件
- 疯狂猜歌实现(10)—— 实现提示、删除按键之事件处理以及金币逻辑
- 实现KTV效果:播放歌曲,录音(存储录音文件),并同步播放录音 & 解释4.3以上audio与media资源冲突问题
- 疯狂猜歌实现(6)—— 生成待选文字框随机文字以及动态生成已选框
- DBMS实现——疯狂的开始
- Android 实现边下载边播放歌曲
- 基础三:BroadcastReceiver
- MonaServer集群配置
- 嵌入式系统——低功耗设计
- vi编辑器常用命令
- vs2013+WDK8.1+WinDbg调试驱动开发环境配置(多帖子整理,水原创)
- 疯狂猜歌实现(13)—— 播放歌曲与音效
- VS编译工程时遇见 error LNK1168错误
- Java垃圾回收机制
- View 随着手指的移动而放大和旋转
- Angularjs开发的一些方法和建议整理
- 笔记
- 安装双系统的一些问题
- response.sendRedirect()与request.getRequestDispatcher().forward()区别
- 朴素匹配与KMP算法对比