最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

打通音頻工具之間的通信:Unity-Reaper-Wwise音頻回放工具鏈

2023-07-24 18:54 作者:吉了個(gè)吉個(gè)了  | 我要投稿

工具開(kāi)發(fā)者:@nsmTech @張嘿嘿_@吉了個(gè)吉個(gè)了


前言

我們?cè)?jīng)有過(guò)這樣的經(jīng)歷:

搭建好了新版本的wwise工程,現(xiàn)在要進(jìn)boss戰(zhàn)測(cè)試實(shí)機(jī)效果;

然而,

進(jìn)了游戲發(fā)現(xiàn),已有的GM指令并不是十分易用;

賬號(hào)只有一級(jí),進(jìn)不去特定關(guān)卡的特定boss戰(zhàn)???行,從第一關(guān)開(kāi)始打過(guò)去;

開(kāi)了掛打boss這么快,兩下就沒(méi)了,boss技能都還沒(méi)放完???行,找策劃調(diào)數(shù)值;

最后的大招怎么也搓不出來(lái)...門檻太高了...

(讓程序更新一下GM指令需要排期,實(shí)在等不了...)

?

最終,只能用三分鐘的戰(zhàn)斗記憶,調(diào)整工程里各種各樣的問(wèn)題。

?

還有另外一些令人頭大的情況:

???????? 開(kāi)大型測(cè)試,服務(wù)器只能允許測(cè)一次

???????? 測(cè)多人戰(zhàn)斗,人手只夠測(cè)一兩次

???????? 等等...

?

可不可以像電影一樣,把游戲流程錄制成wwise聲音膠片存起來(lái),以后可以無(wú)限次回放呢?

?

當(dāng)然可以,我們嘗試開(kāi)發(fā)了URW(unity-reaper-wwise)回放工具鏈,只需將一次流程錄制下來(lái),就可以生成一個(gè)reaper工程,在reaper中觸發(fā)wwise event,滿足之后無(wú)限次的聯(lián)調(diào)與測(cè)試。

?

生成的reaper工程就是獨(dú)屬于你的wwise聲音膠片,在reaper這個(gè)放錄機(jī)上,你可以自由回看自己的膠片,這樣,Wwise就成為了Reaper的混音臺(tái),允許聲音設(shè)計(jì)師反復(fù)打磨聲音表現(xiàn)。

?

此外,將游戲流程錄制成聲音膠片(reaper工程)還意味著,設(shè)計(jì)師可以在工程中隨意調(diào)整播放進(jìn)度,定位到游戲流程的某個(gè)特定時(shí)間點(diǎn),針對(duì)某一幀或某一小段游戲流程反復(fù)打磨。


工具流展示

Unity錄制音頻信息

既然是回放wwise的聲音,那么這部分需要回放的聲音數(shù)據(jù)數(shù)據(jù),1、形式是什么?2、聲音數(shù)據(jù)該怎么抓???

關(guān)于數(shù)據(jù)形式

因?yàn)槭?.0版的工具流,所以當(dāng)前的數(shù)據(jù)形式還比較簡(jiǎn)單。一句話來(lái)說(shuō),只是知道在什么時(shí)間?播放了哪些聲音事件即可了。如下圖。

聲音時(shí)間時(shí)間點(diǎn)的抓取

前期思考過(guò)兩種抓取方式:

1、unity runtime 階段嵌入抓取邏輯。

這種方式我們構(gòu)想的理想實(shí)現(xiàn)方法是:項(xiàng)目中所有的播放聲音行為有一個(gè)統(tǒng)一的入口。然后在這個(gè)入口處嵌入抓取邏輯,來(lái)一個(gè)聲音,便抓取一個(gè)聲音,存儲(chǔ)一個(gè)聲音。但考慮到不同的項(xiàng)目有不同的邏輯,或許就有項(xiàng)目不會(huì)有這樣的統(tǒng)一的播放入口。我們給這套工作流的首要要求就是通用性,即做到任何項(xiàng)目都可拿來(lái)即用。因此如果后續(xù)存在在不同的項(xiàng)目去改造邏輯適配這套工作流的情況,這是不可接受的。另外,我們要求可以在Editor模式下也可使用。最后,在實(shí)現(xiàn)層面還有一個(gè)尚未驗(yàn)證的擔(dān)憂,考慮到游戲跑起來(lái)之后的時(shí)間穩(wěn)定性,或許會(huì)導(dǎo)致本該是同一時(shí)間觸發(fā)的聲音,最后數(shù)據(jù)記錄下來(lái)的時(shí)間數(shù)據(jù)有所差異。所以,綜上我們采用了以下第二種抓取方式。

2、Waapi

Waapi中有一個(gè)訂閱接口:

這個(gè)訂閱函數(shù)會(huì)在新的日志條目添加到wwise中時(shí),執(zhí)行你定義的回調(diào)函數(shù)。我的處理是在這個(gè)時(shí)候存儲(chǔ)新的條目的信息,然后在錄制結(jié)束之后,通過(guò)另外一個(gè)函數(shù)將條目信息列表生計(jì)算出所需的可供播放的數(shù)據(jù)。

?

需要注意的是

1.wwise條目時(shí)間單位是毫秒,且存在同一時(shí)間觸發(fā)多個(gè)event的情況。因此,不管是在存儲(chǔ)還是在播放都應(yīng)該針對(duì)這個(gè)做出相應(yīng)的應(yīng)對(duì)操作。

2.wwise條目時(shí)間是聲音引擎初始化開(kāi)始所經(jīng)過(guò)的時(shí)間,因此有可能錄制的第一個(gè)數(shù)據(jù)觸發(fā)時(shí)間量級(jí)很大。(或許你在聲音引擎初始化了1小時(shí)之后才開(kāi)始錄制,那么第一個(gè)聲音數(shù)據(jù)的時(shí)間就要>=60*60*1000)。所以,不管是為了錄制完成之后及時(shí)回放,還是為了把錄制的數(shù)據(jù)能在后續(xù)生成的reaper工程中能頂頭播放,都應(yīng)該把所有的數(shù)據(jù)時(shí)間等比例前移,我的做法是把所有的時(shí)間最后都從0秒或0.5秒出開(kāi)始。

?

其他便是播放的時(shí)間控制邏輯、用戶界面的邏輯以及保存加載邏輯編寫(xiě)了,不多說(shuō)。

?

第二步:Json To Rpp

在生成rpp(即reaper工程)這一環(huán),我選擇了用Node.js來(lái)編寫(xiě)腳本。因?yàn)閷?duì)于技術(shù)音頻來(lái)說(shuō),我認(rèn)為基于Node.js的JavaScript語(yǔ)言是一種相對(duì)來(lái)說(shuō)比較輕量級(jí)的選擇,可以快速地達(dá)到“寫(xiě)工具”的目的,從而將更多的時(shí)間用在“設(shè)計(jì)”上。

?

首先,Node.js有npm包管理工具,可以將腳本所需的依賴包粘合在一起,使腳本開(kāi)發(fā)過(guò)程變得相對(duì)流暢。比如FFmpeg是一個(gè)非常強(qiáng)大的音視頻處理工具,支持多種音視頻格式,提供了豐富的功能和參數(shù)選項(xiàng)。而在Node.js中使用它也相對(duì)便攜,只需使用npm命令進(jìn)行安裝:

安裝完成后,就可以在Node.js代碼中引入fluent-ffmpeg模塊,然后使用其提供的API進(jìn)行音視頻處理了。在我之前給音頻部寫(xiě)的打metaData標(biāo)簽的工具中,也是調(diào)用了FFmpeg中相關(guān)的API:

npm中的FFmpeg Metadata API示例

相比于其他編程語(yǔ)言,Node.js在處理IO密集型任務(wù)上表現(xiàn)更為優(yōu)異,這意味著Node.js腳本能夠更快地讀取和寫(xiě)入大量的音頻數(shù)據(jù),而不會(huì)因阻塞而導(dǎo)致程序運(yùn)行緩慢。另外,Node.js還提供了異步編程模型,可以使腳本在進(jìn)行IO操作時(shí)不會(huì)阻塞主線程,從而保持應(yīng)用的高響應(yīng)性。


更加令人驚喜的是:JavaScript有相關(guān)的Waapi接口,你可以在網(wǎng)頁(yè)中、桌面應(yīng)用程序中和Wwise做相關(guān)的交互。這也為技術(shù)音頻在設(shè)計(jì)工作流的過(guò)程中提供了很多的思路。通過(guò)Waapi接口,可以方便地使用JavaScript與Wwise進(jìn)行通信和交互,實(shí)現(xiàn)對(duì)音頻資源的實(shí)時(shí)控制、管理和自動(dòng)化處理。例如,可以通過(guò)Waapi接口實(shí)現(xiàn)動(dòng)態(tài)更改音頻事件、創(chuàng)建和管理游戲中的聲音對(duì)象等操作,從而為游戲音頻設(shè)計(jì)提供更多的可能性。

官方用JavaScript寫(xiě)的“Hello Wwise”Waapi示例

在當(dāng)前這個(gè)回放器工具中,我就是通過(guò)Waapi來(lái)獲取實(shí)踐中音頻樣本的最大長(zhǎng)度,從而將其轉(zhuǎn)換為rpp中item的長(zhǎng)度的。我使用的uri是ak.wwise.core.object.get,options為'maxDurationSource',以WAQL的形式向Wwise發(fā)送http請(qǐng)求,從而獲取信息。

使用Waapi的查詢事件信息函數(shù)

至此,結(jié)合Unity中錄制的Json、mp4和從Wwise獲得的信息,我已經(jīng)能完完全全地生成一個(gè)rpp的文本文件作為這個(gè)工作流中的reaper工程了。

工作流中生成的reaper工程

Reaper To Wwise(ReaWwise Caster)

ReaWwise Caster界面

-概述

??? 在reaper端實(shí)現(xiàn)重放的初衷,是為音頻設(shè)計(jì)師提供一個(gè)能夠在DAW中配合視頻調(diào)試wwise工程的環(huán)境;更加貼合DAW使用者的操作習(xí)慣,播放方式能夠與制作視頻貼片時(shí)的播放方式相同。

??? 我把腳本設(shè)計(jì)成小UI的形式,相當(dāng)于是個(gè)小遙控器——開(kāi)關(guān)開(kāi)啟,遙控器丟在一邊就不用管了(當(dāng)然報(bào)錯(cuò)了還是要管一下0 0)

??? 為了實(shí)現(xiàn)這個(gè)設(shè)計(jì)目標(biāo),工具需要實(shí)現(xiàn)這些功能:

1.基于播放光標(biāo)位置捕捉item的event觸發(fā)器

2.連接Waapi并調(diào)用API的通道

3.播放視頻的同時(shí)低延遲post event

4.操作者自由開(kāi)啟或關(guān)閉capture功能, 無(wú)感化Wwise通信

-前置擴(kuò)展

ReaWwise:

ReaWwise是Wwise中的一個(gè)插件,它允許用戶將Reaper中的音頻和音樂(lè)資源集成到Wwise中,以便在游戲中使用。因此,ReaWwise插件提供了一些API,用于在Reaper和Wwise之間進(jìn)行交互,開(kāi)發(fā)人員可以將Reaper中的音頻資源快速有效地轉(zhuǎn)換為Wwise項(xiàng)目,并在游戲中使用它們。

前置擴(kuò)展1

UI界面:

UI前置擴(kuò)展

-reaperWaapi調(diào)用的實(shí)現(xiàn)

今年一月份AK官方擴(kuò)展了ReaWwise的功能,提供了在ReaScript調(diào)用Waapi的API:

官方使用ReaScript編寫(xiě)的示例腳本

相關(guān)API:

??? 使用ReaScript相關(guān)API,可收集reaper中item、track所包含的相關(guān)信息,最終通過(guò)reaper.AK_AkJson_Map_Set()轉(zhuǎn)化為調(diào)用"ak.soundengine.postEvent"所需要的格式。

-基于播放光標(biāo)位置捕捉itemevent觸發(fā)器

??? 由于ReaScript API中沒(méi)有提供捕捉item的trigger功能,所以只能自己寫(xiě)啦。基本思路是收集各軌道item起始位置數(shù)據(jù),實(shí)時(shí)刷新播放光標(biāo)位置坐標(biāo),當(dāng)判定與起始位置重合時(shí),post event;

??? 然而在實(shí)際碼代碼時(shí)遇到兩個(gè)問(wèn)題:

1.刷新函數(shù)時(shí)間間隔(用while do秒崩)

2.判定點(diǎn)精確度

??? 在獻(xiàn)祭頭發(fā)后,問(wèn)題解決:

1.ReaScript中提供每幀刷新函數(shù)

??? 運(yùn)行流暢沒(méi)煩惱。

2.由于播放的聲音是給人聽(tīng)的,所以將起始位置數(shù)據(jù)精確到1ms,兼顧延遲與判定準(zhǔn)確度。

后續(xù)功能展望

??? 打通reaper-Waapi通道意味著,reaper中更多的參數(shù)可轉(zhuǎn)化為wwise相關(guān)參數(shù),實(shí)現(xiàn)reaper控制wwise播放行為的目標(biāo)。我們希望最終可以實(shí)現(xiàn)的是Wwise可以作為Reaper的拓展輔助調(diào)音臺(tái)。

??? 功能展望:

1.軌道包絡(luò)控制rtpc

2.item控制switch、state切換

3.為軌道分配GO,根據(jù)Unity回放器記錄數(shù)據(jù),實(shí)時(shí)更新GO坐標(biāo)信息

4.結(jié)合ReaWwise原生功能實(shí)現(xiàn)reaper item、wwise audio clip無(wú)感化自由替換,實(shí)現(xiàn)在reaper中還原wwise中聽(tīng)感并直接掛插件調(diào)整素材,一鍵導(dǎo)回wwise工程

?


打通音頻工具之間的通信:Unity-Reaper-Wwise音頻回放工具鏈的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
台中县| 苗栗市| 礼泉县| 台南市| 溧阳市| 延吉市| 宿松县| 洪湖市| 耿马| 抚州市| 泗水县| 哈密市| 班玛县| 望谟县| 望都县| 商河县| 佛教| 鸡西市| 赣州市| 清苑县| 襄城县| 泾阳县| 邓州市| 韩城市| 吉林省| 安庆市| 武山县| 上犹县| 怀来县| 鹿泉市| 卓资县| 新昌县| 乐山市| 隆昌县| 永清县| 阿勒泰市| 云和县| 宁津县| 连南| 分宜县| 阳信县|