Android SoundPool.play方法的音量与系统音量的关系
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的音量参数做详尽的说明,不过我们自己需要注意哦,否则就容易出现问题。
转载于:https://www.cnblogs.com/hehehaha/p/6147407.html
Android SoundPool.play方法的音量与系统音量的关系相关推荐
- android soundpool设置音量,Android SoundPool.play方法的音量与系统音量的关系
Android中播放音频,除了使用MediaPlayer,还可以使用SoundPool.SoundPool使用音效池的概念来管理多个短促的音效,对于需要短促的提示音的场景特别合适. 通常调用Sound ...
- iOS 设置系统音量和监听系统音量变化
很简单的调用 首先在工程引入MediaPlayer.framework #import <MediaPlayer/MediaPlayer.h> 1. 获取系统音量 // 获取系统音量 MP ...
- android多音频输出,基于Android车载系统的多路音频输出的方法、装置及系统与流程...
本发明涉及Android车载系统领域,特别涉及一种基于Android车载系统的多路音频输出的方法.装置及系统. 背景技术: 车载系统主要由主机.显示屏.操作键盘(遥控器)和天线组成.它实现了野外踏勘. ...
- android系统音量监控
当应用程序通过AudioManager的setStreamVolume方法设置音量时,会发送如下代码广播: Intent intent = new Intent(AudioManager.VOLUME ...
- android小工具-系统音量管理器
简介:调节系统音量的小工具,能够快捷的调节系统铃声,媒体音乐.闹钟和通话声音.你可能会想,手机自带的音量键还不够快捷吗?还得写个程序?首先,用音量键调音只能调节一种声音,像闹钟这种声音不能直接调.其次 ...
- android通话音量和多媒体音量,Android中获取与设置媒体,通话等音量的方法
获取系统音量 通过程序获取android系统手机的铃声和音量.同样,设置铃声和音量的方法也很简单! 设置音量的方法也很简单,AudioManager提供了方法: public void setStre ...
- android intent铃声选择,Android 设置系统铃声和系统音量
android系统铃声设置 public class Main extends Activity { /** Called when the activity is first created. */ ...
- Android x86启动后拖动系统音量设置
基于Android x86 android 9. 1.进入系统音量设置(系统 app)中,拖动媒体音量控制条控件,可以输出声音=>ok dumpsys audio: 可以看到player有sta ...
- Android 修改系统音量及监听
效果 修改系统音量这种操作还是挺常见的,一般在多媒体开发中都多少会涉及到. 常用方法 获取音频管理器 mAudioManager = this.getSystemService(Context.AUD ...
最新文章
- bug诞生记——const_cast引发只读数据区域写违例
- pytorch 测试每一类_DeepFM全方面解析(附pytorch源码)
- 爬虫基础分享Scrapy框架流程图与安装
- swift自行车品牌介绍_品牌101:简介
- 使用通用mapper实现条件查询_【微服务】152:Stream流和通用mapper批量查询的使用...
- python字符串相加_Python实用技法第33篇:字符串连接及合并
- mysql全局变量的使用_mysql - 变量的使用
- python 线程同步_python线程同步(2)
- Shell编程语言(一)
- html安装方正兰亭,方正兰亭字体
- [012计算机网络系列] | Cisco packet 怎样清空一台PC的ARP Table?
- potentially fixable with the `--fix` option.
- OpenHarmony开发环境WSL2配置踩坑
- html5最新滚动效果,jQuery和CSS3炫酷滚动页面内容元素动画特效插件
- 北上广租房技巧(希望大家都少走点坑)
- 社区社群运营,如何打造火爆营销的方法?
- Python实现list列表的有序子集查找
- 【Spring系列】- 手写模拟Spring框架
- 自动发帖程序的一些总结
- 牛客客似云来(大数算法)
热门文章
- python turtle画圆、循环法_实验与作业(Python)-03 Python程序实例解析(函数、循环、range、turtle)...
- 如何读取服务器的文件夹大小,请教如何获取outlook文件夹对话框中服务器数据大小?...
- python深入与提高_关于提高Python计算性能的说明摘要,深入,提升,python,笔记,小结,不,定时,更新...
- python csv文件写入失败_python解析csv文件失败
- dj打碟怎么学_南京学DJ打碟
- MATLAB学习笔记(一)
- eclipse新建项目有红叉_selenum+java+eclipse环境搭建和浏览器驱动配置
- 信息系统项目管理师优秀论文:项目风险管理
- Jquery获取select标签的值、文本方式
- Winform中设置Dialog的显示位置居中