Project1

标题: 如何实现“同一时间只能播放一段音效”的效果? [打印本页]

作者: 喵呜喵5    时间: 2013-11-3 11:20
标题: 如何实现“同一时间只能播放一段音效”的效果?
本帖最后由 喵呜喵5 于 2015-12-29 09:56 编辑

我使用默认的播放SE功能作为游戏的语音功能,每句对话后面都增加一个播放语音的事件
但是,如果玩家按键比较快的话,多段语音会同时播放,明显不科学
目前的做法是把语音做成一段动画,然后对同一个事件播放动画,之前的动画没有播放结束前后一个动画就会被自动忽略

然而感觉用起来还是很麻烦……所以我希望实现“同一时间只能播放一段SE”的效果,前一段SE没有播完之前下一段SE的播放会自动忽略

更进一步,我希望音效A在音效B没有播完之前不能播放但在音效C没有播完之前可以播放,而同时音效D则在音效E播完之前不能播放…………即给音效进行分组,在相同分组中的音效同一时间只能播放一个。
当然,出于方便考虑,我希望这些分组也是动态的,能在游戏中实时的修改。

总之,谢谢大家了(鞠躬)
{:2_253:}




2 年后回来扫自己的旧帖子

这个解决方案其实不错: https://rpg.blue/thread-371224-1-1.html

作者: 余烬之中    时间: 2013-11-3 11:20
本帖最后由 余烬之中 于 2014-7-25 12:44 编辑

本来打算通过system来访问注册表获取音频文件以及拓展名…………
想想还是没有必要 就算可以访问RTP 如果作者忘记打包音频还是没有用
需要自行设置的是一开始的比特率,因为这东西貌似不是固定的…… 改成了设置每个声音的长度
以及音效组@group
可以通过事件来增添列表 你应该看得懂 但是还是解释一下:
Smomo.segroup(operator, first = nil, second = nil)
这是唯一的操作方法
operator的取值:
  :get
  获取当前的@group,另外两个参数没有意义
  :append
  向first组中新增项second
  :delete
  删除first组中的second
    如果second为nil或false 则删除first整个组
    如果first为nil或false 则删除所有组中的second
    两个都为nil或false 报错没商量
  :init
    调用init方法
  :reset
    调用reset方法
  其他
    报错

简单的测试了一下 应该没有问题 就算有我最近也不能来修……
我是代码

作者: 熊喵酱    时间: 2013-11-3 11:27
介個看一下?
http://forums.rpgmakerweb.com/in ... 5-basic-message-se/
作者: 余烬之中    时间: 2013-11-3 11:38
本帖最后由 余烬之中 于 2013-11-9 19:03 编辑

11楼
作者: Sion    时间: 2013-11-3 20:07
你要播放另外的SE之前调用 Audio.se_stop 不就行了。
作者: 喵呜喵5    时间: 2013-11-3 21:00
Sion 发表于 2013-11-3 20:07
你要播放另外的SE之前调用 Audio.se_stop 不就行了。

如果有多段SE同时播出比如角色一边开门一边说话的时候,Audio.se_stop不是连开门的音效也stop了?
作者: Sion    时间: 2013-11-3 21:10
喵呜喵5 发表于 2013-11-3 21:00
如果有多段SE同时播出比如角色一边开门一边说话的时候,Audio.se_stop不是连开门的音效也stop了? ...


能不能不要一边开门一边说话{:2_276:}
  1. sec = File.size("Shape of my heart.mp3") * 8 / 192000
  2. print sec / 60, " ", sec % 60
复制代码
这个代码可以计算出固定比特率(上例是192kbps)的mp3文件时间长度,换算成帧数应用到游戏中就可以了吧。
作者: 喵呜喵5    时间: 2013-11-3 21:41
Sion 发表于 2013-11-3 21:10
能不能不要一边开门一边说话这个代码可以计算出固定比特率(上例是192kbps)的mp3文件时间长度 ...

OGG、WAV格式有类似的代码吗?
SE有没有pos属性?
作者: tan12345    时间: 2013-11-3 21:49
本帖最后由 tan12345 于 2013-11-3 21:50 编辑

看了那么久,我才大概理解你的意思……
你想要的是在进行事件过程中,会有各种声音:人物说话声,开门声等等,你需要分组,一组并行播放,一组串行播放(就是上一个完了才可以播放下一个),人物说话声必须是串行播放,而开门声这一类背景声则需要并行播放,不知道理解对不对……
作者: 布里蓝    时间: 2013-11-5 09:50
要不要试试用BGS播放语言,记得BGS是一次只能播放一个?(我没试过,LZ自己去试试吧)
作者: 喵呜喵5    时间: 2013-11-5 10:32
布里蓝 发表于 2013-11-5 09:50
要不要试试用BGS播放语言,记得BGS是一次只能播放一个?(我没试过,LZ自己去试试吧) ...

只能播放一个,并且BGM会淡出……




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1