怎样提取 Android 游戏中的音频mp4文件提取音频

博客分类:
&&&&&& 主要给大家介绍如何加载界面的图片。正如前面AbstractBoard类的代码中看到的,当程序需要创建N个Piece对象时,程序会直接调用ImageUtil的getPlayImages()方法去获取图片,该方法将会随机从res\drawable-mdpi目录下取得N张图片。
  为了让getPlayImages()方法从res\drawable-mdpi目录下随机取得N张图片,程序的实现思路可分为如下几步:
  1、通过反射来获取R.drawable的所有Field(Android的每张图片资源都会自动转换为R.drawable的静态Field),并将这些Field值添加到一个List集合中。
  2、从第一步得到的List集合中随机“抽取”N/2个图片ID。
  3、将第二步得到的N/2个图片ID全部复制一份,这样就得到了N个图片ID,而且每个图片ID都可以找到与之配对的。
  4、将第三步得到的N个图片ID再次“随机打乱”,并根据图片ID加载相应的Bitmap对象,最后把图片ID及对应的Bitmap封装成PieceImage后返回。
  下面是ImageUtil类的代码。
java代码:
public class ImageUtil
{
&&& // 保存所有连连看图片资源值(int类型)
&&& private static List&Integer& imageValues = getImageValues();
&&& //获取连连看所有图片的ID(约定所有图片ID以p_开头)
&&& public static List&Integer& getImageValues()
&&& {
&&&&&&& try
&&&&&&& {
&&&&&&&&&&& // 得到R.drawable所有的属性, 即获取drawable目录下的所有图片
&&&&&&&&&&& Field[] drawableFields = R.drawable.class.getFields();
&&&&&&&&&&& List&Integer& resourceValues = new ArrayList&Integer&();
&&&&&&&&&&& for (Field field : drawableFields)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& // 如果该Field的名称以p_开头
&&&&&&&&&&&&&&& if (field.getName().indexOf("p_") != -1)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& resourceValues.add(field.getInt(R.drawable.class));
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&&&&&& return resourceV
&&&&&&& }
&&&&&&& catch (Exception e)
&&&&&&& {
&&&&&&&&&&&
&&&&&&& }
&&& }
&&& /**
&&&& * 随机从sourceValues的集合中获取size个图片ID, 返回结果为图片ID的集合
&&&& * @param sourceValues 从中获取的集合
&&&& * @param size 需要获取的个数
&&&& * @return size个图片ID的集合
&&&& */
&&& public static List&Integer& getRandomValues(List&Integer& sourceValues,
&&&&&&& int size)
&&& {
&&&&&&& // 创建一个随机数生成器
&&&&&&& Random random = new Random();
&&&&&&& // 创建结果集合
&&&&&&& List&Integer& result = new ArrayList&Integer&();
&&&&&&& for (int i = 0; i & i++)
&&&&&&& {
&&&&&&&&&&& try
&&&&&&&&&&& {
&&&&&&&&&&&&&&& // 随机获取一个数字,大于、小于sourceValues.size()的数值
&&&&&&&&&&&&&&& int index = random.nextInt(sourceValues.size());
&&&&&&&&&&&&&&& // 从图片ID集合中获取该图片对象
&&&&&&&&&&&&&&& Integer image = sourceValues.get(index);
&&&&&&&&&&&&&&& // 添加到结果集中
&&&&&&&&&&&&&&& result.add(image);
&&&&&&&&&&& }
&&&&&&&&&&& catch (IndexOutOfBoundsException e)
&&&&&&&&&&& {
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&& }
&&&&&&&
&&& }
&&& /**
&&&& * 从drawable目录中获取size个图片资源ID, 其中size为游戏数量
&&&& * @param size 需要获取的图片ID的数量
&&&& * @return size个图片ID的集合
&&&& */
&&& public static List&Integer& getPlayValues(int size)
&&& {
&&&&&&& if (size % 2 != 0)
&&&&&&& {
&&&&&&&&&&& // 如果该数除以2有余数,将size加1
&&&&&&&&&&& size += 1;
&&&&&&& }
&&&&&&& // 再从所有的图片值中随机获取size的一半数量
&&&&&&& List&Integer& playImageValues = getRandomValues(imageValues, size / 2);
&&&&&&& // 将playImageValues集合的元素增加一倍(保证所有图片都有与之配对的图片)
&&&&&&& playImageValues.addAll(playImageValues);
&&&&&&& // 将所有图片ID随机“洗牌”
&&&&&&& Collections.shuffle(playImageValues);
&&&&&&& return playImageV
&&& }
&&& /**
&&&& * 将图片ID集合转换PieceImage对象集合,PieceImage封装了图片ID与图片本身
&&&& * @param context
&&&& * @param resourceValues
&&&& * @return size个PieceImage对象的集合
&&&& */
&&& public static List&PieceImage& getPlayImages(Context context, int size)
&&& {
&&&&&&& // 获取图片ID组成的集合
&&&&&&& List&Integer& resourceValues = getPlayValues(size);
&&&&&&& List&PieceImage& result = new ArrayList&PieceImage&();
&&&&&&& // 遍历每个图片ID
&& &&&& for (Integer value : resourceValues)
&&&&&&& {
&&&&&&&&&&& // 加载图片
&&&&&&&&&&& Bitmap bm = BitmapFactory.decodeResource(
&&&&&&&&&&&&&&& context.getResources(),& value);
&&&&&&&&&&& // 封装图片ID与图片本身
&&&&&&&&&&& PieceImage pieceImage = new PieceImage(bm, value);
&&&&&&&&&&& result.add(pieceImage);
&&&&&&& }
&&&&&&&
&&& }
&&& // 获取选中标识的图片
&&& public static Bitmap getSelectImage(Context context)
&&& {
&&&&&&& Bitmap bm = BitmapFactory.decodeResource(context.getResources(),
&&&&&&&&&&& R.drawable.selected);
&&&&&&&
&&& }
}
转自:http://www.eoeandroid.com/thread--1.html
kiddsunhaibo1
浏览: 76915 次
来自: 南京
有没有完整的例子啊,这个IClient和aidl中怎么定义呢? ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'热门推荐:
您当前的位置:
Android提供了对常用音频和视顺格式的支持
时间: &&&&&&作者:zhouyuanjun&&&&&&来源:&&&&&&&&&&
语言:中文
大小:43.5M
&&& Android提供了对常用音频和视顺格式的支持,它所支持的音频格式有MP3 (。mp3 )。 3GPP (。3gp )Ogg (。ogg)和WAVE Cave)等,支持的视频格式有3GPP (。3gp)和MPEG-4 等。通过AndroidAPI提供的相关方法,在^ndroid中可以实现音频与视颇的播放。下面将分别介绍播放音频与视颇的不同方法。
&&& 在Android中。提供了MediaPlayer类来播放音频。使用MediaPlayer类播放音频比较简单,只需要创建该类的对象。并为其指定要播放的音孩文件。然后调用该类的starto方法即可,下面进行详细介绍。
&&& 1. 创逮MediaPlayer对象,井装载音颐文件创建MediaPlayer对象并装载音频文件,可以使用MediaPayer类提供的静态方法create()来实现,也可以通过其无参构造方法来创建井实例化该类的对象来实现。
&&& MediaPlayer类的静态方法crcateO常用的语法格式有以下两种。
&&& crcate(Context context, int resid)用于从资源ID所对应的资源文件中装载音频,并返回新创建的MediaPlayer对象。例如,要创建装载音频资A (res/raw/d.wav )的MediaPlayer对象,可以使用下面的代码:
&&& create(Context context, Uri uri)用于根据指定的URI来装载音频,并返回新创建的MediaPlayer对象。例如,要创建装载了音频文件的MediaPlayer对象。可以使用下面的代码:
(已有0条评论)
你还可以输入200字
  编辑推荐
Copyright (c) 2012
All Rights Reserved. 琵琶网上仙OL专区版权所有.
抵制不良游戏 拒绝盗版游戏 注意自我保护 谨防受骗上当 适度游戏益脑 沉迷游戏伤身 合理安排时间
享受健康生活【ANDROID游戏开发之八】游戏中添加音频-详解MEDIAPLAYER与SOUNDPOO!并讲解两者的区别和游戏中的用途!
【ANDROID游戏开发之八】游戏中添加音频-详解MEDIAPLAYER与SOUNDPOO!并讲解两者的区别和游戏中的用途!
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/312.html
———————————————————————
『很多童鞋说我的代码运行后,点击home或者b...
本站文章均为
原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接:
———————————————————————
『很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有仔细读完Himi的博文,第十九篇Himi专门写了关于这些错误的原因和解决方法,这里我在博客都补充说明下,省的童鞋们总疑惑这一块;请点击下面联系进入阅读:
——————————————————————-
游戏开发中,通过资料和书籍了解到在有两种播放音频形式可以用在我们的游戏开发中,第一个:MediaPlayer 类 ;第二个:SoundPool 类!
PS:当然还有一个JetPlayer 但是 播放的文件格式比较麻烦,所以这里抛开不解释,有兴趣的可以去自己研究下、呵呵;
运行效果图:
MediaPlayer 和:SoundPool 类!那么他们之间的利弊各是什么呢?或者说,我们游戏开发到底用哪一个更佳呢?
答案就是:两者都必须要!!!分析利弊与各自的用途后,等各位童鞋熟习每个播放形式实现之后我会详细道来!
下面仍然是先上代码:(先看代码 然后我讲解两个播放形式的利弊关系和各个用途以及其中解释代码中的几个备注!)
package com.himi;
import java.util.HashMap;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
public class MySurfaceView extends SurfaceView implements Callback, Runnable {
private Thread th;
private SurfaceHolder sfh;
private Canvas canvas;
private MediaPlayer player;
private Paint paint;
private boolean ON = true;
private int currentVol, maxVol;
private AudioManager am;
private HashMap<Integer, Integer> soundPoolMap;//备注1
private int loadId;
private SoundPool soundPool;
public MySurfaceView(Context context) {
super(context);
// 获取音频服务然后强转成一个音频管理器,后面方便用来控制音量大小用
am = (AudioManager) MainActivity.instance
.getSystemService(Context.AUDIO_SERVICE);
maxVol = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
// 获取最大音量值(15最大! .不是100!)
sfh = this.getHolder();
sfh.addCallback(this);
th = new Thread(this);
this.setKeepScreenOn(true);
setFocusable(true);
paint = new Paint();
paint.setAntiAlias(true);
//MediaPlayer的初始化
player = MediaPlayer.create(context, R.raw.himi);
player.setLooping(true);//设置循环播放
//SoundPool的初始化
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(1, soundPool.load(MainActivity.content,
R.raw.himi_ogg, 1));
loadId = soundPool.load(context, R.raw.himi_ogg, 1);
//load()方法的最后一个参数他标识优先考虑的声音。目前没有任何效果。使用了也只是对未来的兼容性价值。
public void surfaceCreated(SurfaceHolder holder) {
* Android OS中,如果你去按手机上的调节音量的按钮,会分两种情况,
* 一种是调整手机本身的铃声音量,一种是调整游戏,软件,音乐播放的音量
* 当我们在游戏中的时候 ,总是想调整游戏的音量而不是手机的铃声音量,
* 可是烦人的问题又来了,我在开发中发现,只有游戏中有声音在播放的时候
* ,你才能去调整游戏的音量,否则就是手机的音量,有没有办法让手机只要是
* 在运行游戏的状态就只调整游戏的音量呢?试试下面这段代码吧!
MainActivity.instance.setVolumeControlStream(AudioManager.STREAM_MUSIC);
// 设定调整音量为媒体音量,当暂停播放的时候调整音量就不会再默认调整铃声音量了,娃哈哈
player.start();
th.start();
public void draw() {
canvas = sfh.lockCanvas();
canvas.drawColor(Color.WHITE);
paint.setColor(Color.RED);
canvas.drawText("当前音量: " + currentVol, 100, 40, paint);
canvas.drawText("当前播放的时间" + player.getCurrentPosition() + "毫秒", 100,
70, paint);
canvas.drawText("方向键中间按钮切换 暂停/开始", 100, 100, paint);
canvas.drawText("方向键←键快退5秒 ", 100, 130, paint);
canvas.drawText("方向键→键快进5秒 ", 100, 160, paint);
canvas.drawText("方向键↑键增加音量 ", 100, 190, paint);
canvas.drawText("方向键↓键减小音量", 100, 220, paint);
sfh.unlockCanvasAndPost(canvas);
private void logic() {
currentVol = am.getStreamVolume(AudioManager.STREAM_MUSIC);// 不断获取当前的音量值
public boolean onKeyDown(int key, KeyEvent event) {
if (key == KeyEvent.KEYCODE_DPAD_CENTER) {
if (ON == false)
player.pause();
player.start();
} else if (key == KeyEvent.KEYCODE_DPAD_UP) {// 按键这里本应该是RIGHT,但是因为当前是横屏模式,以下雷同
player.seekTo(player.getCurrentPosition() + 5000);
} else if (key == KeyEvent.KEYCODE_DPAD_DOWN) {
if (player.getCurrentPosition() < 5000) {
player.seekTo(0);
player.seekTo(player.getCurrentPosition() - 5000);
} else if (key == KeyEvent.KEYCODE_DPAD_LEFT) {
currentVol += 1;
if (currentVol > maxVol) {
currentVol = 100;
am.setStreamVolume(AudioManager.STREAM_MUSIC, currentVol,// 备注2
AudioManager.FLAG_PLAY_SOUND);
} else if (key == KeyEvent.KEYCODE_DPAD_RIGHT) {
currentVol -= 1;
if (currentVol <= 0) {
currentVol = 0;
am.setStreamVolume(AudioManager.STREAM_MUSIC, currentVol,
AudioManager.FLAG_PLAY_SOUND);
soundPool.play(loadId, currentVol, currentVol, 1, 0, 1f);// 备注3
soundPool.play(soundPoolMap.get(1), currentVol, currentVol, 1, 0, 1f);//备注4
soundPool.pause(1);//暂停SoundPool的声音
return super.onKeyDown(key, event);
public boolean onTouchEvent(MotionEvent event) {
return true;
public void run() {
// TODO Auto-generated method stub
while (true) {
Thread.sleep(100);
} catch (Exception ex) {
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
public void surfaceDestroyed(SurfaceHolder holder) {
一、 MediaPlayer 播放音频的实现步骤:
1. 调用MediaPlayer.create(context, R.raw.himi); 利用MediaPlayer类调用create方法并且传入通过id索引的资源音频文件,得到实例;
2. 得到的实例就可以调用 MediaPlayer.star();
简单吧、其实MediaPlayer还有几个构造方法,大家有兴趣可以去尝试和实现,这里主要是简单的向大家介绍基本的,毕竟简单实用最好!
二、 SoundPlayer 播放音频的实现步骤:
new出一个实例 ;
new SoundPool(4, AudioManager.STREAM_MUSIC, 100);第一个参数是允许有多少个声音流同时播放,第2个参数是声音类型,第三个参数是声音的品质;
2.loadId = soundPool.load(context, R.raw.himi_ogg, 1);
3. 使用实例调用play方法传入对应的音频文件id即可!
下面讲下两个播放形式的利弊:
使用MediaPlayer来播放音频文件存在一些不足:
例如:资源占用量较高、延迟时间较长、不支持多个音频同时播放等。
这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中。
最开始我使用的也是普通的MediaPlayer的方式,但这个方法不适合用于游戏开发,因为游戏里面同时播放多个音效是常有的事,用过MediaPlayer的朋友都该知道,它是不支持实时播放多个声音的,会出现或多或少的延迟,而且这个延迟是无法让人忍受的,尤其是在快速连续播放声音(比如连续猛点按钮)时,会非常明显,长的时候会出现3~5秒的延迟,【使用MediaPlayer.seekTo() 这个方法来解决此问题】;
相对于使用SoundPool存在的一些问题:
1. SoundPool最大只能申请1M的内存空间,这就意味着我们只能使用一些很短的声音片段,而不是用它来播放歌曲或者游戏背景音乐(背景音乐可以考虑使用JetPlayer来播放)。
2. SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。
3. 音频格式建议使用OGG格式。使用WAV格式的音频文件存放游戏音效,经过反复测试,在音效播放间隔较短的情况下会出现异常关闭的情况(有说法是SoundPool目前只对16bit的WAV文件有较好的支持)。后来将文件转成OGG格式,问题得到了解决。
4.在使用SoundPool播放音频的时候,如果在初始化中就调用播放函数进行播放音乐那么根本没有声音,不是因为没有执行,而是SoundPool需要一准备时间!囧。当然这个准备时间也很短,不会影响使用,只是程序一运行就播放会没有声音罢了,所以我把SoundPool播放写在了按键中处理了、备注4的地方
大概看完了利弊解释,那么来看我的代码备注的地方:
这里我定义了一个 HashMap ,这个是哈希表,如果大家不是很了解这个类,那建议百度 google学习下,它与Hashtable很常用的,它俩的主要区别是: HashMap
不同步、空键值、效率高;
同步、非空键值、效率略低 ;而在J2ME中不支持HashMap ,因为me中不支持空键值,所以在me中只能使用hashtable、咳咳、言归正传,我这里使用hashmap主要是为了存入多个音频的ID,播放的时候可以同时播放多个音频。
上面也介绍了,SoundPool可以支持多个音频同时播放,而且SoundPool在播放的时候调用的这个方法(备注3)soundPool.play(loadId, currentVol, currentVol, 1, 0, 1f); 第一个参数指的就是之前的loadId !是通过 soundPool.load(context, R.raw.himi_ogg, 1);方法取出来的,
那么除此之外还要注意一点的就是定义hashmap的时候一定要定义成这种形式HashMap&Integer, Integer& hm = new Hash&Integer, Integer&,声明此哈希表就是一个key和volue值都是Integer的哈希表! 为什么要这么做,因为如果你只是简单的定义成 HashMap hm =new HashMap(),那么当你在播放的时候,也就是备注4方法这里的第一个id参数使用Hashmap.get()这个方法的时候总会出现错误的提示!
《SoundPool最大只能申请1M的内存空间,这就意味着我们只能使用一些很短的声音片段》为什么只能使用一些很短的声音呢?
大家还是看备注4方法的第一个参数,这里要求传入的Id类型是个int值,那么这个int其实对应的是通过load()方法返回的音频id,而且这个id会因音频文件的大小而变大变小,那么一旦我们的音频文件超过int最大值,那么就会报内存错误的异常。所以为什么用SoundPool只能播放一些简短的音频这就是其原因了。当然os 里为什么这么定义 我也无从查证和说明。
备注4 :此方法中参数的解释
第一个参数是我通过SoundPool.load()方法返回的音频对应id,第二个第三个参数表示左右声道大小,第四个参数是优先级,第五个参数是循环次数,最后一个是播放速率(1.0 =正常播放,范围是0.5至2.0)
这里是通过媒体服务得到一个音频管理器,从而来对音量大小进行调整。这里要强调一下,调整音频是用这个音频管理器调用setStreamVolume()的方式去调整,而不是MediaPlayer.setVolue(int LeftVolume,int RightVolume);这个方法的两个参数也是调正左右声道而不是调节声音大小。
好了,对此我们对游戏开发中到底需要用什么来做进行了分析,总结就是SoundPool适合做特效声,其实播放背景音乐我感觉还是用MediaPlayer比较好,当然啦,用什么都看大家喜好和选择啦!下面附上项目下载地址:(项目10+MB因为含有res音频文件)
怎么才知道一首歌曲播放完了,那么这里给说下:
PlaybackCompleted状态:文件正常播放完毕,而又没有设置循环播放的话就进入该状态,并会触发OnCompletionListener的onCompletion()方法。此时可以调用start()方法重新从头播放文件,也可以stop()停止MediaPlayer,或者也可以seekTo()来重新定位播放位置。
注意:1、 别忘记绑定操作! mp.setOnCompletionListener(this);
2、如果你设置了循环播放
mp.setLooping(true); 的话,那么永远都不会监听到播放完成的状态!!!!这里一定要注意!
本章源码下载:
“android中音乐播放源码.rar”
下载地址:
(里含一首歌曲 )
用云栖社区APP,舒服~
【云栖快讯】直播推荐——现在报名3月12日编程语言系列讲座,与行业资深专家一起学习Python、C++、JavaScript、Java!还可在活动页面领取红包,百分百中奖哦!&&
文章2303篇
以阿里云成熟的商业化云服务为基础,为游戏开发者、运营企业提供专属集群、尊享VIP服务、专项扶...
阿里云移动APP解决方案,助力开发者轻松应对移动app中随时可能出现的用户数量的爆发式增长、...
移动测试(Mobile Testing)是为广大企业客户和移动开发者提供真机测试服务的云平台...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效...安卓手机游戏怎么提取BGM文件_百度知道
安卓手机游戏怎么提取BGM文件
有一款特别喜欢的游戏,它的背景音乐特别好听,不知道怎么找到源文件,求指导
我有更好的答案
要先下载个手游模拟器·比如说手游部落!~
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。1590人阅读
android学习(65)
例如,现在在一个五子棋游戏中,我们需要在棋子落盘的时候播放一段声音。我们可以利用SoundPool,因为它时间很短,而且需要反复播放,并且我们不希望声音占用太大资源。
一般大家使用的是MediaPlayer来播放音频,它的创建和销毁都是非常消耗资源的,如果我们的需求是播放一些短促而且频繁播放的音频的话MediaPlayer就有些不合适了,我们来讲讲SoundPool来播放短促的音频:
SoundPool结构如下:
初始化SoundPool
初始化SoundPool 我们直接new SoundPool (int maxStreams, int streamType, int srcQuality)即可
参数解释:
在load方法中我们一般是把音频文件放到res的raw文件夹下,然后使用load(Context context, int resId, int priority)方法来加载音频到SoundPool中:
参数解释:
播放音频比较简单,使用play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
参数解释:
**总结一下播放一个音频的所需代码如下:**
//初始化SoundPool
private SoundPool soundPool= newSoundPool(10,AudioManager.STREAM_SYSTEM,5);
//加载deep 音频文件
soundPool.load(this,R.raw.deep,1);
//播放deep
soundPool.play(1,1, 1, 0, 0, 1);
如果我们在很多Activity中都要用到音频文件,比如给所有点击操作加上音效,那么我们每个Activity都要new ,然后load,在play,这样做是非常繁琐而且混乱的,那么我们做如下的分装:
* @author zsl
* @blog http://blog.csdn.net/yy
public class SoundPlayUtils {
// SoundPool对象
public static SoundPool mSoundPlayer = new SoundPool(10,
AudioManager.STREAM_SYSTEM, 5);
public static SoundPlayUtils soundPlayU
static Context mC
* @param context
public static SoundPlayUtils init(Context context) {
if (soundPlayUtils == null) {
soundPlayUtils = new SoundPlayUtils();
// 初始化声音
mContext =
mSoundPlayer.load(mContext, R.raw.beng, 1);// 1
mSoundPlayer.load(mContext, R.raw.click, 1);// 2
mSoundPlayer.load(mContext, R.raw.diang, 1);// 3
mSoundPlayer.load(mContext, R.raw.ding, 1);// 4
mSoundPlayer.load(mContext, R.raw.gone, 1);// 5
mSoundPlayer.load(mContext, R.raw.popup, 1);// 6
mSoundPlayer.load(mContext, R.raw.water, 1);// 7
mSoundPlayer.load(mContext, R.raw.ying, 1);// 8
return soundPlayU
* 播放声音
* @param soundID
public static void play(int soundID) {
mSoundPlayer.play(soundID, 1, 1, 0, 0, 1);
我们先把所有的文件都加载起来,用的时候直接查询看一下它是第几个加载的,然后直接调用play方法即可:
第一步:在程序入口的Activity的onCreate方法中添加如下代码:
//初始化音效
SoundPlayUtils.init(this);
第二步:在任何地方播放时,直接使用如下代码:
//播放声音
SoundPlayUtils.play(1);
//播放声音
SoundPlayUtils.play(7);
转载地址:
阅读:16310
文章:22篇
阅读:8320
阅读:15205

我要回帖

更多关于 视频文件中提取音频 的文章

 

随机推荐