OPENGL相关 音效
Posted xzj_2013
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OPENGL相关 音效相关的知识,希望对你有一定的参考价值。
1.1 音效
按照作用可以将音效划分为两类:即时音效和背景音效。这两种音效在android中的实现技术是不同的。
即时音效
即时音效的特点是短暂、可以重复、可以同时播放。比如游戏中的枪炮声碰撞声等。
由于Android提供的mediaplay会占用大量的系统资源而且在播放时还存在缓冲较大的延时,因此用mediaplay无法实现即时音效。
android的设计者为即时音效的实现提供了SoundPool类,用于管理和播放程序中的声音资源。
需要注意由于SoundPool设计的初衷是用于无延时的播放短暂音效,因此实际开发中应该只将长度小雨7s的声音资源放入SoundPool,否则可能会出现加载失败或者占用内存过大。
实现代码
//初始化
private int initSoundPool()
soundPool = new SoundPool.Builder().build();
return soundPool.load(this,R.raw.musictest,1);
//播放
private void play()
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int maxVolume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int currentVolume = am.getStreamVolume(AudioManager.STREAM_MUSIC);
float volume = currentVolume/maxVolume;
soundPool.play(initSoundPool(),volume,volume,1,4,1.0f);
- 背景音效
其实现可以通过SoundPool循环播放也可以通过MediaPlayer来进行播放。
使用MediaPlayer播放必须熟悉其生命周期
①IDLE 使用new方法创建一个mediaplayer对象或者调用reset方法时,该MediaPlayer对象处于IDLE状态,区别在:在这种状态下如果调用getDurtion等方法,如果是reset进入会触发OnError进入onError状态,如果是new出新对象则不会触发也不会进入onError
②END 通过率release方法进入该状态,只要MediaPlayer不再使用就应该尽快的将其通过release方法释放掉,以释放去其占用的软硬件资源。如果进入了END状态就不会进入其他状态
③Intialized 通过setDataSource进入该状态,表示此时要播放的资源文件设置好了
④Prepared 与prepareAsyn()配合,准备完成会回调onPrepareListener
⑤Start prepare后调用start方法进入,可以通过isPlaying测试是否处于start状态
⑥Pause 暂停状态
⑦Stop状态
⑧PlaybackCompleted 播放完成状态
⑨Error状态
以上是关于OPENGL相关 音效的主要内容,如果未能解决你的问题,请参考以下文章