问题描述:
使用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没有声音的更多相关文章

  1. win10 设置声卡驱动 --- 解决喇叭没有声音!

    win10 设置声卡驱动 --- 解决喇叭没有声音! 1)安装驱动,必须能够在:"控制面板\硬件和声音" 下找到安装好的: "Realtek高清晰音频管理器" ...

  2. CentOS Grub、BASH 故障、解决方法

    简介: Grub 常见的两种故障:Grub.conf 文件丢失.MBR 损坏 ( 不管恢复怎么样,还是先备份好吧 ) 一.Grub.conf 文件丢失 shell > rm -rf /boot/ ...

  3. 一次“MySQL server has gone away”故障及其解决

    1,问题现象 某次测试发现,程序失去响应.由于程序集成了EurekaLog组件,弹出了错误框.查看其给出的Call Stack信息,发现没有发生线程死锁(DeadLock=0;),问题在于 Wait ...

  4. 今天用pro安装nginx+php+mysql出现故障的解决方法

    今天用pro安装nginx+php+mysql出现故障的解决方法 by 伍雪颖 dyld: Library not loaded: @@HOMEBREW_CELLAR@@/openssl/1.0.1h ...

  5. [转载]Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

    Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论 转载至:https://www.sdnlab.com/17530.html 我们使用Linux作为服务器操作系统时,为了达到高并发处理 ...

  6. 故障解决 | win10没声音及找不到Realtek高清音频管理器

    重装 win10 系统后,电脑没声音,更新驱动以及万不得已下载驱动精灵都没有解决. 后来发现在“硬件和声音”中没有Realtek高清音频管理器,之后找到解决办法如下: 1. 找到Realtek高清音频 ...

  7. SoundPool没有声音的问题

    在项目中需要播放一个提示,很短的一个声音,Android中播放声音有两种方式:MediaPlayer和SoundPool.相对来说SoundPool比较轻量级一些,多用在播放比较短急的声音,Media ...

  8. 开机出现Oxc000000e故障的解决方法

    Oxc000000e故障 故障表现:开机时不能正常地登录系统,而是直接弹出图2所示的Oxc000000e故障提示. 原因分析:由于安装或卸载某些比较特殊的软件,往往会对Win7的引导程序造成非常严重的 ...

  9. IIS7web服务器调试ASP.net程序遇到的一些故障的解决办法

    1. [由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面] 故障描述:[由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面] ...

随机推荐

  1. css3 伪类

    ::selection { 选中后的样式 } 链接 p:only-child     p的父级只有一个p标签 p:only-of-type   p的父级有一个p标签, 但还可以包含其他标签 p:fis ...

  2. NTP服务器和国内可用的NTP地址

    NTP 是什么?   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备[如计算机.手机]的时间的协议. NTP 实现什么目的?   目的很简单,就是为了提供准确 ...

  3. C#连接Sqlite

    1.Slite简介 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需 ...

  4. [QT][待解决问题]对话框ui载入卡顿问题

    电脑运行环境:win7 + qt-opensource-windows-x86-mingw530-5.8.0源码是 < Qt快速入门系列教程目录 > 第3篇 Qt5基础(三)Qt登录对话框 ...

  5. 【常用软件】木木的常用软件点评(2)------VC程序员常用工具篇

     摘自:http://blog.csdn.net/liquanhai/article/details/7215045 木木的常用软件点评(2)------VC程序员常用工具篇 分类: VC++经验总结 ...

  6. Sphinx 匹配模式

    所谓匹配模式就是用户如何根据关键字在索引库中查找相关的记录. SPH_MATCH_ALL, 匹配所有查询分词(默认模式); 如“手机配件”,不匹配 “我有一部手机”,但可以匹配 “手机坏了,需要找配件 ...

  7. 处理SQL Server 异常常用步骤

    处理SQL Server 异常常用步骤 SQL Server常见的问题主要是SQL问题造成,常见的主要是CPU过高和阻塞. 一.CPU过高的问题 1.查询系统动态视图查询执行时间长的sql语句 WIT ...

  8. HihoCoder 1053 居民迁移

    居民迁移 时间限制:3000ms 单点时限:1000ms 内存限制:256MB 描述 公元2411年,人类开始在地球以外的行星建立居住点.在第1326号殖民星上,N个居住点分布在一条直线上.为了方便描 ...

  9. Freemarker 自定义标签 实现TemplateDirectiveModel

    1 自定义标签需要实现TemplateDirectiveModel这个接口中的execute方法 实例代码如下 public class UserListDirective implements Te ...

  10. bzoj 3195 奇怪的道路

    Written with StackEdit. Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有\(n\ ...