顯示具有 adaptive music & game audio 筆記 標籤的文章。 顯示所有文章
顯示具有 adaptive music & game audio 筆記 標籤的文章。 顯示所有文章

2021年6月7日 星期一

adaptive music & game audio 筆記 17 - 音樂安排

  1. 基本段落可以分為:exploration (後半段 loop 為 to battle)- battle (後半段 loop 為 to exploration 及 to death) - death (to life)
  2. 每個段落的的前半段不作 loop,僅作為淡入的階段,後半段才執行 loop。
  3. to exploration 及 to death 基本的設定相同,但可以將 multi instrument 置入 battle  參數介面中作為 stinger ,不依照時間軸來播放,僅依照 battle 的參數是否達標而進入觸發區,並藉由隨機的 play list 、音量的微幅隨機變動等,來增加原本 battle 段落的音樂之豐富性,由於沒有定 loop region,故需要按下 loop 播放的按鈕,否則 multi instrument 只會播放一次。此外,為了讓置入 battle 參數介面中的 multi instrument 可以在音量上獨立自動化,可在該 multi instrument 的音量旋鈕上按右鍵,選擇 automation,如此可以界定 battle 參數在某臨界值以上可以讓特定的 multi instrument 的音量淡入或淡出。
  4. 在某個 audio 軌道上按右鍵,可以加入效果器。效果器的音量選紐也可以按右鍵作音量自動化。
  5. 承 3, 若使用 battle 參數來控制 multi instrument 執行 stinger 進行播放,且又搭配 loop 按鈕持續循環播放,而僅用 battle 參數來製音量大小聲,則一旦 battle 參數有更動,可能又會讓這個 stinger 被聽到,因為我們並非用 loop region 來區別觸發與非觸發,而是使用 battle 參數臨界值來處發,故一旦啟動播放之後,播放就不會停止。
  6. 承 5,故此種作法可能並不適合用來同時控制 兩個屬性相反的 stinger。故把 death (to life) 獨立成時間軸的一部分會比較易於控制被分配到該段的音樂,而不至於影響其他音樂播放。
  7. async 的播放模式中,其播放器的播放點與主要播放器的播放點不同步。cut 選項則是讓音樂在離開觸發區(例如 loop region)後就立即停止。若有設定 ADSR,則 ADSR 會優先處理,使得主播放器的播放點離開觸發區時,仍可以執行 release 的內容。



其他參考資料:https://www.youtube.com/playlist?list=PLp4vT3ssm5SUqwHvbverTlYu4LwwkWHek

  • 下面的影片使用不同的方法來進行不同段落的跳接。主要使用 loop region 來直接設定 non-looping 的狀態的條件,符合條件時,則播完 loop 區而不再回頭。此種用法可搭配 transition region to 來使用,若符合條件,則在該標籤的尾端會跳到別的段落。
  • 利用 health 參數來控制新增的打擊樂節奏是否要播放,若 health 參數低於臨界值時,且 intensity 數值高時,則打擊樂會加入播放。此外,multi instrument 也被用來增加同一段音樂的內容變化。


  • 下面這個影片則介紹了 submix 的建置方法,但可惜右鍵的功能選單已經跟目前 FMOD Studio 2.0 的版本不同。
  • 下面的影片也介紹了 transition time line 的用法,適合用在段落切換過程中,加入 crossfade 以及 wosh 特效來作前段暫時收尾的設計。
  • 一個 loop region 中,也可以插入多個 transition to  的標籤,來指定哪個時間點適合用來進行段落的切換。

2021年5月30日 星期日

adaptive music & game audio 筆記 16 - FMOD Mixer Snapshot & Mixer Routing

  1. Snapshot 的使用目的在於紀錄特定的混音設定,當遊戲中遇到需要改變混音設定時,則被立即套用。常見的使用情境:環境的轉換、健康狀態的轉換、變換情緒(例如降低音量、提高環境音,來增加緊張、懸疑的氛圍)。其分為 overriding snapshot (混音設定值立即改變為 snapshot 的設定)以及 blending snapshot (混音設定值與先前的設定值合併)
  2. 操作方法範例:(1) 利用 add return track 建立效果器的通道,並且掛上 delay 效果器。(2) 把聲音軌道指向前述新建的 return track。(3) 開啟 mixer 視窗,新建一個 snapshot,並且將需要載入設定的混音器通道(Groups, Returns, VCAs)按右鍵選擇 scope in  的方式納入 snapshot 的控制。
  3. 將 mixer 視窗縮小,從中拖曳建好的 snapshot 至 timeline 中,等待被觸發。
 利用 add return track 建立效果器的通道

return track 掛上 delay 效果器


把聲音軌道指向前述新建的 return track


開啟 mixer 視窗,新建一個 snapshot


將需要載入設定的混音器通道按右鍵選擇 scope in  的方式納入 snapshot 的控制


將 mixer 視窗縮小,從中拖曳建好的 snapshot 至 timeline 中,等待被觸發。


參考資料:
FMOD 之 Snapshot 運用

FMOD 音訊架構簡介

 FMOD 混音簡介

Snapshot 應用



其他教學影片:




2021年5月21日 星期五

adaptive music & game audio 筆記 15 - FMOD 天氣之互動音效設計

  1. 在 FMOD 中新增一個參數軌道,命名為 rain,並在該參數軌道建立三個 event instrument,分別置入 light rain, medium rain, heavy rain 三種聲音檔案與設置各自的 loop region,且每個 event instrument 檔案的軌道都在音量上加入 ADSR 的調變。
  2. 將上述三個 event instrument 彼此交疊,其中,為了選取 medium rain ,則需將 heavy rain, light rain 按右鍵選取 send to back。選取 medium rain 之後,點左、右上角拉出淡入、淡出的曲線。
  3. 另開一個 audio 軌道,在對應到 rain 的參數軌道之較大數值處,加入 multi instrument,載入數個雷聲聲音檔案,開啟 loop 模式,開啟 probability,設定為 80% 左右,並將 time 中的 delay interval 範圍調大 (350~550 ms 左右),使得雷聲偶而會被延後播放。此外,將 thunder 軌道的音量予以自動化,接近較大的 rain 數值時,則設置音量淡入之自動化曲線。
  4. thunder 軌道的音量控制也可以改用 ADSR 來控制音量,增加 release 的長度,如此可以讓rain 參數值離開 multi instrument 區域時,雷聲音量不至於衰減太快而顯得突兀。



使用 volume 自動化曲線來控制雷聲

使用 ADSR 來控制雷聲

2021年5月14日 星期五

adaptive music & game audio 筆記 14 - Transition Time Line

  1. 建立 Transition 區域之後,若雙擊 transition,會產生 transition timeline,用來作為前一段聲音與下一段聲音直間的過度區域,然而,一旦打開 transition timeline 之後,原先利用 volume 的 ADSR 之調變設定就會僅 attack 的部分有作用,而沒有 release,故前一段聲音的淡出曲線需自行重新在 transition timeline 中繪製 (通常以只繪製前一段音樂的淡出曲線。而不繪製後一段音樂進來時的淡入曲線)
  2. 若欲收起 transition timeline,則只要把後一段的音樂起點,在 timeline 上拉回至前一段音樂的尾巴處,則 transition timeline 就會自動消失,但此種動作會使原本 transition timeline 之中的資料直接被刪除,並無法復原。 

2021年5月8日 星期六

adaptive music & game audio 筆記 13 - 多重聲音檔案 loop 播放之環境音設計

  1. 製作背景環境音時,有時會需要播放多個不同長度的聲音檔案,且需要讓這些檔案各自迴圈播放,而不至於產生 click 方法:
    1. 為了避免環境音的聲音檔案產生方位感,故需刪除 3D panner。
    2. 使用 nested event 的作法,在 audio track 加入 event instrument,再將這些 event instrument 的當案都各自置入聲音檔案,各自在 nested event 中設置跟每個檔案相同長度之 loop region。 
    3. 回到上一層的介面,為這些 event instrument 設置統一的 loop region,用來作為 trigger zone。然而每一軌到的 event instrument 需要比所設置的 loop region 長度更長一些,以避免 loop 播放時進行重新觸發(retrigger)所產生的 click。
    4. event instrument 中若是放入車子呼嘯而過的聲音,則可以在其中置入 scatter instrument,則可以有更多關於檔案之間的間隔、播放機率等之設定選項,例如減少喇叭出現的頻率。

2021年5月7日 星期五

adaptive music & game audio 筆記 12 - FMOD 的 Direction, Event Orientation, Elevation

  • 內建參數 Distance 之使用情境:FMOD 的內建參數包括 distance, direction, elevation 等,是Unity 中不需要利用 coding 就能傳送到 FMOD 的參數,可能的使用情境如:藉由玩家靠近某聲源的遠近來影響聲音的變化,距離聲源越近,則音量越大聲、高頻也越明顯。方法有二:
    • 方法一:利用一個同時有高頻與低頻的機器聲,搭配加入loop region,並運用低通濾波器之自動化,以 distance 參數來控制低通濾波器的截止頻率。
    • 方法二:利用堆疊兩個音軌,一個是高頻、一個是低頻,搭配 loop region,並運用 distance 參數來控制 volume 的自動化,距離聲源越近,高頻的軌道音量漸增。(方法二會比方法一效果更佳)。
  • 內建參數 Direction, Event Orientation, Elevation: https://www.fmod.com/resources/documentation-studio?version=2.0&page=parameters-reference.html
    • Direction 是指聲源或 Event Distance 與「聽者所面對的方向」之間的角度,若聽者朝著前方,且聲源在聽者的正前方,則為 0 度,聲源在聽者的左方,則為負值 (0 ~ -180),聲源在聽者的右方則為正值(0 ~ 180)
    • Event Orientation  使指「聽者所面對的方向」與聲源或 Event Distance 所面對的方向,兩者之間的角度。面對面為 180 度,朝同一個方向則為 0 度。
    • Elevation 與 Direction 類似,但是指在 x y 的垂直平面上,「聽者所面對的方向」與聲源所在之處相對於聽者的方位之角度。垂直的角度,而非平面的角度。

2021年5月6日 星期四

adaptive music & game audio 筆記 11 - FMOD 隨機播放、自動化、互動控制參數

  1. 隨機播放:利用 multi instrument 載入多重聲音,可以使 FMOD 進行隨機播放並可設定 pitch、volume 等的參數之調變或隨機變化,搭配多重軌道之聲音疊合,適合用來播放槍聲、腳步聲等。在 multi instrument 中的控制面板上,除了每個音檔可以控制播放的機率之外,按下三角形圖示,展開進階設定,還可以設置整個 multi instrument 被觸發時會播放聲音的機率。
  2. 音高自動化之注意事項:若有設定 loop region 且又設定 pitch 隨機變化時,需注意 pitch 的變化會改變原本聲音的長度,因此有可能 loop region 未涵蓋到即時音高變化所改變的長度,則可能造成聲音突然切斷的 click。
  3. 自設參數:當遊戲情境需要設計一個白天可愛、晚上恐怖的特殊生物叫聲時,有兩種方法:

  • 方法一:可以在 timeline 上,開兩個 audio 軌道,分別置入一個 multi instrument,每個 multi instrument 載入多重的怪獸聲音,利用新增 time of day 參數,來控制 volume 的自動化。 

  • 方法二:建置一個自動化參數,命名為 time of day,並把兩個 event instrument 直接建在 time of day  的軌道上,各自載入可愛怪獸、恐怖怪獸的聲音(nested event),則可以利用 time of day 的參數搭配 play 鍵,直接觸發介面上方互動控制的參數。此外可以按右鍵設定初始值。(測試時,播放游標鍵必須在 event instrument 的範圍內,才有辦法按下 play 鍵)。


2021年4月30日 星期五

adaptive music & game audio 筆記 10 - FMOD 基礎

  1.  event instrument 與 single instrument 的使用方法:event instrument 是一個模組化的事件,可以包含很多 single instrument,無論其在主介面中的長度如何,播放游標經過時便可觸發裡頭的聲音事件,並將內容播放完。倘若在主介面中的 logic track 建立了 loop region,則 event instrument 只在播放游標還持續在 event instrument 長度內時,才會播放其中的內容 (亦即才會保持持續被觸發的狀態)。換句話說,若要 event instrument 中的內容持續循環播放,則 event instrument 內的 logic track 以及外部主介面的 logic track 都必須建立 loop region。(async 表示該聲音檔案的播放軸與主介面的播放軸沒有同步,且主介面的播放軸離開觸發區時,該聲音檔案仍會持續播放置結束。按下 async 的同時,會出現 cut 按鈕,若同時按下 cut 按鈕,則該 instrument 會立即停止播放。)
  2. multi instrument 的使用方法:multi instrument 中可以置入多個聲音檔案,但也是要在主介面的 logic track 中有建立 loop region 的情況下,才能持續運作。multi instrument 中可以選擇 loop 播放、或隨機播放。scatter instrument 跟 multi instrument 類似,可以置入多個聲音檔案,但 scatter instrument 是用來「同時」播放多個檔案,而非是分次播放為主。「同時播放的檔案數量」可以藉由 polyphony 參數來設定,且每次「開始」播放的檔案之間的時間間隔可以由 min & max spawn interval 來調整(該參數是指音檔「開始的時間」之間隔,而與結束的時間或音檔的長度無關),並可用 spawn total 來限制「全部播放的檔案數量」。其中,min & max scatter distance 可以用來設定每個檔案與聽者間的空間距離。
  3. nested event (stacking event) 的使用方法:multi instrument 中可以置入 event instrument 或 multi instrument,主要目的是讓聲音檔案可以有更多的播放控制方法。例如用來設定某個音效類型的播放機率。可能的使用時機例如:有數個不同的喇叭聲、以及數個車子呼嘯而過的聲音要被觸發,但喇叭聲希望出現的機率較小,則設置之步驟如下:(1) 建立一個 multi instrument,並在 muli instrument 中,按滑鼠右鍵,建立一個 event instrument,使之形成一個 nested event,再進到這個 nested event (event instrument) 中,建立一個 multi instrument,將不同的喇叭聲都匯入到這個 nested event 中的 multi instrument 中。(2)到最上層的 multi instrument 中,匯入數個車子呼嘯的聲音,則可以分別就 multi instrument 中的 event instrument(包含數個喇叭聲)及車子乎嘯聲,各自設定出現的機率。(如下圖)(3) async 表示該 event instrument 的播放軸與主介面的播放軸沒有同步,如此可以讓不同長度的聲音檔案,可以各自在 nested event 中各自作自己的 loop,不受到主介面時間軸的影響。


  • 補充:multi instrument 以及 scatter instrument 的播放清單中的 random 模式與 shuffle 模式之異同:Shuffle mode would be to shuffle the playlist so that the songs don't play in any specific order. Random mode would pick a random song from a playlist and play it. ==> Shuffle 強調同一個音樂播放清單,但播放順序不同,以及每首音樂只會播放一次,直到清單的曲目都播過為止。Random 強調隨機播放,所以也有可能同一首曲子連著播放兩次。

2021年4月17日 星期六

adaptive music & game audio 筆記 9 - Vertical Re-mixing 在 Unity 中之模擬

測試影片說明:

在 Unity 中建立四個 plane,分別代表不同「張力參數」的區域。人物進入每個不同的 plane,音樂就會疊加一個預設好的音樂層次,藉此模擬不同情境或緊張度時,同一首曲子中的織體與節奏型的即時變化。此種非線性的音樂播放方式,是隨機偵測遊戲玩家的動作或所在情境所得到的特定參數,來驅動音樂片段的切換、然而卻又要預期要能得到連接順暢的音樂串接。從音樂形式結構的想法來看,應該是頗為有趣。


以下為 vertical re-mixing 時務執行中,技術上必須考量的事宜:

vertical re-mixing 在 FMOD 音量設定,是根據自訂的 intensity 參數的升降而改變,在預設切換點附近讓音量隨 intensity 的變化而漸進改變的設定是有必要的。由於在 Unity 中,將不同的 box collider 對應到不同的 intensity 參數時,並無法真正讓切換中的音樂淡入淡出,故需要仰賴 FMOD 中的 intensity 底下的 seek speed 模組,選擇 asymmetric ,設定其中的 increase、decrease 參數。然而這兩個參數是以「 /s 」為單位,意旨受到 Unity 控制的 intensity 的參數若瞬間跳到下一個等級時,FMOD 要以怎樣的「速度」讓播放所用的 locator 漸進移動預期目標的 locator。換言之,increase, decrease 將決定音量漸進到達指定的目標時所需的時間。通常切換 intensity 時,會將音樂淡入設定成較快的速度,以反應立即性;音樂淡出則設定成較慢的速度。

vertical re-mixing 之音量自動化與 intensity 的對應關係



利用 seek speed 中的 increase、decrease 設定來影響音量的漸進改變

以上的測試,是採用商業音樂資料庫的音樂,直接多軌輸出而成,因此音樂內容並非特別針對 adaptive music 的需求而設計。horizontal re-sequencing 的手法則因為一般的商用曲庫的曲子不適用,故無法在此測試,可能必須另外進行創作。此外, Henry Scott 的 adaptive music 影片,提供了使用 seek speed 來處理淡入淡出的問題的想法、及使用 quantization 來避免音樂被立即截斷所產生的突兀性,解決了我的一些疑惑。

Henry Scott 的 adaptive music 音樂示範影片提供了一些有趣的音樂創作上的想法,將 horizontal re-sequencing 與 vertical re-mixing 兩者同時結合在一首曲子中,結構上已經整合 adaptive music 的主要技巧,頗值得參考:


從上述測試過程與實驗中,有一些心得與想法羅列如下:

  1. 素材的本身或和聲進行方式可能是影響是非線性的音樂片段能否連接得順暢的因素。
  2. 太複雜的和聲進行或較長的樂句可能都不利於非線性、隨時可切換的播放方式。
  3. 由於每個已經安排好順序的音樂片段還可以利用 FMOD 每次隨機選擇不同的版本來播放(使用 multi-instrument),可以讓重複播放的音樂獲得更多的變化,而不至於使被玩家拖延而重複循環播放的音樂聽起來因過度重複而顯得枯燥。
  4. 音樂片段由 DAW 輸出時,應該保留殘響的尾巴,且置入 FMOD 中時,要選擇 asynchronous,表示當播放游標因互動事件而跳到另一段音樂時,前次播放的聲音檔案之殘響仍得以繼續播完。(在 async 的狀態下,只要聲音被觸發一次,就會把該次播完。如果因為該聲音的播放起點在 某一 loop region 中,則可能因此而被多次重新觸發,那麼就會越來越多的同一個聲音檔案在每次觸發時被疊進來。)
  5. Transition 標籤下的 Transition Condition 的設定中可以設定 quantization 的小節數,讓 transition 發生時,可以等到走完預設的小節數才跳到下一段音樂。
  6. 可以將 "calm" 與 "tense" 的軌道以 group 的方式(運用 mixer 的 send 串接技巧,選取軌道,並在介面下方按滑鼠右鍵,選擇 insert send / to event / new return),分成兩組,當 "threat level" 提升時,便可以使用 volume 的自動化,隨著 "threat level" 增加,驅動 "tense" 群組的音量增加,此外,也配合 "threat level" 參數設置其 seek speed 為 asymmetric 模式,藉此得以調整 "threat level" 參數切換時,數值漸變的速度 。
  7. "distance to goal" 是搭配 event reference instrument 的功能,得以將某個部份的音樂內容獨立出來成為一個附屬的模組,該模組中的內容若被觸發時,若主要的 timeline 中的的播放游標持續進行 loop 播放(主要的 timeline 中的此區域設有 loop region),則 event instrument 內的內容會全部播完,當然也可以在 event instrument 內設定 loop region,則只要主 timeline 中的播放游標在播放,event instrument 內的 loop 也會持續循環播放。Henry Scott 的影片中的 event instrument 的使用方法是在 timeline 中建立 event instrument,將輔助提高張力的音樂內容置入其中,僅搭配 "distance to goal" 參數變化,來觸發之。
  8. 有別一般的 instrument 只能播放單一聲音檔案,Event Instrument 則可以用來播放數個 Event (https://fmod.com/resources/documentation-studio?version=2.0&page=working-with-instruments.html)。
  9. magnet regions: 可用來讓播放器游標在特定條件下,由任何段落跳回 magnet region,其作用與 transition region 及 destination region 相反。transition region 是用來從某個特定的 transition region 段落,依照條件的不同,跳到的不同的指定的段落。magnet 的使用方式,通常使用數個 magnet region 並佔滿整個欲運作的區間來運作(如下面影片所示),或是搭配 transition region (以 transition region 佔滿整個欲運作的區間)的方式來運作,不合 magnet region 的條件,則以 transition region 之條件,來指定播放頭要跳到何處。此外,magnet region 也可以透過設定 offset 模式為 relative,則可讓播放游標由某個段落跳到 magnet region 段落的相對應的時間點。offset 的預設模式是在達成特定條件時,播放游標會跳到 magnet region 的開頭來播放。(原文說明如下: A magnet region is the reverse of a transition region: If a transition region tells the timeline playback position to “go over there,” a magnet region tells it to “come over here.”As for a use-case… Imagine you wanted to make an event in which the timeline was divided up into multiple sections, and you wanted to be able to jump from any section to any other section.With magnet markers, you could simply create one magnet region for each timeline section, and assign them appropriate trigger conditions. To make the same event without magnet markers, you’d have to use transition regions and destination regions. To start with, you’d need one destination region for each section. You’d also need a number of transition regions equal to the number of timeline sections times two (so that you could have one transition region leading to a section on either side of that section), minus two (because you don’t need a transition region leading to the leftmost section to the left of the leftmost section, nor a transition region leading to the rightmost section to the right of the rightmost section). You’d then need to assign each transition region appropriate trigger conditions. Magnet markers make this kind of event a lot easier to make. https://qa.fmod.com/t/what-is-magnet-region-for/15564/4


下例中則是使用 cubase 結合 FMOD 的製作流程範例,以管弦樂為風格,其中內容也包含了 Event Instrument 的運用。




2021年4月12日 星期一

adaptive music & game audio 筆記 8 - 自適性音樂演示在 Unity 中之模擬

自適性音樂演式在 Unity 中之雛形模擬之方法,可在建立好 FMOD 的專案與 Unity 之連結之後,進行以下步驟,以作為音樂切換之模擬:

FMOD 的部分:

  1. 在新的 FMOD project 中,建立新的 timeline event,並拖曳四個檔案至 timeline 中,此時這些聲音檔案會同時出現於 window 底下的 audio bin 中。
  2. 在 logic track 上,加上 loop region。此外,若 timeline 是以小節數來顯示,則可以在 logic track 中加入 tempo marker ,確保 FMOD 中的小節數,跟音樂軟體的小節數是相同的。(在介面上方可以選擇 display time 或 display beats,選後者則時間軸以小節數來顯示單位)
  3. 刪除 3D preview 元件。(若不刪除此元件,會使得二聲道音樂播放聲音變得比較小聲)。
  4. 在 timeline 上方按右鍵新增 parameter ,命名為 intensity,設定最小、最大值(例如 1~4)。
  5. 將每個軌道予以更名,來對應到 Unity 的四個 plane。
  6. 將 FMOD 軌道的 volume 按右鍵予以自動化,此時切換到 intensity tab,可以設定 volume(之縱軸數值)與 intensity (之橫軸數值)之間的關係,藉此設定什麼樣的 intensity 該產生什麼樣的 volume。


Unity 的部分:
  1. 載入 standard assets
  2. 建立四個 plane,排列如下圖所示。
  3. 至 assets folder 底下,新建一個 material 資料夾,在其中,以滑鼠右鍵新建四次 material,分別命名為 peace, restricted, detected, conflict,並在各自的 inspector 中分別修改顏色,並把這些 material 分別拖曳到不同的 plane 中。
  4. 將 standard assets 中的 character 下的 third person controller 之 prefab 拖曳至已建立的 plane 上。為了播放音樂,必須讓音樂與一個 game object 產生連結,故選擇 third person controller,並在 inspector 中進行 add component,選擇 FMOD event emitter,使音樂能在此game object 上進行聲音發送(emit)。此外,需將 play event 選項指定為 object start,表示執行遊戲時就開始播放音樂。再者,可設定 intensity 來決定剛開始執行遊戲時,需播放對應到哪種 intensity 的音樂。
  5. 為了讓 game 場景的角度適合我們俯瞰,故可選擇 main camera ,並且在 inspector 中修改 transform 的 position 以及 rotation。

  6. 建立 box collider,並與 third person controller 產生連結:(1) 在 hierarchy window 空白處按滑鼠右鍵,製造一個 cube,並刪除 mesh renderer, mesh filter  (2) 將新建的 cube 設定成 scale (10, 10, 10) 以對應四個 plane 的區塊大小,並確定 Is Trigger 要勾選,才能使 player 進入該區域,不受物理的阻礙。(3) 複製前述的 cube (box collider) 並分別拖曳至一個 plane,修改 position 以對其個 plane 的邊界。(4) 在每個 cube 下 add component,選 FMOD studio parameter trigger (此為 FMOD 已經寫好的程式碼,用來觸發 FMOD 中的參數),並將 Third Person Controller 拖曳至 Studio Parameter Trigger 中的 target。並在 target 選單中選擇 Trigger enter。(此處的 target 是用來指「誰」會觸發 FMOD 中的音樂) (5) 將 Third Person Controller 的 tag 設定成 player,亦即帶有 player 標籤的物件進入 box collider 時,就會觸發 FMOD 的參數事件。此外,也要在 cube 下將 Collision Tag 設定成 player。
  7. 在每個 cube 的 inspector 之 studio parameter trigger 的 event 中,會看到 intensity 選項(其是與是來自 FMOD 中的 intensity 參數之設定有關,且必須是已經執行 assigned to bank 以及 build之後,才會出現相同的參數名稱在 Unity 中)。設定與 FMOD 每個軌道之音量自動化曲線所相對硬的 intensity。



2021年3月14日 星期日

adaptive music & game audio 筆記 6 - Fmod 與 Unity 的串接

為了使用 Fmod 作為 Middleware 來為 Unity 執行較為複雜的聲音播放,故需使用以下步驟:

1. 安裝 Unity,取得授權,開一新檔案,並在 asset store 搜尋 Fmod,下載之後,導入 Unity 中。此時 Unity 的下方 console 就會出現錯誤訊息,因為找不到 Fmod 的專案路徑。

2. 開啟 Fmod 並指定一個檔案夾進行存檔,再到 Unity 中的 Fmod 選單,選取 Edit Settings,則會在 Unity 的 Inspector 中出現 Fmod 的相關設定選項,在此選項中將「Studio Project Path」指向 Fmod 存檔的路徑,找到副檔名為 fspro 的檔案。

4. 承上,此時雖完成 Fmod 與 Unity 的初步連結,但卻會顯示找不到 Fmod 的 Bank,因此需再到 Fmod 中的 File 選單下,選擇 Build (或使用快捷鍵 F7),來建立 Bank 檔案。Bank 是用來存放 Fmod 的聲音等相關元件,建立成 Unity 可以讀取的形式,以供 Unity 直接進行使用。

5. 完成 Fmod 與 Unity 的串接之後,可以進行簡單的測試,步驟如下:

(1) 在 unity 中建立一個 game object,並且在 add component 中加入 Fmod 的元件,選擇 Fmod Studio Event Emitter。

(2) 至 Fmod 中,按右鍵 new event 及 new 2D timeline,修改 Event 的名稱,並將外部的聲音檔案拉到軌道中。並在左方介面中,按滑鼠右鍵選擇 assign to bank (選 master),按 F7 建立 bank,並進行存檔。 

(3) 在 Fmod 的事件中,按滑鼠右鍵,選擇 copy path,再將這個路徑貼到 Unity 的 inspector 的 Studio Event Emitter 的 Event 的路徑設定中。此時,Initial Parameter Value 底下的 add values 選單也會出現原本在 Fmod 文件中自己增加的參數。

(4) 至 Unity 中,將 (1) 所建立的 game object 之Inspector 中的 Play Event 選成 Object Start,表示該 game object 開始存在時,FMOD 的音樂就要開始播放。此外,並需將 event 選項設定為在 Fmod 中所命名的那個事件。 

6. 按 Unity 的 play 鍵進行測試。 



使用 Unity 2019 需注意的事項:
  • Fmod studio 的版本必須要跟 Fmod for Unity 的版本一致,目前雖然已經可以由 Unity 的 Asset Store 直接導入 Fmod 的 Assets,但是相容性可能會發生問題。最保險的方式是直接至 Fmod 官網安裝 Unity 認證完成(Unity Verified)的 Fmod Studio 應用軟體、以及要被載入 Unity 的Unitypackage。本文撰寫時,測試成功的版本為 Fmod Studio 2.0010 與fmodstudio20010.unitypackage,兩者版本需一致。現有直接從 Unity 的 Asset Store 導入 Fmod 的方式之版本,似乎仍有版本不相容的問題。 
  • 正常的情況下,Fmod 的檔案資料夾中的 Build 目錄中會有 bank 檔案,同一份檔案還會被複製到 Unity 檔案資料夾的 Assets / StreamingAssets 資料夾下。然而,使用 Unity Asset Store 載入的 Fmod,目前仍會有找不到 Fmod 的 Bank 的問題。
  • 此外,在 Unity 執行遊戲時,若出現訊息顯示 sample rate 必須為 44100Hz 的錯誤訊息,則可以直接在 Unity / FMOD / Edit Setting 的 inspector 下拉選單中的 Play in Edit Setting 修改取樣頻率為 44100Hz 即可。
  • 若在 Unity 中有找不到 FMOD 的 Event 的錯誤訊息,則需要刪除 Unity 專案資料夾底下的 Assets /StreamingAssets 整的檔案夾,並刪除 FMOD 專案資料夾底下的 Build 資料夾,此錯誤訊息是因為軟體版本有更新所造成。
  • 若使用 [FMODUnity.EventRef] 的用法來簡化 Event Path,也可能造成相同問題,此時則必須手動至掛載該程式碼的物件之 inspector 中, 點選放大鏡 icon 去從下拉式選單來選擇想要播放的聲音檔案。
  • 執行 3D 聲音時,main camera 必須掛上 FMOD listener 元件。
  • Unity 2019 或 2020 在 import package 的選項中,沒有 standards assets,而必須自己至 asset store 下載安裝與載入,載入完成後會出現在 project window 的 assets 目錄下,然而同時也會出現錯誤訊息,需要在錯誤訊息 "GUIText is obsolete" 點兩下,進入 visual studio 進行下列些改:GuiText 改成 Text,並多加上一行指令,如下圖所示:

至 asset store 下載 standard assets:

從 console 的錯誤訊息 "GUIText is obsolete" 點兩下修改程式碼:

完成修改後就可以使用 standard assets。

2021年3月7日 星期日

adaptive music & game audio 筆記 5 - 「水平重排序」技巧簡介

Horizontal Resequencing (水平重排序)是一種互動音樂的技巧,音樂依照遊戲玩家的行動,以動態的方式串接在一起,當音樂在遊戲進行中播放時,可能到一個需要下決定的點,依照玩家的行動,而音樂則可能進入新的段落或繼續重複原本的段落。Horizontal Resequencing 技巧則是用來處理這種分支點的技巧。

完整的音樂會有開頭、中間、結尾,需要時間來完成。Horizontal Resequencing 常用於前一段音樂結束、後一段音樂開始的地方,因此為了呈現音樂的完整性,因此 Horizontal Resequencing 比較適合超切換點之間超過 20 秒以上,亦即玩家不需在不同的遊戲狀態下快速切換時,因為若是快速切換遊戲狀態與音樂,則音樂的核心主題或樂思將無法清楚被呈現。此種切換音樂的方式可分為三類:

(1) Crossfading (淡入淡出):

     1. 同步的淡入淡出(synchronized crossfading):

前後兩段音樂於重疊之處採用相同的速度、節奏,甚至採用相同的和聲進行,以減少切換音樂上的突兀。此種作法的缺點在無法改變成體的速度。

     2. 非同步的淡入淡出(non-synchronized corssfading):兩段音樂重疊之處進行淡入淡出,但兩段音樂節奏不同、和聲也可能相互衝突。此種作法使音樂切換較難以順暢。

(2) Transition (過渡段): 使用過渡段進行兩段音樂之間的銜接。過渡段可以任何長度,但以不要超過 10 秒為佳。可用一段音效作為作為過渡段(例如:Final Fantasy XIII 使用音效片段作為過渡。)好的過渡段可以連接兩段使用不同和聲架構、速度的音樂。差異較大的兩段音樂之過渡段其長度不能太短,30 秒以上的過度段效果最佳。

(3) Branching (分支): 前段音樂的樂句結束後,才接到下一段的音樂,為最具音樂性的作法,因為此種作法不會將旋律或和聲截斷。此種作法比較適合樂句長度較短的音樂,以不超過 10 秒為佳,古典風格的音樂通常句子長於 10 秒,搖滾或科技 (Techno) 旋律則通常較短,因此比較適合作為此種技巧所使用的音樂風格。Branching 技巧也適合於當作曲者需要一段乾淨的過渡段來執行互動音樂,或希望使用和聲與速度來改變情緒時。此外,使用隨機播放清單(random playlists)使作曲家可以在有限的樂句中增加變化性。Branching 的技巧有助於克服音樂重複的問題,故常用於休閒及手持遊戲,因為此類遊戲平台可用於存放音樂的記憶體通常較小。

關於 Horizontal Resequencing 的例子說明如下:




2021年2月28日 星期日

adaptive music & game audio 筆記 4:視頻遊戲配樂常用的三種技巧之定義與優缺點說明

視頻遊戲的配樂技巧,根據研究遊戲音樂的學者 Michael Sweet 在 Writing Interactive Music for Video Games 一書中的整理歸納 ,筆者節錄簡述如下:

常見的遊戲配樂之技巧或類型有三:

(一)非互動式的遊戲音樂:

定義:使用線性方式重複播放一段音樂,當一個遊戲層級開始時,重複的音樂片段(music loop)就開始播放,當一個遊戲層級結束時,音樂就停止播放。

優點:(1) 容易作曲與執行。(2)製作時間較少(3)相對於互動遊戲配樂而言,非互動式的遊戲配樂更省製作費。

缺點:(1)缺乏變化、音樂重複性高。(2)音樂上使用相同的開頭、中間、與結尾,使得重複的音樂片段之起訖點(loop points)更容易被聽者注意到而使其聽起來重複性高。

(二)水平重排序(Horizontal Resequencing)

定義:一種互動音樂作曲的手法,當音樂到達句子的結尾時,可從一段音樂進入到另一段音樂。在遊戲進行當中,音樂可到達一個關鍵點,在這個關鍵點之後,音樂可以進入一個新的段落,或繼續重複前一個段落,其選擇是依照玩家的遊戲狀態而定。

優點:(1) 配樂便於根據遊戲事件,從一種情感的文本切換到另一種情感的文本。(2)可提供清楚的音樂過渡段。

缺點:(1) 為了結束前段音樂的想法或樂句,使得配合遊戲所需的音樂變化,有時並無法立即達成。(2) 當遊戲狀況多次快速往來於兩種音樂氛圍時,會使得過渡段聽起來比較明顯。

*「水平重排序」的技巧包含了「分支」(branching)、「淡入」(crossfading)、「過渡」(transition) 三種。(待續)


(三)垂直重混音(Vertical Remixing)

定義:一種互動音樂作曲的手法,不同層次的音樂內容可垂至疊置或被刪除,以製造不同程度的張力與情緒。此種方法常用當作曲家需要讓音樂在不同張力之間快速多次轉換時,且根據遊戲性的需求較不需要變換和聲時。

優點:藉由疊加或刪減可以快速改變同一首曲子的整體情緒

缺點: (1) 由於此種技巧的執行上,和聲設計上是持續循環重播的,因此並不允許音樂語言基於遊戲事件的需求而進行較劇烈的改變。(2) 此種技巧的執行上,速度是固定的,因此音樂並無法根據遊戲的狀態去增加或放慢音樂速度。

*心得:vertical mixing 常用在和聲變化少(持續循環播放重複的和聲進行)、且速度固定的音樂中。我認為因為和聲變化太快時,疊加的時間切入點就沒辦法那麼自由隨時可以疊加進去,而是需要挑特定的點才能疊進去(例如在一個和聲循環的終點或終止式之後才能疊入其他音樂層,一個和聲循環通常會包含主和弦 - 中介和弦 - 屬和弦 - 主和弦。則音樂的疊加可能會需要挑最開頭的主和弦進入時、或前面音樂到達終止式之後才疊入,但這樣就會沒辦法立即自由地搭配遊戲玩家的遊戲狀態), 所以 vertical mixing 可能多數情況都只套用在單一和弦的音樂中來執行,效果較為順暢又能保持立即性。


可在參考 youtube 影片的說明,影片中也包含自適性音樂在 Fmod 中執行的狀態:





2020年1月1日 星期三

adaptive music & game audio 筆記 3: Unity 中使用 AudioSource 播放 OneShot 聲音

OneShot Sound 是指只觸發一次的聲音或音樂,是相對於不段循環播放的背景音樂而言。下面這個程式碼主要是用在遊戲場景中,主要是利用聲音表現主角踏進一個池塘區域所濺起的水聲。下面這個程式碼(可命名為 PlayerAudio)是利用 add component 加入並依附在遊戲的主角身上來運行。說明如下:

1. public AudioClip splashSound 用來宣告一個叫做 splashSound 的 AudioClip 類別成員。AudioClip 是 Unity 中用來存放聲音檔案的類別  (a container for audio data )。

2. public AudioSource audioS 用來宣告一個叫做 audioS 的 AudioSource 類別成員。AudioSource 是一套處理聲音播放相關機制的類別,猶如一個多功能或提供多種播放模式的播放器。

3. OnTriggerEnter 也是 Unity 中的方法,主要處理某個物件進入到某個物件中的觸發事件之狀況(例如:主角進入到水池中)。利用 CompareTag ("Water" ) 用來判別是否進入了一個標被籤定為 Water 的區域,如果是,則利用 audioS.PlayOneShot (splashSound) 的方法來播放聲音。

程式碼完成後,在主角的 Inspector 中需要利用 Add Component 新增一個 AudioSource 物件,並將此物件拖曳到 Inspector 中的程式碼元件中,顯示 audioS 的地方,由於程式碼中使用 public 的方式來宣告 audioS,所以此程式碼元件就會在 inspector 中顯示一個 audioS 的項目。藉由將 AudioSource 物件拖曳至 audioS 的項目,可讓 AudioSource 物件跟所宣告的 audioS 相連結。

在 Inspector 中的程式碼元件中,另外需拖曳一個聲音檔案至 inspector 的 PlayAudio 元件所顯示之 splashSound 項目,則完成了聲音播放的相關設定,使得主角進入標籤為 water 的區域中,則立即播放所預定的水花聲音。同理,使用 OnTriggerExit(Collider other) 讓主角離開 water 區域時,也再播放一次預定的水花聲音。



其他關於 OnTriggerEnter 與 OnCollision 的區別,可以參考這裡:
https://blog.csdn.net/u014581901/article/details/51582704

若要了解 Tag 標籤的設定方法、以及 OnTriggerEnter、OnCollision 的區別,可以參考下面兩個影片。





2019年11月1日 星期五

adaptive music & game audio 筆記 2: Unity 中播放背景音樂

1. 遊戲聲音可以包括三個部分:
  • 環境音 (ambience)
  • 動態音樂 (dynamic music)
  • 事件音樂(event sound)
2. Unity 的聲音播放方式:
  • Automatic: 「場景載入」或「物件被製造」時,便自動播放
  • OnTriggerEnter: 玩家進入觸發區(trigger) 或撞到某物(collider) 時,則播放聲音。
  • Scripted Event: 特定功能被呼叫時,則播放聲音。
3. Unity 中的聲音處理需要 audio clip(聲音檔案)、 audio source(聲音播放機制)與 audio listener(聽音者)。



4. audio listener 通常是依附在 camera 上。至於 audio source ,則 可由 game object 選單中先製造一個 empty game object,然後在該 object 上加入 game component - audio source。拖曳已經導入的聲音 asset 至該 audio source / audio clip 中,則可建立一個聲音的來源。

5. 呈上,勾選 play on awake 使得遊戲進行時,便立刻播放已置入的聲音或音樂。為了要製造 3D 的效果,必須將 spatial blend 拖曳至 3D 端,如此才能讓聲源在 3D 空間中移動。

6. 呈上,上述影片中並未提及 Doppler 效應的模擬之相關設定。執行上,移動時若沒有關閉 Doppler level,則會產生不必要的音高變化,因此可先把 Doppler level 設定為 0。






2019年10月29日 星期二

adaptive music & game audio 筆記 1: - 視頻遊戲之自適音樂(adaptive music )序言

自適音樂 (adaptive music) 主要強調由玩家在遊戲場景中的實際狀況來即時改變音樂的內容,這個概念最早被用在 1981 年的視頻遊戲 Frogger 中。時至今日,自適音樂已成為許多 AAA 等級的遊戲中常用的處理音樂的技術,且也已經發展出一些專用的音樂軟體工具。然而,這是一個跨領域的學問與技術,遊戲配樂作曲家通常雖然不一定需要參與「音樂置入」的過程,但若作曲家本身沒有沙盤推演的能力,則很難了解其作品在實際遊戲運作中的執行狀況,所以跨領域學習相關的知識與技術仍屬必要。雖然這種將音樂創作、互動科技重整的課程,已經陸續出現在國外的音樂院的相關課程中,國內則完全沒有任何專屬的課程,因為開課者必須要音樂創作能力、音訊處理的能力,還要了解遊戲引擎、以及自適音樂的常用的中介軟體 (middle ware) 與互動的概念。在我開始深入了解這個整合性的技術之前,我也諮詢過幾位國內資深的遊戲引擎 Unity 的專家,他們並不清楚有這種相關技術,並且提出遊戲引擎中就已經有相關功能模擬實際的聲音定位,如今進一步接觸遊戲引擎之後,也發現確實如此,差別只是在沒有專門的工具來處理自適音樂,可能因為這些 Unity 的專家們並不懂音樂,因此也沒特別注意到相關的技術需求與音樂處理上的必要性。這個狀況更引發了我整理相關資料的興趣與動機,於是我註冊了一系列的國外遊戲配樂線上課程、以及遊戲音訊課程、Unity 遊戲設計課程,也參閱了一些跟 adaptive music 以及 game audio 的原文書籍,但覺得要融會貫通所有的技術與資料,仍然是一項大工程,因為網路的資訊總是非常片段而瑣碎,因此我想把一些我從網路上看過的、跟 game audio 及 adaptvie music 相關教學影片整理一下,作為學習筆記,同時也作為自己快速查閱之用。

將一些線上教學影片的內容整理為筆記的目的之一,是作為開設「視頻遊戲之自適音樂與音訊設計」(adaptive music and sound design for video games) 課程之準備 。我比較想從音樂創作者的角度,慢慢深入了解自適音樂的領域與相關技術,同時也藉此切入遊戲引擎與程式設計相關的領域。由於網路的資訊以網頁形式作筆記最方便查詢,因此便採用了這個形式來記載學習紀錄與心得。

在此之前,我玩了一下相關的中介軟體( middle ware),讓我憶起念博士班時,聽過的一場作曲系舉辦的講座,作曲者真的是把視頻遊戲中的 3D 場景作為音樂展演的一部分,由遊戲參與者透過在 3D 場景中的探索作直接觸發音樂,這已經是大約 2003 年的事了然而,在國內沒人作這種實驗音樂,即使是在遊戲配樂的領域,儘管早已經有許多國外的視頻遊戲成功使用 adaptive music 的技術來為遊戲增色並藉此強化玩家的沈浸體驗,國內的遊戲公司卻也鮮少使用「自適音樂」的技術來處理遊戲配樂,一則可能這些遊戲公司並不重視音樂細節、二則是這些公司的技術人員不清楚有 adaptive music 的概念,也無經費投注在這種更需要作曲家與工程師緊密溝通的遊戲音樂處理技術。根據此領域的專家 Michael Sweet 在他的書中的說法,adaptive music 的製作費用要比一般線性的音樂之製作花雙倍的時間,因此製作費也較高。在軟體的操作上,對於一般熟悉 DAW 的數位音樂工作者而言,雖然並不是非常困難,但在互動音樂設計的概念上卻是必須技術、與音樂性都必須有所理解,才能真正將音樂的內容成功的搭配互動技術。

依照這些日子研究 adaptive music 的學習經驗,大體上,最重要的技術莫過於 vertical remixing 與 horizontal resequencing 兩種技術,其中後者的概念又比前者複雜,仰賴合適的 transition 在不同的氛圍的段落中進行銜接,如何將 transition 段設計得當並不是一件容易的事。任教於 Berklee Music College 的 Film Scoring Department 的 Michael Sweet 的著作 Writing Interactive Music for Video Games 對於「自適音樂」做了詳盡的概念上的介紹與歷年著名的遊戲使用 adaptive music 技術的相關整理。下面這個影片則詳細的介紹了自適音樂的概念與遊戲中的應用範例。






由於網路上可以找到相關的概念介紹雖然不少,但實際的操作對於音樂學習者或遊戲音效設計師而言,卻仍然很難有完整而系統化的學習資料,或者學習者本身的背景不夠完備來學習相關的知識與技術。程式設計師可能不懂音樂的處理手法、作曲家則又不太了解遊戲運作的方式與音樂需求,加上中文資料又非常少,因此我打算先來投入相關領域的實務研究,並藉由推出「視頻遊戲之自適音樂與音效設計」的課程於我任教的北科互動設計系,也藉此引起更多音樂學習者、互動設計的學習者、遊戲的開發者等,對於音樂、音訊在各種互動設計上的重視。在課程內容的規劃上,包含數位音樂本身的技術與知識、以及 adaptive music 設計與執行之方法,也包含在遊戲引擎 Unity 中模擬音樂互動的雛形之建立,提供音樂創作者沙盤推演之測試時使用。另外,也希望同時能夠納入 game audio 相關的技術。