创建使用CSV的Cue Sheet

本教程将编写使用如下格式的CSV文件进行以下操作的脚本。

  • 使用CSV文件名创建Cue Sheet
  • 注册波形文件
  • 创建Cue
波形文件名 Cue名 Cue ID 注释
Alert.wav SE1000_Alert 1000 警报
Attack_03.wav SE1001_Attack 1001 攻击
ObjectAppearance.wav SE1002_ObjectAppearance 1002 出现
~ ~ ~ ~
criatom_tools_atomcraft_api_tutorial_csv_import_workspace.png

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

脚本文件的准备

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

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

脚本说明

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

# --Description:[教程]创建使用CSV的Cue Sheet

模块的导入

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

import sys
import os
import csv
import cri.atomcraft.debug as acdebug
import cri.atomcraft.project as acproject

为了读取CSV文件,需要导入Python的标准程序库的csv模块。
导入 Project模块 以进行项目操作,同时导入 debug模块 以输出日志。

波形文件的文件夹和要导入的CSV文件的路径的设置

设置要读取的CSV的路径。
指定教程波形文件夹’tutorial_data/tutorial_data03’下方的 tutorial_data3.csv

写入脚本时如下。

# 波形文件的文件夹和要导入的CSV文件的路径的设置
# 波形文件的文件夹路径
data_dir = os.path.dirname(os.path.dirname(__file__)) + '/tutorial_data/tutorial_data03'
# CSV文件的路径
csv_path = data_dir + "/tutorial_data3.csv"
# 检查CSV文件是否存在
if os.path.isfile(csv_path) == False:
acdebug.log("找不到CSV文件: " + csv_path)
sys.exit()

波形文件的文件夹和要导入的CSV文件的路径设置的解说

要读取的CSV文件中仅编写了波形文件名,而不是波形文件的完整路径。
要注册使用了 register_material 函数的波形文件时,需要指定完整路径。
此教程在后面创建波形文件的完整路径,因此先将波形文件的文件夹路径“data_dir”和“CSV路径“csv_path”分开来定义变量。
文件不存在时,可以通过 os.path.isfile 函数中断脚本,以检查文件是否存在。

素材文件夹的获取和Cue Sheet的创建

读取的CSV信息中编写了波形文件名和要创建的Cue的信息。
请使用以下函数,进行用于注册波形文件的素材文件夹的获取,以及用于创建Cue的Cue Sheet的创建

函数名 说明
get_workunit 获取工作单元
get_material_rootfolder 获取工作单元的素材根文件夹
get_cuesheet_rootfolder 获取工作单元的Cue Sheet根文件夹
create_object 指定类型后创建对象

要创建的Cue Sheet名称将使用不包括扩展名的CSV文件名。
写入脚本时如下。

# 获取工作单元
workunit = acproject.get_workunit("WorkUnit_Tutorial")["data"]
material_root_folder = acproject.get_material_rootfolder(workunit)["data"]
# Cue Sheet根文件夹
cuesheet_rootfolder = acproject.get_cuesheet_rootfolder(workunit)["data"]
# 无扩展名的文件名的提取
cuesheet_name = os.path.splitext(os.path.basename(csv_path))[0]
# 将文件名指定为Cue Sheet名来创建Cue Sheet
cuesheet = acproject.create_object(cuesheet_rootfolder, "CueSheet", cuesheet_name)["data"]

无扩展名的文件名的提取解说

要从CSV的路径中提出无扩展名的文件名时,使用os模块的 os.path.splitext 函数、 os.path.basename 函数。
os.path.basename 函数从路径字符串中获取文件名。
os.path.splitext 函数是在最后(最右侧)的点"."处分割字符串。
将这两个函数组合使用,获取无扩展名的文件名。

打开CSV文件

以下是实际进行CSV文件读取、素材注册和Cue创建的处理。
读取CSV文件时,使用csv模块的 csv.reader 函数。
用 open 函数打开文件,获取文件对象,在 csv.reader 函数中指定。

# 打开CSV文件进行读取
with open(csv_path) as f:
reader = csv.reader(f)
注解
关于with块
使用 open 函数时,也可以编写为 f = open("文件路径") 等,而无需使用with块。
然而这种情况下,读取完文件后,需要用 close 函数关闭文件。
使用with块时方便于在块终止时会自动关闭,可以避免忘记关闭的情况。

从CSV文件创建数据(注册波形文件、创建Cue Sheet和Cue)

使用以下函数,逐行读取CSV文件的内容,注册素材并创建Cue。

函数名 说明
register_material 注册波形文件并创建素材
create_simple_cue 从素材使用信息新建简单的Cue
set_values 批量设置指定的对象的参数
指定时使用关联数组,将键作为字段名、将值作为参数值的字符串

写入脚本时如下。

for row in reader:
wave_file_path = "" # 用于存放波形文件路径
row_params = {} # 用于存放Cue的参数信息
# 获取CSV的各列
wave_file_path = data_dir + "/" + row[0] # 波形文件名
row_params["Name"] = row[1] # Cue名
row_params["CueID"] = row[2] # Cue ID
row_params["Comment"] = row[3] # 注释
# 注册波形文件并创建素材
material = acproject.register_material(material_root_folder , wave_file_path)["data"]
# 从素材创建Cue
cue = acproject.create_simple_cue(cuesheet, material)["data"]
# 更新Cue的Cue名、Cue ID和注释
acproject.set_values(cue, row_params)
acdebug.log("[教程]使用了CSV的Cue Sheet创建完成。")

从CSV文件创建数据的解说

使用for控制语句,从reader变量逐行获取CSV的内容。
获取了的CSV的数据按照“,(逗号)”进行分割,并以数组形式保存在row中。
row中按照“波形文件名、Cue名、Cue ID、注释”的顺序进行保存。
按顺序逐个获取信息,注册波形文件,创建素材,创建Cue,然后针对创建的Cue, 将从 CSV 获取的“Cue名、Cue ID、注释”信息保存在关联数组中,使用 set_values 进行设置。

保存项目

以上步骤显示了如何从CSV文件注册波形文件并创建Cue的处理。 最后请编写项目保存处理。

# Save Project
result = acproject.save_project_all()
if not result["succeed"]:
acdebug.warning("项目文件保存失败。")

脚本的保存和执行

本教程的脚本编写到此为止。
请保存并执行脚本。
正常运行脚本后,如下会按照CSV文件的信息,创建Cue Sheet“tutorial_data3”,并在其中创建Cue。

criatom_tools_atomcraft_api_tutorial_csv_import_result.png