1時間という時間の都合上、パワーアップした2大プロジェクトRIGDOCKSとSKYSQUAREの一部をご説明をさせていただきました。
詳しくご説明をしたかった要素も数多くあり、それをこのブログで追加で説明させていただければと考えております。
タイムシフト配信を見ながら、その詳細を理解する形でこちらの記事を見ていただければより具体的な内容としてご理解いただけるようになっています。
配信期間:2024 年 11 月 27 日(水)~12 月 11 日(水)23:59 まで
11/23(土)14:00~15:00 登壇者:中島健太郎、武田紗吏奈
【講演内容】
RIGDOCKSはRepaerのScript作成に必要なAPI群です。サウンドクリエイター自身が制作できるように、日本語ドキュメントを整備し「現場の欲しい」を叶えるため、多くの機能を実装しています。本セッションでは、そのRIGDOCKSの同封されているBRONZE/SILVER/GOLDのCEDEC2024からの改良点を中心に発表いたします。
さらに大規模フィールドスタジオ「SKYSQUARE」の実現に向けて挑戦を行っております。日本初フィールドスタジオの実現は、とても困難な道のりが現時点で起きています。その課題をどのように解決していくのか、実際に「今」起きている状況をリアルタイムでお伝えいたします。
現代のフォーリー収録では実現できない様々な音の収録を可能にするためには何が必要なのか...どのように解決するのか...本セッションでは、多くの課題点を”現在進行形”で解決しているのかを発表いたします。
目次
◇講演開始
1:最先端の自動化技術で大幅コスト削減から
日本初のクリエイティブへと繋げる「RIGODCKS//SKYSQUARE」の今!!
常に成長を進めている2大プロジェクトに関しての「今」を伝えるためにこちらの
タイトルにしました。
RIGDOCKSはCEDEC+KYUSHU開催される11/23の2日前にアップデートを更新しています。
その内容も含め、なるべく「今」追加した機能や対応した内容をお伝えしたいと考えていました。
2:会社説明、登壇者紹介、公式キャラクターの紹介
会社説明、登壇者紹介、公式キャラクターの紹介をさせていただきました。
主の業務はゲームサウンド開発で行っており、その間でRIGDOCKS/SKYSQUAREの2大プロジェクトを行っております。 主業務であるゲームサウンド開発を経て、現場の欲しいを多くの方に触ってもらうために
プロジェクトを立ち上げました。
他にもALGAZODIKというアーティスト支援部署も行っており、武田はそこに所属し DJアーティストとして活動しています。 そしてLoopdirock(ループディロック)は弊社の公式キャラクターです。 モデリングされたものはモーションとして実行することができ、PV含め、ブースの様々な広告として活躍しています。
3:CEDEC2024登壇模様をYoutubeで視聴いただくことが可能
時間の都合上、早足でご説明させていただく流れになってしまいましたため
RIGDOCK誕生経緯や、プランについての詳細はこちらのYoutube動画をご確認ください。 どのように成長しているのかを比べていただくことが可能です。
CEDEC2024が8月から11月までに3か月のみの違いですが、全速力で駆け抜けている最中です。
4:2大プロジェクトRIGDOCKS//SKYSQUAREの最新PV
今回のCEDEC+KYUSHU2024専用のPVになります。
RIGDOCKS//SKYSQUAREの挑戦を表現したPVでこちらにもLoopdirockが出演し、最先端の技術のデジタル表現と無骨な日本初の最大規模のフォーリー収録のアナログ表現をセットで考えたイメージ動画になります。
5:RIGDOCKS誕生経緯-5つの課題点-
RIGDOCKSがなぜ誕生したのか
それには5つの課題点から生まれました。
その課題点は、様々なゲームサウンドの現場で起きている問題点です。
それを、独自の解決方法で導き出しました。
この問題は弊社だけに起きる問題ではなく、今年のゲーム開発の規模の拡張によって起きる
現代の問題に照らし合わせて、専門職であるサウンド開発の現場をよりよくし、
よりクリエイティブへと切り替えていくことを目的としています。
6:RIGDOCKSとは -RIGDOCKS-BRIDGE-
RIGDOCKSとはLUA/PYTHONのScript言語を利用することで実行できるAPI群です。
RIGDOCKS-BRIGE-はライセンスの役割と共通機能の役割があります。
ライセンスはWeb上とBRIGEとを連携させて機能しています。
現在のMultiUserLicenseの機能が一つのアカウントの購入で自動的に反映されます。
それは一つの購入で最大5人利用できます。
7:RIGDOCKSとは -BRONZEの拡張-
不具合の修正だけではなく、配列の処理が拡張されています。 一部例をこちらのブログのみでご紹介します。
バージョン変更点に関してはこちらのリリースノートをご確認ください。
例:選択メディアを配列に入れる場合
▼Before -選択数を取得してFor文でメディアを配列に登録-
dofile(reaper.AZ_GetLuaInitPath())
require("reaper_AZSTOKE_BRONZE")
allCount = reaper.AZ_GetMediaTypeCount(0,1)
itemList = {}
for i = 0,allCount-1 do
itemList[i+1] = reaper.AZ_GetMediaItemSelect(0,i,1)
end
▼After -指定プロジェクトの選択メディア配列を出力-
dofile(reaper.AZ_GetLuaInitPath())
require("reaper_AZSTOKE_BRONZE")
itemList = reaper.AZ_GetSelectedMediaItemList(0)
このように良く利用する選択メディアの配列取得の設定をAPIに落とし込むことに成功しました。 配列出力まで実行できるので各コードが最小になりました。
よりスピード高いScriptを実行させることが可能です。
8:RIGDOCKSとは -SILVERの拡張-
不具合の修正を主に行っております。 こちら不具合の詳細に関してはこちらのリリースノートをご確認ください。
SILVERには特許技術「HANDAUTOMER」「TALKTRON」が同封されています。
自動音声の調整作業や、多言語ボイスでの自動制御が組み込まれており
中級のAPIで構成されています。
9:RIGDOCKSとは -GOLDの拡張-
CEDEC2024から大幅に拡張されたプランGOLDになります。
Wwiseのさらなる調整を可能にするAPIの追加にExcelの操作を可能にします。
今回の登壇ではこちらのWwise拡張された機能をフル活用した実演を行っています。
更新内容に関してはリリースノートをご確認ください。
Wwiseの拡張を利用した例に関しては実演をご確認ください。
10:RIGDOCKSとは -実演で利用する3つの特許について-
前回のCEDEC2024でもお伝えした特許技術で今回は実演で利用する3つの特許の説明を行いました。
各特許技術の詳細情報は以下リンクになります。
弊社は現在4つの特許を所持し、最先端の自動化技術を独自に所持しています。
11:RIGDOCKS実演
今回の実演はGOLDの1.1.1を利用したWwiseの拡張を利用して自動化を行っています。
フォルダに入っているファイルを調整しwav波形をReaperからWwiseまでを全自動で実行します。
データを仮整音しとりあえず実装まで行うことで
収録後の作業がかなり減ることになるでしょう。
実装するまでの手順が複雑すぎて、すべて手作業で行っていた様々な作業を自動化へ繋げることの可能性を高めるReaScriptになります。
登壇で利用されたReaScriptはLuaを利用しています。 内容はこちらのReapdockをご確認ください。
dofile(reaper.AZ_GetLuaInitPath())
require("reaper_AZSTOKE_BRONZE")
require("reaper_AZSTOKE_SILVER")
require("reaper_AZSTOKE_GOLD")
RIGDOCKSのAPIを利用可能にする
cancelType, inputList = reaper.AZ_GetUserInputList("Insert",1,"Path:","D://")
フォルダの入力をユーザーに行う機能を持ちます。
納品データのフォルダパスを指定します。
if cancelType then
テキストボックスでOKを押した場合は以下を実行
--file import HANDAUTOMER
fileList = reaper.AZ_GetFilePathList(inputList[1],"wav")
フォルダパスの中に入っているwavデータをすべて配列に置き換える対応
startPos = 0
最初にインポートする波形の位置を設定(秒)
itemList = {}
保存用のアイテムリストの空の配列を定義
for i, value in pairs(fileList) do
wavデータの配列fileListのForループ
itemList[i] = {}
itemListの指定番号内さらに配列を定義する
itemList[i]["item"] = reaper.AZ_InsertMediaTrackIdSecond(0,0,value,0,startPos)
開始位置とfileListのパス情報を得てトラック0番にメディアをインサートする。
そしてitemListにitemを配列として入れていく
reaper.AZ_SetMediaItemHANDAUTOMER(itemList[i].item,3)
インサートしたメディアアイテムにHANDAUTOMERを実行 圧縮率は3
itemList[i]["name"] = reaper.AZ_GetMediaItemName(itemList[i].item)
インサートしたメディアアイテムの名前を取得
--get parent
itemList[i]["parent"] = ""
splitList = reaper.AZ_GetStringSplitList(itemList[i].name,"_")
メディアの名前の[_]を使って分割したものを配列に登録
table.remove(splitList)
分割したものの配列の最後を削除する
for e, value in pairs(splitList) do
if e == 1 then
itemList[i]["parent"] = itemList[i].parent..value
else
itemList[i]["parent"] = itemList[i].parent.."_"..value
end
end
再度[_]でつなぎ直すことで pl0001_vo_ACTION_01 → pl0001_vo_ACTIONになる
--next start pos setting + regionMarker
endPos = reaper.AZ_GetMediaItemEndTime(itemList[i].item)
メディアアイテムから終了地点(秒)を取得
reaper.AZ_AddRegionMarker(0,startPos,endPos,itemList[i].name,0,0)
開始地点(startPos)と終了地点(endPos)とメディアの名前を利用してリージョンマーカー設定
startPos = endPos + 1
次のメディアをインサートさせるために終了地点からプラス1秒後にstartPosを設定
end
--render setting
renderPath = "D:\\script\\renderdata"
renderFileName = "render"
レンダーのパス情報の取得準備をします。
レンダーが保存されているパス情報と名前を設定
jsonStr = reaper.AZ_ReadFile(renderPath,renderFileName..".txt")
指定のパスと名前からテキストデータを取得して文字列に変換
render = reaper.AZ_Json_Deserialize(jsonStr)
文字列データから配列に切り替えてrenderを生成
path = reaper.AZ_SetProjectPathFolder("Rec",3)
プロジェクトパスにフォルダを生成し日時がフォルダに追加されることで同名フォルダを防ぎます。
render.OutputDir = path
レンダーのアウトプットするパス情報のみを書き換えます。
--render
fileList = reaper.AZ_RenderToAudioFile(0,render)
レンダー情報に合わせて指定ファイルをレンダーします。
--wwise intro
wwisePath = "\\Actor-Mixer Hierarchy\\Default Work Unit\\Master\\VOICE"
parent = ""
Wwiseの初期設定を行います。WwisePathは、パス以下にボイスをいれるための設定です。
if (reaper.AZ_Wwise_Connect("127.0.0.1",8080)) then
Wwiseにコネクトします。
--wwise object create
for i, value in pairs(fileList) do
レンダーで書き出したファイル(fileList)分Forループ対応
if parent ~= itemList[i].parent then
parent = itemList[i].parent
containerList = reaper.AZ_Wwise_CreateContainer(wwisePath,0,itemList[i].parent)
parentを利用してコンテナの生成(ランダムコンテナ)を行います。
end
soundVoiceList = reaper.AZ_Wwise_CreateSoundVoice(containerList.ID,value,itemList[i].name)
itemList[i]["soundVoiceID"] = soundVoiceList.ID
生成したランダムコンテナの中にSoundVoiceを生成します。
valueにファイルパスが設定されているので同時にインポートも実行できています。
そしてitemListにSoundVoiceのGUIDを登録しておきます。
これで必要なWwiseのファイルを生成します。
end
--LOUDMATCHIFY Savedata
jsonStr = reaper.AZ_ReadFile("D:\\script\\savedata\\savedata","savedata.txt")
loudmatchifyList = reaper.AZ_Json_Deserialize(jsonStr)
Loudmatchifyのセーブデータを取得して配列に戻します。
※Renderのセーブデータと同様の方法になります。
--loudness
for i, value in pairs(itemList) do
itemList分Forループ対応
wwiseVol = reaper.AZ_MIDDLESCANNER_Wwise_GetVolumeForMediaItem(itemList[i].item,"English(US)")
MIDDLESCANERを実行して音量変化量をWwiseから取得します。
reaper.AZ_LOUDMATCHIFY_SetVolumeForMediaItem(itemList[i].item,loudmatchifyList,1,wwiseVol.Volume)
Wwise変化量と部分一致のセーブデータを基にラウドネス調整を行います。
Msg(itemList[i].name)
Msg(wwiseVol.Volume)
Msg(reaper.AZ_GetMediaItemLoudnessMaxMomentary(itemList[i].item))
Msgはデバック用になるのでコンソールに出力させて状況を確認できるようにしています。
end
path = reaper.AZ_SetProjectPathFolder("Rec",3)
再度プロジェクトパスにフォルダを生成
render.OutputDir = path
レンダーに生成したパスに設定
fileList = reaper.AZ_RenderToAudioFile(0,render)
レンダーを実行
for i, value in pairs(fileList) do
reaper.AZ_Wwise_ImportAudioFile(itemList[i].soundVoiceID,value,"English(US)")
end
再度Wwiseにインポートを実行して入れ替える
reaper.AZ_Wwise_Disconnect()
Wwiseのコネクトを外す対応
end
end
12:SKYSQUARE
SKYSQUAREの今を伝えます。
まだ収録するところまで進んでおりませんが
常に3歩進んでは2歩下がるような状況化にあり、まだまだではありますが
この状況をお伝えできればと思っております。
13:フィールドスタジオSKYSQUAREの紹介
どういう土地なのかをご紹介いたしました。
全部で2000坪の土地の広さで700坪を超える平面の空間があります。
大規模のフォーリー収録にはこの平面の空間に収録できる空間を用意します。
土地の種類は豊富で、下の土地には川が流れており、水の音収録にもしっかり活躍できます。
14:実現するには資格が必要
大規模収録を実現させるためには、建設に関わるありとあらゆる免許が必要で、その取得を行いました。
現時点では8つの免許取得に成功し、対応できる機種などの様々なことを可能にしています。
建設業の免許は細分化されており、荷物を運搬するだけで様々な免許が必要になります。
この中で現在、玉掛けは弊社武田にも取得してもらい、2人体制で実現できるまでになりました。
15:実現するには建設機械が必要
前回のCEDEC2024でご紹介した写真、動画は3トンのショベルカーを利用しています。
それには、借りるまでに色々ありました。
建設機械専門のレンタル屋にいくのは初めてで、事前に借りる機材や日取りを決めて
実行しました。
借りた際の出来事や、課題点が出たことで
解決には購入が手っ取り早いと考え、ショベルカーを購入することにしました。
16:実現するには部材が必要
ホームセンターで手軽に用意できるものはなく
様々な素材の大きな部材が必要になります。
その部材を確保するためには、いろんな手段を講じる必要があるでしょう。
その中でついに廃車を確保しました。
廃車自体も取得するために、弊社スタッフの知り合いで個人の整備士の方にお願いして
電子系統が故障している廃車寸前の車を買い取り、実際に現場まで移動した後に
廃車手続きを経て確保しました。
廃車を確保したことでまずはつり上げるテストを行いました。
さらに木材の確保や伐木を行えるようにするために
林業のプロから教わりました。
実際に現場で利用する機材を使った講習を行ったのでそれを使った
伐木を行っていければと考えています。