原文地址:http://blog.sina.com.cn/s/blog_4119bd830100slh3.html
1、new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
第一个参数是允许有多少个声音流同时播放,第2个参数是声音类型,第三个参数是声音的品质。

2、使用MediaPlayer来播放音频文件存在一些不足:
如:资源占用量较高、延迟时间较长、不支持多个音频同时播放等。
这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中。
虽然MediaPlayer有提供自带的setLooping(true/false);这个方法,但在循环的间歇会有明显的停顿,应该是做了重新加载或者某些初始化的操作造成的吧,后来我决定不用它自带的循环函数来做循环,而是使用它的另一个函数:getCurrentPosition(),用它可以检测声音播放的偏移,我让它刚好放完或者快要放完的时候手动seekTo(position);这样就可以规避掉中间停顿的问题,代码如下:

if (mMediaPlayer.getCurrentPosition() >= 15800)
{
mMediaPlayer.seekTo(50);
}

3、 相对于使用SoundPool存在的一些问题:

(1) SoundPool最大只能申请1M的内存空间,这就意味着我们只能使用一些很短的声音片段,而不是用它来播放歌曲或者游戏背景音乐(背景音乐可以考虑使用JetPlayer来播放)。

(2) SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。

(3)音频格式建议使用OGG格式。使用WAV格式的音频文件存放游戏音效,经过反复测试,在音效播放间隔较短的情况下会出现异常关闭的情况(有说法是SoundPool目前只对16bit的WAV文件有较好的支持)。后来将文件转成OGG格式,问题得到了解决。

(4)在使用SoundPool播放音频的时候,如果在初始化中就调用播放函数进行播放音乐那么根本没有声音,不是因为没有执行,而是SoundPool需要一准备时间!当然这个准备时间也很短,不会影响使用,只是程序一运行就播放会没有声音罢了。

4、SoundPool最大只能申请1M的内存空间:(还有种说法是不能超过5.6秒)
SoundPool.load()方法返回音频id,而且这个id会因音频文件的大小而变大变小,那么一旦我们的音频文件超过int最大值,那么就会报内存错误的异常。所以为什么用SoundPool只能播放一些简短的音频这就是其原因了。

5、怎么才知道一首歌曲播放完了,那么这里给说下:
PlaybackCompleted状态:文件正常播放完毕,而又没有设置循环播放的话就进入该状态,并会触发OnCompletionListener的onCompletion()方法。此时可以调用start()方法重新从头播放文件,也可以stop()停止MediaPlayer,或者也可以seekTo()来重新定位播放位置。

注意:
(1)别忘记绑定操作! mp.setOnCompletionListener(this);
(2)如果你设置了循环播放 mp.setLooping(true); 的话,那么永远都不会监听到播放完成的状态!!!!这里一定要注意!

6、调节音量:

//
// Android OS中,如果你去按手机上的调节音量的按钮,会分两种情况,
// 一种是调整手机本身的铃声音量,一种是调整游戏,软件,音乐播放的音量
// 当我们在游戏中的时候 ,总是想调整游戏的音量而不是手机的铃声音量,
// 可是烦人的问题又来了,我在开发中发现,只有游戏中有声音在播放的时候
// ,你才能去调整游戏的音量,否则就是手机的音量,有没有办法让手机只要是
// 在运行游戏的状态就只调整游戏的音量呢?试试下面这段代码吧!
//
// 设定调整音量为媒体音量,当暂停播放的时候调整音量就不会再默认调整铃声音量了
MainActivity.instance.setVolumeControlStream(AudioManager.STREAM_MUSIC);


AudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, (int)volume, AudioManager.FLAG_PLAY_SOUND);
是设置指定类型的所有流的音量;
MediaPlayer.setVolume(leftVolume, rightVolume);
是设置左右声道的音量, 但只设置当前player。

更多相关文章

  1. Android自带音乐播放器专辑图片相同的问题
  2. android播放器(music player)源码分析3(页面解析,ArrayListCursor)
  3. 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音
  4. Unity3d中MicroPhone的使用
  5. 【Android】MediaPlayer使用方法简单介绍
  6. Android开发本地及网络Mp3音乐播放器(五)实现专辑封面图片
  7. Android(安卓)KK上对ALC5616调试笔记——音量调节
  8. Android(安卓)Studio FFmpeg视频解码播放
  9. android开发音乐播放器之进度条

随机推荐

  1. android APP上线前,应该准备的东西
  2. 面面具到!android重力传感器
  3. Win10 Linux子系统编译Android系统源码
  4. Android:Service生命周期方法与Service启
  5. 刷机总结(阿里云os-->android4.2.2)注明:本
  6. Xamarin.Android-捕获未处理异常(全局异常
  7. Android(安卓)VR Player(全景视频播放器) [
  8. Android下的微博(新浪)-->第一步获取未授权
  9. 封闭与开放?乔布斯对Android的口水战
  10. Android(安卓)11 第二个开发者预览版发布