find_object 尝试使用 find_object 函数

本教程将使用 find_object 函数,编写从工作单元以递归方式搜索Cue Sheet,连续处理多个波形文件并注册至素材,创建参照这些文件的Cue的脚本。
项目的创建和在Cue上注册波形文件 教程是逐个创建Cue、素材。
实际制作音频数据时,很多情况下需要批量注册多个音频数据,而不是每次注册一个音频数据。因此进行连续处理时,请参照本教程内容。

本教程使用了 项目的创建和在Cue上注册波形文件 教程中创建的项目。
没有打开项目时,请打开项目,或执行 项目的创建和在Cue上注册波形文件 所创建的脚本后开始此教程。

脚本文件的准备

选择脚本菜单上的“脚本列表...”显示脚本列表窗口。
按脚本列表窗口的“新建”按钮,使用以下名称创建脚本文件。

脚本的保存目标脚本文件名
tutorials [CRI] tutorial05-1_use_find_object.py

脚本说明

双击已创建的脚本,使用 从脚本编辑器运行脚本 打开。
要通过脚本列表窗口确认脚本概要,按照以下脚本说明来编写。

# --Description:[教程]使用find_object函数和批量注册多个波形文件


模块的导入

编写脚本说明后,导入以下模块来用脚本操作CRI Atom Craft。

import os
import glob
import cri.atomcraft.debug as acdebug
import cri.atomcraft.project as acproject

要获取文件夹中包含的波形文件路径,需要导入名为glob的Python标准模块。
通过使用glob模块,可以获取与所指定的模式相一致的文件路径。
导入 Project模块 以进行项目操作,同时导入 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 + '/*')
if len(files) == 0:
acdebug.warning(data_dir + "中没有文件")
sys.exit()

文件列表获取的解说

通过glob.glob函数来获取的文件路径存放在files变量中。
接下来,使用len函数调查files变量中存放的文件路径数量。数量为0时,将会输出日志并终止脚本。

注解
glob.glob 函数中指定的路径末尾的“*”名为“通配符”,是用于搜索模式的特殊字符。
指定“*”(星号)后,将会获取文件夹中包含的所有文件。

素材文件夹和Cue Sheet的获取

使用以下函数获取工作单元,并获取用于注册波形的素材文件夹和用于创建Cue的Cue Sheet。

函数名 说明
get_workunit 获取工作单元
get_material_rootfolder 获取素材根文件夹
find_object 进行递归搜索获取匹配的对象

使用 find_object 函数的Cue Sheet的获取的编写如下。

# 获取要注册波形文件的工作单元
workunit = acproject.get_workunit("WorkUnit_Tutorial")["data"]
# 获取波形文件注册目标的素材根文件夹
material_root_folder = acproject.get_material_rootfolder(workunit)["data"]
# 获取创建Cue的Cue Sheet
cuesheet = acproject.find_object(workunit, "CueSheet", "Tutorial")["data"]

使用了find_object获取的Cue Sheet的解说

使用 find_object 函数获取Cue Sheet。
find_object 函数中指定“作为搜索根的对象”、“要获取的对象类型”和“要获取的对象名”。
find_object 函数是以所指定的值为依据来查找对象结构,并返回条件匹配的第一个对象。
因此可以只需调用一次就能获取目标对象,而无需用脚本查找对象层级。

从波形文件列表创建Cue

使用以下函数,从刚才获取的文件路径列表中,逐个提取文件路径来创建素材和Cue。

函数名 说明
register_material 注册波形文件
create_simple_cue 从素材使用信息新建简单的Cue

本节使用 create_simple_cue 函数来创建Cue。
使用for控制语句,按照glob.glob函数获取的文件路径列表的要素数量来连续进行处理。 写入脚本时如下。

for file in files:
# 在素材根文件夹中注册波形文件,创建素材
material = acproject.register_material(material_root_folder, file)["data"]
# 从已创建的素材信息创建Cue
acproject.create_simple_cue(cuesheet, material)

使用 create_simple_cue 函数创建Cue的解说

create_simple_cue 函数用于创建基础结构的Cue。
create_simple_cue 函数中指定“创建目标的Cue Sheet”和“Cue所参照的素材”。
要创建的Cue名称将使用素材名(不包括扩展名)。

注解
关于控制语句for
for file in files: 所示,将 for ~ in ~ : 语句称为for语句 。
通过使用for语句,可以按顺序逐个提取数组中存放的信息。

保存项目

以上步骤显示了音频数据的注册和Cue创建处理的编写。 最后请编写项目保存处理。

# 保存项目
result = acproject.save_project_all()
if not result["succeed"]:
acdebug.warning("项目文件保存失败。")
acdebug.log("[教程]使用find_object函数和批量注册多个波形文件完成")

脚本的保存和执行

本教程的脚本编写到此为止。
请保存并执行脚本。
正常运行脚本后,如下注册“tutorial_data02”内的波形文件的素材,并创建用于参照这些素材的Cue。

criatom_tools_atomcraft_api_tutorial_search_and_edit_add_cues.png