[故障及解决]SoundPool没有声音
问题描述:
使用SoundPool类进行播放声音时,在手机上没有声音。
问题代码:
/**
* 声音播放
*/
private void playSound() {
SoundPool soundPool = new SoundPool(, AudioManager.STREAM_SYSTEM, );
soundPool.load(this, R.raw.beep, ); // 加载资源,返回1
soundPool.play(, , , , , ); // 播放,返回0
}
问题原因:
SoundPool池加载声音,在调用load方法的时候,是使用其他线程来加载资源的,所以上述代码在执行play方法的时候,资源还没有加载,故没有声音。
修改方法,就是中间留出足够的时间来进行加载声音文件,或追加加载完成的监听器来监听是否完成(SoundPool.OnLoadCompleteListener类的方法onLoadComplete(SoundPool soundPool, int sampleId, int status) )。
正确代码:
因为声音文件很小,所以就在onCreate方法中加载文件,后面进行播放。
private SoundPool soundPool; // 声音加载池
protected void onCreate(Bundle savedInstanceState) {
// 门声音预加载
soundPool = new SoundPool(, AudioManager.STREAM_SYSTEM, );
soundPool.load(this, R.raw.beep, );
}
/**
* 声音播放
*/
private void playSound() {
soundPool.play(, , , , , );
}
知识点延伸:
常用的播放类:
android中,同创进行声音播放的有MediaPlayer和SoundPool。
MediaPlayer:常用来播放长一些的音频、视频和流媒体,每次仅能播放一个,有控制播放的各种方法。
SoundPool:常用来播放短促并且实时性高的音频,每次可以多个同时播放,比方说游戏中的爆破声。
SoundPool类的播放方法(部分):
以上述代码为例,进行分析。当然都有其他的重载的方法。
SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);
->
public SoundPool(int maxStream, int streamType, int srcQuality)
初期化一个声音池。
maxStream:最大可放10个音频文件。
streamType:为声音的类型。如上为系统声音,其他还有音乐,铃声等等。
srcQuality:转化质量,默认为0。目前理解为,播放时的声音保真程度。一般对于短促的声音,影响不大。
soundPool.load(this, R.raw.beep, 1);
->
public int load(Context context, int resId, int priority)
通过本apk中的资源加载音频。其他加载方式还有,从Asset对象加载、从FileDescriptor对象加载、从全文件路径名加载。
context:本context。
resId:资源ID。
priority:加载优先级,一般为1。
返回值为int,表示加载的第几个文件。从1开始累加。这个返回1。
soundPool.play(1, 1, 1, 0, 0, 1);
->
public int play(int soundID, float leftVolume, float rightVolume,int priority, int loop, float rate);
播放声音文件。
soundID:表示流中第几个文件,为load方法的返回值。和load方法配合使用,见过用map进行传递数据。(实际上我感觉没必要)
leftVolume:左音量,通常为1。
rightVolume:右音量,通常为1。
priority:优先度,通常为0。
loop:是否循环。0表示不循环,1以上表示循环次数。
rate:表示播放速率。0.5-2之间。0.5表示减慢50%,2表示加速播放。
[故障及解决]SoundPool没有声音的更多相关文章
- win10 设置声卡驱动 --- 解决喇叭没有声音!
win10 设置声卡驱动 --- 解决喇叭没有声音! 1)安装驱动,必须能够在:"控制面板\硬件和声音" 下找到安装好的: "Realtek高清晰音频管理器" ...
- CentOS Grub、BASH 故障、解决方法
简介: Grub 常见的两种故障:Grub.conf 文件丢失.MBR 损坏 ( 不管恢复怎么样,还是先备份好吧 ) 一.Grub.conf 文件丢失 shell > rm -rf /boot/ ...
- 一次“MySQL server has gone away”故障及其解决
1,问题现象 某次测试发现,程序失去响应.由于程序集成了EurekaLog组件,弹出了错误框.查看其给出的Call Stack信息,发现没有发生线程死锁(DeadLock=0;),问题在于 Wait ...
- 今天用pro安装nginx+php+mysql出现故障的解决方法
今天用pro安装nginx+php+mysql出现故障的解决方法 by 伍雪颖 dyld: Library not loaded: @@HOMEBREW_CELLAR@@/openssl/1.0.1h ...
- [转载]Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论
Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论 转载至:https://www.sdnlab.com/17530.html 我们使用Linux作为服务器操作系统时,为了达到高并发处理 ...
- 故障解决 | win10没声音及找不到Realtek高清音频管理器
重装 win10 系统后,电脑没声音,更新驱动以及万不得已下载驱动精灵都没有解决. 后来发现在“硬件和声音”中没有Realtek高清音频管理器,之后找到解决办法如下: 1. 找到Realtek高清音频 ...
- SoundPool没有声音的问题
在项目中需要播放一个提示,很短的一个声音,Android中播放声音有两种方式:MediaPlayer和SoundPool.相对来说SoundPool比较轻量级一些,多用在播放比较短急的声音,Media ...
- 开机出现Oxc000000e故障的解决方法
Oxc000000e故障 故障表现:开机时不能正常地登录系统,而是直接弹出图2所示的Oxc000000e故障提示. 原因分析:由于安装或卸载某些比较特殊的软件,往往会对Win7的引导程序造成非常严重的 ...
- IIS7web服务器调试ASP.net程序遇到的一些故障的解决办法
1. [由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面] 故障描述:[由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面] ...
随机推荐
- New Concept English three (43)
30 54 Insurance companies are normally willing to insure anything. Insuring public or private proper ...
- 如何复制一个java对象(浅克隆与深度克隆)
在项目中,有时候有一些比较重要的对象经常被当作参数传来传去,和C语言的值传递不同,java语言的传递都是引用传递,在任何一个地方修改了这个对象的值,就会导致这个对象在内存中的值被彻底改变.但是很多时候 ...
- 在Wifi网络中嗅探明文密码(HTTP POST请求、POP等)
全世界,现在大约50%的网站没有使用SSL加密,天朝尤其多. 我们都知道通过HTTP发送的数据都是明文,没有使用任何加密,即使是在数据敏感的登录页面. 本文的目的是:如果你在不熟悉的网络环境中,要注意 ...
- 【学习】Git和Github菜鸟入门
Git 是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. 目录(自己创建吧) 生成ssh密钥:ssh-keygen -t rsa -C "邮箱" ...
- ActiveMQ面试题
什么是activemq activeMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信. activemq的作用以及原 ...
- jstl中的用法
版权声明:本文为博主原创文章,未经博主允许不得转载. 在JSP的开发中,迭代是经常要使用到的操作.例如,逐行的显示查询的结果等.在早期的JSP中,通常使用Scriptlets来实现Iterator或者 ...
- 剑指offer-第六章面试中的各项能力(数组中只出现一次的数字)
题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字. 思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字.那么我们该怎么分呢?将整个数 ...
- 对Servlet规范的蜻蜓点水
现在我们大家基本都用struts或springmvc进行java web的开发,但我们都知道java web的核心技术是jsp servlet javabean的组合.因此很有必要知道servlet规 ...
- 转: django数据库操作-增删改查-多对多关系以及一对多(外键)关系
原文链接:http://blog.csdn.net/u010271717/article/details/22044415 一.一对多(外键) 例子:一个作者对应多本书,一本书只有一个作者 model ...
- SharePoint 创建列表并使用Windows Presentation Foundation应用程序管理列表
SharePoint创建列表并使用程序管理列表 列表是SharePoint开发者输入数据的方式之中的一个.使用Web界面创建一个列表并加入一些数据.过程例如以下: 1. 打开站点. 2 ...