Android SoundPool.play方法的音量与系统音量的关系
来源:互联网 发布:联通数据卡流量查询 编辑:程序博客网 时间:2024/04/30 15:14
Android中播放音频,除了使用MediaPlayer,还可以使用SoundPool。SoundPool使用音效池的概念来管理多个短促的音效,对于需要短促的提示音的场景特别合适。
通常调用SoundPool.load来加载某个音频文件,获得一个音效id,然后就可以用play方法来播放。
SoundPool的play方法原型如下:
int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate);
play方法第二、三个参数用于指定左右声道的音量,取值范围是0.0~1.0。这里要说的就是这个音量值与系统音量的关系。
比如你使用AudioManager.STREAM_MUSIC或者AudioManager.STREAM_VOICE_CALL来播放提示音,此时的媒体音量或通话音量为 A (AudioManager.getStreamVolume(AudioManager.STREAM_MUSIC
),那使用SoundPool.play方法播放音效时,实际的音量大小,就相当于:
leftVolume * A
注意,实际的音量效果,是乘积关系。
下面是网上流传的一段代码,其中对音量的设置就存在一个容易忽略的Bug:
AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);int currentVolume = am.getStreamVolume(AudioManager.STREAM_MUSIC);int maxVolume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);float volume = ((float)currentVolume)/maxVolume;...mSoundPool.play(soundID, volume, volume, 1, -1, 1);
上面的代码根据当前媒体音量和媒体音量的最大值,计算出一个比值传递给play方法,作为左右声道的音量,这样的结果是缩小了实际音量!尤其是(Bug),你在播放开始前将媒体音量调整为0,开始播放后,你将听不到声音!此时你再通过音量键调整音量,也听不到声音!(我今天刚解了一个类似的Bug)
所以,如果想按照用户设置的音量来播放音效,正确的做法是:
mSoundPool.play(soundID, 1, 1, 1, -1, 1);
而如果想按系统设置音量的一半来播放音效,则可以用类似下面的代码:
mSoundPool.play(soundID, 0.5f, 0.5f, 1, -1, 1);
Android开发文档没有SoundPool.play的音量参数做详尽的说明,不过我们自己需要注意哦,否则就容易出现问题。
- Android SoundPool.play方法的音量与系统音量的关系
- Android系统的音量控制
- android控制音量的方法
- Android中自定义SeekBar来控制音量,并与系统音量键的操作保持同步
- android笔记:android系统各种音量的获取与设置
- android控制soundpool播放音量
- AudioManager 修改系统Android系统的音量
- android系统各种音量的获取与设置
- android系统各种音量的获取与设置
- android系统各种音量的获取与设置
- android系统各种音量的获取与设置
- android系统各种音量的获取与设置
- 设置系统的音量
- 修改系统音量(SystemVolume)的方法
- windows下调节系统音量的方法
- 获取android系统手机的各种音量
- Android系统默认音量的调整
- 使用AudioManager设置Android系统的音量
- 【poj3537】 Crosses ans Crosses
- 转一个AUTOMAKE的教程
- 文章标题
- DOM特效之tab切换的实现
- hdu 1022 Train Problem I(栈)
- Android SoundPool.play方法的音量与系统音量的关系
- php过滤html标记属性类用法实例
- 文章标题
- 安卓Service绑定方式启动服务并调用服务中的方法
- 元素出入栈的合法性——栈和队列面试题(4)
- MarkDown常用语法总结
- weight decay and learning rate
- ios 线程
- 文章标题