停止声音得方法有很多种,这里以一个例子讲解在实际应用中遇到得问题。我们知道在fmod中会提供一个StudioEventEmitter的类,它是继承自MonoBehaviour的,我们可以在上面配置一个event的名字,然后设置其播放的声明周期。
这是通常的一种做法,而实际使用中,由于MonoBehaviour特别多,会吃性能,所以我们通常的做法是,写一个池子复用。

比如:RuntimeStudioEventEmitter
我们只是将StudioEventEmitter中播放声音的方法copy到这个类中。
在fmod中其真正的播放的步骤就3步:

  1. 找EventDescription
  2. 创建EventInstance
  3. 执行start方法

所以这个类就比较好些了。代码如下:

 public class RuntimeStudioEventEmitter{public String Event = "";public List<ParamRef> Params = null;public Vector3 Pos = Vector3.zero;private FMOD.Studio.EventDescription eventDescription;private FMOD.Studio.EventInstance instance;// private bool hasTriggered = false;public static bool isQuitting = false;public FMOD.Studio.EventInstance EventInstance { get { return instance; } }……//此处略去,可以照搬StudioEventEmitter
}

那上层就可以复用这个RuntimeStudioEventEmitter类了,可以做个池子。
这里的问题也就带出来了一个,如果这个RuntimeStudioEventEmitter是复用的,那么instance成员只记录了当前播放的实例,而之前的实例如何停止呢?

这里提供两个方法:
1、创建一个list,保存每次播放的实例,然后for循环停止
public List<FMOD.Studio.EventInstance> instances = new List<FMOD.Studio.EventInstance>();

for (int i = 0; i < e.instances.Count; ++i)
{if (e.instances[i].isValid()){bool isPause = false;e.instances[i].getPaused(out isPause);if (isPause) //如果是pause状态,设置为非pause状态,然后才能释放,需要连fmod profiler查看{e.instances[i].setPaused(false);}e.instances[i].stop(FMOD.Studio.STOP_MODE.IMMEDIATE);}
}

2、使用EventDescription的getInstanceList获取实例,然后停止
events这个就要外部记录到底播放了哪些名字的event了。

for (int i = 0; i < events.Count; ++i)
{FMOD.Studio.EventDescription eventDescription = RuntimeManager.GetEventDescription(events[i]);eventDescription.getInstanceList(out array);if (array != null){for (int j = 0; j < array.Length; ++j){if (array[j].isValid()){array[j].stop(mode);array[j].release();array[j].clearHandle();}}}}

两种方法经过测试都是可行的。

fmod使用缓冲池之后,如何停止之前播放的声音相关推荐

  1. java 停止线程播放音频_Notification 播放 关闭 声音----转载

    NotificationPlayer.java 定义一个播放Notification声音的player,本质上仍然是一个MediaPlayer,这个是多线程编程的很好的例子 public class  ...

  2. 暂停停止继续播放 0201 winform

    暂停停止继续播放 0201 winform 暂停 继续播放 停止

  3. gif在html里为何会自动停止,CSS或JS实现gif动态图片的停止与播放

    一.屋外:寒风吹,雪花飘:屋内:空调吹,代码飘 上午出去买菜,正好下雨了,还夹杂着冰珠子.鄙人大意,穿的是一件帅气但单薄的黄色大衣,立马冻成了中华田园犬.原本计划去钓鱼的,科科,作罢,上午在家看CCT ...

  4. 微信小程序录音功能的实现:有录音、暂停、继续、停止 、播放等功能。

    微信小程序录音功能的实现:有录音.暂停.继续.停止 .播放等功能. 网上找了半天都没找到合适的demo,很多就不完全,看着都有点难受,看了官方的api ,干脆自己写一个 界面如下图 看了网上大部分人写 ...

  5. CSS或JS实现gif动态图片的停止与播放

    by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=5081 一. 对于习 ...

  6. iOS开发-停止WebView播放视频/音频 1

    很多时候在WebView播放视频的时候,会有一些通知或者其他语音播报的内容,这个时候就要暂停WebView正在播放的视频了. 通过JS直接控制网页中的 video/media标签 // 停止视频播放 ...

  7. 1.可选择8种节日彩灯模式; 2.可调节彩灯流动方向; 3.可调节彩灯流动速度; 4.独立按键启动/停止蜂鸣器播放音乐; 5.通过电位器控制音量;...

    这是一个关于节日彩灯的设备的描述,具有以下功能: 可以选择8种不同的节日彩灯模式: 可以调整彩灯流动的方向: 可以调整彩灯流动的速度: 有一个独立按键,可以启动或停止蜂鸣器播放音乐: 可以通过电位器来 ...

  8. win10电脑插耳机没声音_Win10如何录制电脑内部播放的声音

    有很多Win10系统用户常常会碰到需要录制电脑内部声音的情况,比如录制在线视频中的背景音乐,录制在线播放的歌曲,或者一些网页上的其它声音.如果通过先播放,再通过麦克风进行录制的话,无疑音质会大打折扣. ...

  9. iPhone 播放音频声音文件

    播放音频声音文件 iphone开发中播放声音文件主要使用AVAudioPlayer 类,它的功能非常强大支持播放音频的格式也非常的多,我们可以把它看成一个高级的音乐播放器,它支持的播放格式有 ■ AA ...

最新文章

  1. 深度优先搜索找迷宫的出路
  2. 含有负边的图的最短路径(Bellman_ford算法)
  3. win2000server IIS和tomcat5多站点配置
  4. dom4j Java解析xml应用
  5. R金融统计:收益、随机行走和模拟
  6. python2与_python2和python3的区别
  7. 服务器和硬盘如何区分,服务器硬盘和普通硬盘区别介绍
  8. java sql注入正则表达式_php防止sql注入示例分析和几种常见攻击正则表达式
  9. C结构和C++结构之间的区别是什么?
  10. Netlink套接字
  11. ABBYY15Mac最新版OCR文字识别软件
  12. Linux运维遇到的基本问题解决大全
  13. LQ0187 猜年龄【填空题】
  14. 解决word中公式与右编号上下不居中的问题
  15. Mac电脑Finder侧边栏不显示iCloud云盘怎么办?
  16. R语言分组求和,分组求平均值,分组计数
  17. main()的使用说明 (一叶知秋)
  18. 【plang 1.4.4】编写贪吃蛇脚本
  19. 计算机教案在幻灯片中插入影片,在幻灯片中插入影片和声音教学设计
  20. linux设置管理员身份运行,在Deepin V20系统下添加以管理员身份打开选项的两种方法...

热门文章

  1. 汇编:计算字符串长度
  2. 现行的常用的文件格式类别 简析
  3. 经典查询练手第四篇(不懂装懂,永世饭桶!)
  4. 平面图形计算机绘图原理,计算机绘图实验
  5. 管理系统-------SPU
  6. JavaScript内置方法-Date对象
  7. unexpected EOF!
  8. 上周听SMARTCLIENT讲座感受
  9. 京东抢购秒杀助手—小桃子版
  10. 近端算法:近端最小化(Proximal minimization)、近端梯度(PG)、加速近端梯度(APG)、ADMM