快速了解如何結(jié)合使用 Wwise Authoring API (WAAPI) 和 Max 8

簡(jiǎn)介
在 Wwise 中構(gòu)建較為復(fù)雜的由 RTPC 驅(qū)動(dòng)的 Event 時(shí),我們經(jīng)常會(huì)面臨無(wú)法快速加以測(cè)試和驗(yàn)證的困境。
我們無(wú)法保證能夠使用鼠標(biāo)一次性控制一個(gè)以上的參數(shù),并且在將參數(shù)映射到 MIDI 控制器或使用 MIDI 自動(dòng)化操作時(shí),效果可能不如預(yù)期。
如果沒(méi)有便捷的方式來(lái)跳到想要測(cè)試的場(chǎng)景,或者音頻設(shè)計(jì)所面向的系統(tǒng)還不完備或根本不存在,直接在游戲中測(cè)試可能會(huì)很麻煩并且會(huì)拖慢迭代流程。
Cycling74 開發(fā)的?Max?可以幫助解決所有這些問(wèn)題。借助?NodeJS,可直接通過(guò)?WAAPI?連接到 Wwise,以便調(diào)用 Event 并更新 RTPC。
另外,它還提供有很多實(shí)用的圖形 UI 對(duì)象(如曲線、滑桿、按鈕、刻度盤)。它設(shè)有內(nèi)置快照保存功能,方便存儲(chǔ)不同參數(shù)配置的預(yù)設(shè),并允許模擬參數(shù)隨時(shí)間的變化。藉此,可為快速設(shè)計(jì)原型提供絕佳的環(huán)境。
在深入探究之前,提醒大家一下:文章末尾列有工程的 github 鏈接 :)。

準(zhǔn)備工作
要閱讀本文并充分運(yùn)用所學(xué)知識(shí),您需要:
安裝最新的 Wwise,包括?Sample Project
安裝?Max 8(試用版應(yīng)該就可以,但是我并不確定)
對(duì)如何使用 Max 有基本的了解
熟練掌握 JavaScript 編程知識(shí)
注意,屏幕截圖都是 OSX 上的。不過(guò),Windows 上的步驟是一樣的。
首先,要?jiǎng)?chuàng)建一個(gè)?Max 工程而非簡(jiǎn)單的?Max Patcher,因?yàn)槲覀兿氚阉袃?nèi)容都包含在其自身的文件夾中。接著,在 Max 工程文件夾中創(chuàng)建?code?子目錄,并從以下位置的?hello-wwise-node-wamp?示例工程復(fù)制內(nèi)容:
<WwiseInstallationPath>/SDK/samples/WwiseAuthoringAPI/js/
同時(shí),將?wwise.js?文件由
<WwiseInstallationPath>/SDK/include/js/
復(fù)制到 Max 工程的 code 文件夾,以便在?index.js?腳本中輕松引用。

然后,將 node.script 對(duì)象添加到修補(bǔ)程序中,并讓其指向隨?hello-wwise-node-wamp?示例一并提供的 index.js 文件。接著打開對(duì)象幫助修補(bǔ)程序(按住 ALT 單擊 Max 對(duì)象),并將節(jié)點(diǎn)調(diào)試工具復(fù)制到補(bǔ)丁中。
附注:在默認(rèn)情況下,Max 會(huì)在其功能有限的內(nèi)置文本編輯器中打開 js 文件。如果您跟我一樣喜歡使用 VSCode 或別的編輯器,可以在 Max 的偏好設(shè)置中進(jìn)行更改。
最后,向?node.script?發(fā)送?script npm install?消息。這時(shí)會(huì)安裝?packages.json?文件中列出的所有節(jié)點(diǎn)模塊。

在 Wwise 工程中,首先要確認(rèn)是否在 Wwise User Preferences 中啟用了 WAAPI。

接著,按住 CTRL 雙擊打開?index.js,將?wwise.js?文件的路徑更新到本地副本,并包含?max-api?模塊,最后將?console.log()?調(diào)用替換為?Max.post()?調(diào)用來(lái)輸出到 Max 控制臺(tái)。

接下來(lái),就要測(cè)試連接了;為此,要在 Wwise 中啟用捕獲功能,并轉(zhuǎn)到 Profiler 視圖中日志窗口的 WAAPI 分區(qū),然后測(cè)試連接,看能否將?script start?消息發(fā)送到 Max 中的節(jié)點(diǎn)對(duì)象。
如果一切順利,Max 控制臺(tái)應(yīng)當(dāng)會(huì)輸出 Hello 消息、Wwise 版本以及 Wwise Log。

注意,在 SDK 示例提供的?index.js?中,會(huì)立即再次關(guān)閉連接。
為此,需要修改?onopen()?函數(shù)來(lái)緩存 akSession,并為節(jié)點(diǎn)進(jìn)程添加 exit 處理程序以在節(jié)點(diǎn)腳本停止時(shí)關(guān)閉連接。

接著,添加 MaxHandler 以便通過(guò) UUID 發(fā)送 Event 并更新 RTPC。我特意選擇了使用 UUID,因?yàn)樵谕ㄟ^(guò)名稱發(fā)送 RTPC 時(shí)遇到了一些問(wèn)題。

接下來(lái),需要獲取要通過(guò) Max 調(diào)用的 Event 和 RTPC 的 UUID。幸運(yùn)的是,Wwise 提供了?WAQL。借助這種復(fù)雜精細(xì)的查詢語(yǔ)言,所有這一切都會(huì)變得非常簡(jiǎn)單。我們來(lái)添加兩個(gè)額外的 Max 處理程序,以此返回所有的 Event/RTPC,并將其發(fā)送到 Max 節(jié)點(diǎn)對(duì)象的第一個(gè)輸出引腳。我們可以將其連接到 Max 詞典,并將詞典永久嵌入到修補(bǔ)程序中,以便在稍后需要時(shí)隨時(shí)訪問(wèn) UUID。


現(xiàn)在,我們有了 UUID。接下來(lái),就可以試著發(fā)送 Event 了。我們來(lái)使用 NYC 環(huán)境聲 Event 測(cè)試一下。postEvent()?處理程序會(huì)獲取三個(gè)參數(shù)、一個(gè) Event 名稱、一個(gè) UUID 和一個(gè)對(duì)象 ID。
這個(gè)對(duì)象 ID 在后面很重要。對(duì)于稍后要發(fā)送的 Play/Stop Event 及 RTPC 更新,全部都要匹配。否則,Stop/RTPC 更新會(huì)不起作用,因?yàn)?Wwise 會(huì)認(rèn)為它們不相關(guān)。
以下是前述示例工程的最終視頻,其展示了如何驅(qū)動(dòng) Wwise SampleProject 的 NYC 環(huán)境聲上的?Time?和?Rain_Intensity?參數(shù)。

下面是示例工程的 github 鏈接。直接將其下載為 .zip 并在 Max 8 中打開即可。
https://github.com/MichaelKlier/wwise-waapi-starter
下一步?
當(dāng)然,所有這些仍然需要進(jìn)行很多手動(dòng)設(shè)置,才能在 Max 補(bǔ)丁中構(gòu)建好 Wwise Event。不過(guò),Max 同時(shí)支持通過(guò) JavaScript 編寫修補(bǔ)程序腳本,包括以編程方式創(chuàng)建對(duì)象等。所以,所有這些其實(shí)都可以自動(dòng)完成。
我已經(jīng)開始嘗試設(shè)法自動(dòng)創(chuàng)建 Event 按鈕等,如果成功的話,可能會(huì)做成小的 Max 數(shù)據(jù)包。
各位也來(lái)試試吧!
其他資源
https://docs.cycling74.com/max8/vignettes/00_N4M_index
https://docs.cycling74.com/nodeformax/api/
https://docs.cycling74.com/max8/refpages/node.script
https://docs.cycling74.com/max8/vignettes/javascriptinmax?q=javascript

邁克爾?哈通 (MICHAEL HARTUNG)
邁克爾?哈通 (Michael Hartung) 是一名來(lái)自德國(guó)慕尼黑的技術(shù)音頻設(shè)計(jì)師。自 2015 年以來(lái),他一直在獨(dú)自開發(fā)各種獨(dú)立游戲和 VR 游戲,并為 Formosa Interactive UK 和 Dynamedion Germany 的各種項(xiàng)目提供技術(shù)音頻設(shè)計(jì)服務(wù)。