主题:  声音检测的Behavior

steven5d

职务:普通成员
等级:1
金币:0.0
发贴:63
注册:2001/6/11 12:06:58
#12001/11/6 11:08:51
我想做一个声音检测的Behavior,用来检测声音的播放,若某一个声音已经播放完毕,则go the frame+1,否则go the frame。(我在处理播放较长声音的时候,通常是这么做的,不知道有没有其他的方法)但是每次都要导入一次脚本,很麻烦。这里有没有文章详细介绍怎样制作可加入Behavior库中的Behavior的方法?或者是已经有现成的更好的方法,请各位高手指点。



草原风

职务:版主
等级:5
金币:13.0
发贴:3489
注册:2001/2/17 19:47:06
#22001/11/6 11:22:02
if soundbusy(?0)=false
then go to frame+1
end if

编辑历史:[这消息被草原风编辑过(编辑时间2001-11-06 11:22:23)]


steven5d

职务:普通成员
等级:1
金币:0.0
发贴:63
注册:2001/6/11 12:06:58
#32001/11/6 11:27:10
草原风在上个帖子中说
引用:
if soundbusy(?0)=false
then go to frame+1
end if

斑竹误会我的意思了,我是说可不可以做一个Behavior,可以加入到Library里重复使用,具体需用那一段声音,声音的大小都可以用参数选择。我知道可以用getPropertyDescriptionList建立Parameters对话框,可是不知道该怎样具体实施。另外,如果已经有人做好这方面的东西,我也可以不用费那么大工夫去研究了。:)



x1976

职务:普通成员
等级:1
金币:0.0
发贴:12
注册:2001/10/31 16:10:57
#42001/11/7 13:39:58
steven5d在上个帖子中说
引用:
草原风在上个帖子中说
我知道可以用getPropertyDescriptionList建立Parameters对话框,可是不知道该怎样具体实施。另外,如果已经有人做好这方面的东西,我也可以不用费那么大工夫去研究了。:)

如果不会用getPropertyDescriptionList建立Parameters对话框,可能就写不出通用性强的behavior了,这个还是值得研究的



steven5d

职务:普通成员
等级:1
金币:0.0
发贴:63
注册:2001/6/11 12:06:58
#52001/11/7 16:33:07
x1976在上个帖子中说
引用:
steven5d在上个帖子中说
引用:
草原风在上个帖子中说
我知道可以用getPropertyDescriptionList建立Parameters对话框,可是不知道该怎样具体实施。另外,如果已经有人做好这方面的东西,我也可以不用费那么大工夫去研究了。:)

如果不会用getPropertyDescriptionList建立Parameters对话框,可能就写不出通用性强的behavior了,这个还是值得研究的

是啊是啊,我其实想要仔细研究一下的,可是我手头所有的书在这方面都语焉不详,所以希望有人能够之点一下。



steven5d

职务:普通成员
等级:1
金币:0.0
发贴:63
注册:2001/6/11 12:06:58
#62001/11/9 15:13:49
不会吧?这个问题没人会吗?或者不想说?应该有人写过这类的东西吧?



mmzr

职务:普通成员
等级:1
金币:0.0
发贴:87
注册:2000/10/31 19:46:45
#72001/11/9 20:27:08
这个用不着写行为吧,在tempo 属性对话框里有wait for cue point呀!



南山东篱摄螂

职务:普通成员
等级:4
金币:10.0
发贴:1840
注册:2000/10/22 10:31:19
#82001/11/10 2:20:50
我这里有一段以前写的,我现在拿出来做些解释吧。

on getPropertyDescriptionList
TheCurrentMember = sprite(the currentSpriteNum).member.number
-- mySoundChannel 是一个变量,要定义成 property 型。也是在对话框中要设置的参数。

return [#mySoundChannel : [#comment: "请选择声音通道(1-8):", \ --提示语,将显示在对话框中
#format: #integer, \ --变量的类型,integer是整数,String 是文本串,member是造型成员,sound是声音成员,bitmap是位图,等等
#default: 1, \ --是缺省值,
#range: [1, 2, 3, 4, 5, 6, 7, 8]],\ --range提供的是一个列表选择,或是一个选择范围。
#myPauseButton: [#comment: "哪一个是暂停按钮演员?",\
#format: #member,\
#default: member(TheCurrentMember+1)]]
end getPropertyDescriptionList

各部分间用逗号分隔,并写成一行,这里加 "\" 是为了分行,变量和关键字用 # 字引导,
格式你可以参考上例。时间关系就说这些了,有什么不明白的我们再讨论。



marker

职务:普通成员
等级:1
金币:0.0
发贴:65
注册:2001/11/7 15:56:52
#92001/11/10 11:49:11
steven5d在上面的帖子中写到:

引用
---------------------------------------------------------------------------------------------
我想做一个声音检测的Behavior,用来检测声音的播放,若某一个声音已经播放完毕,则go the frame+1,否则go the frame。(我在处理播放较长声音的时候,通常是这么做的,不知道有没有其他的方法)但是每次都要导入一次脚本,很麻烦。这里有没有文章详细介绍怎样制作可加入Behavior库中的Behavior的方法?或者是已经有现成的更好的方法,请各位高手指点。
----------------------------------------------------------------------------------------------

我按照你的要求做了一个简单的Behavior,你把它存为外部的演员列表,放到director目录下的LIBS子目录里,重新启动DIRECTOR,就可以在Library Palette中找到并使用它了,你可以把它拖到脚本通道中测试一下,有问题我们再讨论。

property pSoundChannel

on getpropertydescriptionlist me
plist=[:]
addprop plist,#pSoundChannel,[#comment:"要侦测的声音通道:",#format:#integer,#default:3]
return plist
end

on exitframe me
if soundbusy(pSoundChannel)=false then
go the frame+1
else
go the frame
end if
end


至于:
引用
--------------------------------------------------
斑竹误会我的意思了,我是说可不可以做一个Behavior,可以加入到Library里重复使用,具体需用那一段声音,声音的大小都可以用参数选择。我知道可以用getPropertyDescriptionList建立Parameters对话框,可是不知道该怎样具体实施。另外,如果已经有人做好这方面的东西,我也可以不用费那么大工夫去研究了。:)
-----------------------------------------------------
这段要求已经不是检测某个声音然后DO,而是设置了.



steven5d

职务:普通成员
等级:1
金币:0.0
发贴:63
注册:2001/6/11 12:06:58
#102001/11/12 15:20:14
哈哈哈,爽爽爽,成功了,请看下面。
property mySound,mySoundChannel,myVolume

on getPropertyDescriptionList
description = [:]
addProp description,#mySound,[#comment:"请选择要播放的声音",#format:#sound,#default:1]
addProp description,#mySoundChannel,[#comment:"请选择要播放的声音通道",#format:#integer,#default:1,\
#range:[1,2,3,4,5,6,7,8]]
addProp description,#myVolume,[#comment:"请选择声音大小",#format:#integer,#default:50,#range:[#min:0,\
#max:255]]
return description
end

on getBehaviorDescription
return "这个行为用来向声音通道中加入声音演员"
end getBehaviorDescription

on getBehaviorTooltip
return "这个行为用来向声音通道中加入声音演员"
end

on enterFrame me
puppetSound mySoundChannel,member mySound,myVolume
updateStage
end

这是添加声音的Behavior
property mySoundChannel

on getBehaviorDescription
return "用于检测某个声音通道的声音是否播放完毕"&Return&"若播放完毕,则向下播放,否则等待"
end

on getBehaviorTooltip
return "用于检测某个声音通道的声音是否播放完毕"&Return&"若播放完毕,则向下播放,否则等待"
end

on getPropertyDescriptionList
TheCurrentMember = sprite(the currentSpriteNum).member.number
return [#mySoundChannel : [#comment: "请选择声音通道(1-8):",\
#format:#integer,\
#default:1,\
#range:[1,2,3,4,5,6,7,8]]]
end getPropertyDescriptionList

on exitframe me
if soundbusy(mySoundChannel)=false then
go the frame+1
else
go the frame
end if
end

这是检测声音播放状态的Behavior

太高兴了,谢谢谢谢。

不过现在添加和检测必须放在不同的两帧,可不可以把它们两个合成一个呢?请大家再帮我看一下。



steven5d

职务:普通成员
等级:1
金币:0.0
发贴:63
注册:2001/6/11 12:06:58
#112001/11/12 15:42:06
刚才播放声音的Behavior有一点小错误,改动如下

on enterFrame me
sound(mySoundChannel).volume=myVolume
~~~~~~~~~~~~~~~~~~~~
puppetSound mySoundChannel,member mySound
updateStage
end

如果照原来的写法,声音大小不能控制



skylen

职务:普通成员
等级:1
金币:0.0
发贴:93
注册:2001/10/20 21:42:17
#122001/11/12 17:11:31
哈哈。大家 真是热闹啊。好东西来共享呀。

发个成品来吧:)



steven5d

职务:普通成员
等级:1
金币:0.0
发贴:63
注册:2001/6/11 12:06:58
#132001/11/12 17:15:53
skylen在上个帖子中说
引用:
哈哈。大家 真是热闹啊。好东西来共享呀。

发个成品来吧:)

已经发给你了,如果你有什么改进的意见,请不吝指教。谢谢。



skylen

职务:普通成员
等级:1
金币:0.0
发贴:93
注册:2001/10/20 21:42:17
#142001/11/13 14:14:01
已经收到。指教可真是不敢当啊。我是菜鸟一只:>