在之前我们用了从最上层开始层层追溯来获取目标的对象的方法。
在这一节里,我们要介绍通过别的手段,来批量获取对象的方法。
-从某一个对象以下的全部阶层中,批量获取同一种类的对象。
-从某一个对象以下的某一个子阶层中,批量获取同一种类的对象。
-批量获取在GUI中选择中的对象。
对象获取函数的种类
本节里我们使用find_object函数从工作单元到CueSheet使用递归法来检索,同时连续注册复数个波形文件到素材里,然后用素材创建相应的Cue。
在“工程的创建和波形文件的注册”里,我们只创建了一个Cue和素材,但是在实际的声音制作里,往往需要批量的创建一大批素材。
在这一步教程里,我们会继续使用之前的教程“工程的创建与注册波形文件到Cue”所创建的工程。因此需要事先完成上一步的教程。
脚本的说明
新建一个脚本,双击创建的脚本,通过脚本编辑器来打开脚本。
为了能够在脚本列表里确认该脚本的概要,首先输入以下的说明文:
#--Description:[教程]使用了find_object函数的复数波形文件的批量注册
模组的导入
为了在脚本里操作AtomCraft,需要导入相应的模组,记述以下的处理。
importos
importglob
importcri.atomcraft.debugasacdebug
importcri.atomcraft.projectasacproject
为了获取包含了波形文件的文件夹的地址,需要使用Python的glob模组。
使用glob模组,可以获取和指定的格式相同的文件地址格式。
除了操作工程所需的project模组,还需要导入Log输出所需的debug模组。
获取教程波形文件夹内的波形文件列表
使用glob模组,获取教程波形文件夹“/tutorial_data/tutorial_data02”以下的波形文件。
记述如下:
#获取波形文件列表
#获取教程波形素材文件夹tutorial_data/tutorial_data02地址
data_dir=os.path.dirname(os.path.dirname(__file__))+/tutorial_data/tutorial_data02
#使用glob获取data_dir内的文件
files=glob.glob(data_dir+/*)
iflen(files)==0:
acdebug.warning(data_dir+"里没有文件")
sys.exit()
glob.glob函数获取的文件地址列表存入files参数里。
然后,使用len函数检查files参数里存入的文件地址的数量,如果一个都没有的话就输出相应的Log,然后结束脚本执行。
获取素材文件夹和CueSheet
使用find_object函数来获取素材文件夹和CueSheet,代码如下:
#获取注册了波形文件的工作单元
workunit=acproject.get_workunit("WorkUnit_Tutorial")["data"]
#获取波形文件注册所在的素材根目录文件夹
material_root_folder=acproject.get_material_rootfolder(workunit)["data"]
#获取创建了Cue的CueSheet
cuesheet=acproject.find_object(workunit,"CueSheet","Tutorial")["data"]
find_object函数需要“作为检索根目录的对象”“获取的对象类型”“获取的对象名称”这三个参数,此函数会返回一个从根目录开始往下检索,然后和指定的条件完全一致的第一个对象。
从波形文件列表创建Cue
接下来使用以下的函数,从之前的文件地址列表中一个一个取出文件地址,然后根据素材来创建Cue。创建Cue使用create_simple_cue函数,然后使用for语句,用来连续处理glob.glob函数获取的文件地址列表,记述如下:
forfileinfiles:
#在素材根目录文件夹里注册波形文件,创建素材
material=acproject.register_material(material_root_folder,file)["data"]
#根据创建的素材信息创建Cue
acproject.create_simple_cue(cuesheet,material)
create_simple_cue函数能够创建基本的cue,需要指定“目标的CueSheet”,“Cue所参照的素材”这两个参数,创建的Cue的名称将会使用素材原本的名称。
保存工程
#工程的保存
result=acproject.save_project_all()
ifnotresult["succeed"]:
acdebug.warning("工程文件保存失败。")
acdebug.log("[教程]使用find_object函数&复数波形文件的批量注册完成")
脚本的保存和执行
到此为止本节的教程就完成了,保存并执行该脚本。如果构建正常结束了,在“tutorial_data2”里应该会注册了以下的波形文件,同时生成相应的Cue。
使用find_objects函数
在之前我们介绍的关于各种操作CRIAtomCraft的函数,在一次调用里都是只能获取一个对象,但是find_objects可以在一次调用里就可以获取复数个对象,非常方便。
在这一小节里我们会写一个让工作单元里所有的波形区域,设置voice限数组额脚本。
在这一步教程里,我们会继续使用之前的教程“工程的创建与注册波形文件到Cue”所创建的工程。因此需要事先完成上一步的教程。
脚本的说明
新建一个脚本,双击创建的脚本,通过脚本编辑器来打开脚本。
为了能够在脚本列表里确认该脚本的概要,首先输入以下的说明文:
#--Description:[教程]使用find_objects函数对波形区域批量设置voice限数组
模组的导入
为了在脚本里操作AtomCraft,需要导入相应的模组,记述以下的处理。
importsys
importcri.atomcraft.debugasacdebug
importcri.atomcraft.projectasacproject
除了操作工程所需的project模组,还需要导入Log输出所需的debug模组。
获取要设置的voice限数组
获取voice限数组需要使用和之前的教程“音频数据的输出”时获取TargetConfig时候同样的函数,具体记述如下:
#获取voice限数组文件夹
voicelimit_group_folder=acproject.get_global_folder("VoiceLimitGroupFolder")["data"]
#获取voice限数组“VoiceLimitGroup_0”
voicelimit_group=acproject.get_child_object(voicelimit_group_folder,"VoiceLimitGroup","VoiceLimitGroup_0")["data"]
使用get_global_folder函数可以从全局设置中的voice限数组文件夹获取用来进行同时发声数管理的voice限数组。这之后,使用get_child_object函数,获取voice限数组文件夹的下一层的voice限数组“VoiceLimitGroup_0”,然后放入voicelimit_group参数里。
获取需要设置voice限数组的波形区域
我们使用以下函数:
#获取工作单元
workunit=acproject.get_workunit("WorkUnit_Tutorial")["data"]
#使用find_objects,获取CueSheet里包含的波形区域列表
waveform_regions=acproject.find_objects(workunit,"WaveformRegion")["data"]
find_object函数需要“检索的根对象”,“获取的对象类型”,这两个参数。这次我们需要获取工作单元以下所有的波形区域。
最后我们使用之前获取的波形区域列表,使用for文,一个一个的设置voice限数组。
#使用for文,从波形区域列表中一个一个取出波形区域
forregioninwaveform_regions:
#给波形区域设置voice限数组
acproject.set_value(region,"VoiceLimitGroup",voicelimit_group)
acdebug.log("[教程]使用find_object函数&复数波形区域批量设置voice限数组完成")
脚本的保存和执行
到此为止本节的教程就完成了,保存并执行该脚本。如果正常执行,那么工作单元内的所有的波形区域都应该设置了voice限数组“VoiceLimitGroup_0”。
使用get_child_object函数
在本节教程里我们会使用get_child_object函数,来获取复数的对象。比如获取CueSheet下的所有的Cue,然后根据命名规则来进行类别的设置。
脚本的说明
新建一个脚本,双击创建的脚本,通过脚本编辑器来打开脚本。
为了能够在脚本列表里确认该脚本的概要,首先输入以下的说明文:
#--Description:[教程]使用get_child_objects函数获取Cue,根据命名规则设置类别
模组的导入
为了在脚本里操作AtomCraft,需要导入相应的模组,记述以下的处理。
importsys
importcri.atomcraft.debugasacdebug
importcri.atomcraft.projectasacproject
除了操作工程所需的project模组,还需要导入Log输出所需的debug模组。
准备需要设置的类别
在之前的“使用find_object函数”的教程里,我们创建了名称以“sfx_”开头的复数个Cue。我们将这些Cue设置到类别“sfx”里。
使用以下的函数,将工程创建时默认创建的类别“Category_0”重命名为“sfx”。
#准备好Cue所需要的类别
#获取类别文件夹
category_folder=acproject.get_global_folder("CategoryFolder")["data"]
#获取类别
category=acproject.find_object(category_folder,"Category","Category_0")["data"]
#重命名类别名
acproject.set_value(category,"Name","sfx")
首先使用get_global_folder函数,获取类别文件夹。
然后使用find_object函数,从类别文件夹里获取“Category_0”类别,然后使用set_value函数进行重命名。
获取需要设置类别的CueSheet下面的Cue
Cue的获取同样使用在同一层级里可以获取同种类的复数对象列表的get_child_objects函数。代码如下:
#获取工作单元
workunit=acproject.get_workunit("WorkUnit_Tutorial")["data"]
#获取CueSheet
cuesheet=acproject.find_object(workunit,"CueSheet","Tutorial")["data"]
#获取CueSheet以下复数的Cue】
cues=acproject.get_child_objects(cuesheet,"Cue")["data"]
get_child_objects函数需要“父对象”,“获取的对象的类型”这两个参数,将获取的cue的列表保存到cues参数里。
获取与条件相符的Cue
从使用get_child_objects函数获取到的Cue列表里,创建名字以“sfx”开头的Cue列表,记述如下:
#需要设置类别的Cue列表
#名字的开头包含了“sfx”的Cue的列表
cues_for_set_categories=[]
##检查对象的Cue対象
forcueincues:
#获取Cue名称
cue_name=acproject.get_value(cue,"Name")["data"]
#使用字符串函数startswith,检查名称开头是否包含sfx的字符
ifcue_name.startswith(sfx):
#添加到列表
cues_for_set_categories.append(cue)
使用for语句,从cues里一个一个的取出cue,然后使用get_value来获取其名称。
然后使用find函数来检查名称开头是否包含sfx,如果是的话就使用append函数添加到cues_for_set_categories这个筛选之后的cue列表里。
给Cue设置类别
最后,我们使用cues_for_set_categories这个列表给里面的cue设置对应的类别,在这里,我们使用了只需要一次调用就可以进行复数设置的以下函数:
#类别设置
#在复数个cue里批量设置类别的时候可以使用add_category_to_cues。
acproject.add_category_to_cues(cues_for_set_categories,category)
acdebug.log("[教程]使用get_child_objects函数获取cue,根据命名规则设置类别完成")
脚本的保存和执行
到此为止本节的教程就完成了,保存并执行该脚本。如果正常执行,就应该会和下图一样,CategoryGroup_0以下的“Category_0”变成“sfx”,然后名字以sfx开头的Cue会设置为“sfx”类别里。
本次关于CRIAtomCraftRobot的介绍内容到这里就结束了,下一期我们将为大家讲解脚本编辑器的一些便利功能。
若要使用CRIAtomCraftRobot,请前往SDK下载页面进行版本更新
sdk.criware.cn往期推荐1、什么是CRIAtomRobot?
2、理解CRIAtomCraft的对象的构造
3、工程的创建与注册波形文件到Cue
4、参数的变更及预览
预览时标签不可点收录于话题#个上一篇下一篇最近更新
推荐文章