CSV を使ったキューシートの作成

このチュートリアルでは、次のような書式のCSVファイルを使用して以下の操作をするスクリプトを書いてきます。

  • CSVファイル名でキューシートを作成
  • 波形ファイルの登録
  • キューの作成
波形ファイル名 キュー名 キュー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

本チュートリアルは、チュートリアル「 プロジェクトの作成と波形ファイルをキューに登録 」で作成したプロジェクトを使用します。
プロジェクトを開いていない場合は、プロジェクトを開くか、「 プロジェクトの作成と波形ファイルをキューに登録 」にて作成したスクリプトを実行してから、チュートリアルを進めましょう。

スクリプトファイルの準備

スクリプト メニューで「スクリプトリスト...」を選択し、 スクリプトリスト ウィンドウを表示します。
スクリプトリスト ウィンドウの新規作成ボタンを押して、以下の名前でスクリプトファイルを作成します。

スクリプトの保存先スクリプトファイル名
tutorials [CRI] tutorial07-1_importcsv.py

スクリプトの説明

作成したスクリプトをダブルクリックして、 スクリプトエディターからのスクリプト実行 で開きます。
スクリプトリスト ウィンドウ でスクリプトの概要を確認できるように、スクリプトの説明を次のように記述しましょう。

# --Description:[チュートリアル]CSV を使ったキューシートの作成

モジュールのインポート

スクリプトの説明が記述できたら、スクリプトで 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 関数でファイルが存在するかのチェックを記述しています。

マテリアルフォルダーの取得とキューシートの作成

読み込んだ CSV 情報には、波形ファイル名と作成するキューの情報が記述されています。
次の関数を使って、波形ファイルを登録するためのマテリアルフォルダーの取得と、キューを作成するためのキューシートの作成を行います。

関数名 説明
get_workunit ワークユニットを取得します
get_material_rootfolder ワークユニットのマテリアルルートフォルダーを取得します
get_cuesheet_rootfolder ワークユニットのキューシート ルートフォルダーを取得します
create_object タイプを指定してオブジェクトを作成します

作成するキューシートの名前には、拡張子を除いた CSV ファイル名を使用します。
これらの処理をスクリプトで記述すると次のようになります。

# ワークユニットを取得
workunit = acproject.get_workunit("WorkUnit_Tutorial")["data"]
material_root_folder = acproject.get_material_rootfolder(workunit)["data"]
# キューシートルートフォルダ
cuesheet_rootfolder = acproject.get_cuesheet_rootfolder(workunit)["data"]
# 拡張子なしのファイル名の取り出し
cuesheet_name = os.path.splitext(os.path.basename(csv_path))[0]
# ファイル名をキューシート名に指定してキューシートを作成
cuesheet = acproject.create_object(cuesheet_rootfolder, "CueSheet", cuesheet_name)["data"]

拡張子なしのファイル名の取り出し の解説

CSV のパスから拡張子なしのファイル名の取り出しには、os モジュールの os.path.splitext 関数、 os.path.basename 関数を使います。
os.path.basename 関数は、パス文字列からファイル名を取得します。
os.path.splitext 関数は、最後(一番右側)のドット.で文字列を分割します。
2つの関数を組み合わせて、拡張子なしのファイル名を取得しています。

CSV ファイルを開く

ここからは、実際に CSV ファイルを読み込み、マテリアルの登録・キューを作成する処理になります。
CSV ファイルの読み込みには、csv モジュールの csv.reader 関数を使います。
open 関数でファイルを開き、ファイルオブジェクトを取得し、 csv.reader 関数に指定します。

# CSVファイルを開いて、読み込み
with open(csv_path) as f:
reader = csv.reader(f)
覚え書き
with ブロック について
open 関数を使用する際、withブロックを使わずに、f = open("ファイルパス") のように記述することもできます。
しかしこの場合、ファイルの読み込み終了したら必ず close 関数 でファイルを閉じてあげる必要があります。
with ブロックを使うとブロックの終了時に自動的にクローズされ、閉じ忘れがなくなるのでとても便利です。

CSV ファイルからデータを作成(波形ファイルの登録、キューシート、キュー作成)

次の関数を使って、CSV ファイルの内容を1行ずつ読み込み、マテリアルの登録・キューを作成を行います。

関数名 説明
register_material 波形ファイルを登録しマテリアルを作成します
create_simple_cue マテリアルから情報を使って新規に単純なキューを作成します
set_values 指定したオブジェクトのパラメーターをまとめて設定します
指定には、キーをフィールド名、バリューをパラメーターの値の文字列とした連想配列を使用します

これらの処理をスクリプトで記述すると次のようになります。

for row in reader:
wave_file_path = "" # 波形ファイルパス格納用
row_params = {} # キューのパラメーター情報格納用
# CSVの各列を取得
wave_file_path = data_dir + "/" + row[0] # 波形ファイル名
row_params["Name"] = row[1] # キュー名
row_params["CueID"] = row[2] # キューID
row_params["Comment"] = row[3] # コメント
# 波形ファイルを登録して、マテリアルを作成
material = acproject.register_material(material_root_folder , wave_file_path)["data"]
# マテリアルからキューを作成
cue = acproject.create_simple_cue(cuesheet, material)["data"]
# キューのキュー名、キューID、コメントを更新
acproject.set_values(cue, row_params)
acdebug.log("[チュートリアル]CSV を使ったキューシートの作成 が完了しました。")

CSV ファイルからデータを作成 の解説

for 制御文を使って reader 変数から CSV の内容を1行ずつ取得していきます。
取得した CSV のデータは、「,(カンマ)」ごとに分割され row に配列で格納しています。
row には、「波形ファイル名、キュー名、キューID、コメント」の順で格納されています。
1つずつ情報を取得し、波形ファイルの登録、マテリアルの作成、キューの作成を順に行い、作成したキューに対して、 CSV から取得した「キュー名、キューID、コメント」情報を連想配列に格納して set_values を使って設定しています。

プロジェクト保存

CSVファイルから波形ファイルの登録、キューの作成処理の記述ができました。 最後に、プロジェクトの保存処理を記述します。

# Save Project
result = acproject.save_project_all()
if not result["succeed"]:
acdebug.warning("プロジェクトファイルの保存に失敗しました。")

スクリプトの保存と実行

これで本チュートリアルのスクリプト記述は終了です。
スクリプトを保存し、実行しましょう。
スクリプトが正常に実行されると以下のように、CSV ファイルの情報に従ってキューシート「tutorial_data3」が作成され、その中にキューが作成されます。

criatom_tools_atomcraft_api_tutorial_csv_import_result.png