SONiVOX JETCreator 使用者手冊

JET Interactive Music Engine 的內容編寫應用程式

1 簡介

1.1 總覽

本文件內含 SONiVOX JET Creator 的使用手冊,這是一種用於建立及稽核 JET 檔案的編寫應用程式。JET 是專為小型嵌入裝置設計的互動式音樂播放器,包括執行 Android 平台的裝置。可讓應用程式加入 MIDI 格式的互動式音樂配樂,即時回應遊戲遊玩事件和使用者互動。

JET 可與 SONiVOX 的嵌入式音訊合成器 (EAS) 搭配使用,後者是 Android 的 MIDI 播放裝置。JET 和 EAS 引擎都會透過 JetPlayer 類別整合至 Android 嵌入平台,也會在 JET Creator 應用程式中整合。因此,JET 內容作者可以確保 JET Creator 和 Android 行動裝置上的最終 Android 應用程式播放的音效完全相同。

除了圖形使用者介面外,JET Creator 也有兩種主要功能。首先,必須收集所有來源資料 (MIDI 檔案和 DLS 檔案)、新增 JET 的即時屬性,以及建構 Android 應用程式要使用的 JET (.jet) 檔案。第二項功能則涉及稽核互動式播放元素,因為它們在 Android 應用程式中會發生。

JET Creator 應用程式是以 Python 程式設計語言編寫,因此您必須安裝最新版本的 Python 和 WXWidgets。我們提供 Mac 和 Windows 兩種版本。

1.2 縮寫與常見詞彙

為了避免混淆,請務必使用一組通用字詞。由於 JET 是以獨特的方式使用 MIDI,因此一般產業用語不一定已足夠。以下是在本頁和 JET Creator 應用程式中使用的字詞定義:

管道:與特定 MIDI 管道相關的 MIDI 資料。標準 MIDI 可允許 16 個 MIDI 資料管道,每個管道通常都與特定檢測設備相關聯。

控制器:MIDI 事件,包含通道編號、控制器編號和控制器值。MIDI 規格會將多個控制器編號與特定函式 (例如音量、運算式、永續踏板等) 建立關聯。JET 也會使用控制器事件做為 MIDI 序列中嵌入特殊控制資訊的方法,以提供音訊同步處理。

DAW:數位音訊工作站。MIDI 和音訊序列應用程式的常見詞彙,例如 Logic、SONAR、Cubase 等等。

EAS:內嵌 MIDI 合成器。SONiVOX MIDI 合成器引擎的名稱。

JET:Jet Interactive Engine。SONiVOX JET 互動式音樂引擎的名稱。

M/B/T:度量、節拍和滴答

區隔:音樂區塊,例如副歌或逆旋,為整體組成組成部分。在 JET 中,片段可以是整個 MIDI 檔案,也可以是從某個 MIDI 檔案的一部分衍生而來。

SMF-0:標準 MIDI 檔案類型 0,這是包含單一音軌的 MIDI 檔案,但可能由多個 MIDI 資料管道組成。

SMF-1:標準 MIDI 檔案類型 1,包含多首曲目的 MIDI 檔案,且每個軌跡可能會由一或多個 MIDI 資料管道組成。依照慣例,每個版本都會儲存在 SMF-1 檔案中的獨立軌道。不過,單一測試群組中可能有多個 MIDI 管道,或包含同一個 MIDI 管道資料的多個測試群組。

追蹤:DAW 中的單一軌跡,包含一連串事件的時間序列。請務必小心,不要將曲目與頻道混淆。MIDI 檔案可能包含多個使用相同 MIDI 版本的曲目。

2 JET 互動式音樂概念

互動式音樂可以定義為音樂,這類音樂會根據無法預測的事件 (例如使用者互動或遊戲遊玩事件) 即時變更。如此一來,互動式音樂就能更加引人入勝,因為比起不會改變的預先創作組合,互動方式更接近遊戲的能量和心情。在某些應用程式和遊戲中,互動式音樂是遊戲過程的核心。《Guitar Hero》這款遊戲很受歡迎使用者成功擷取到冰板的音符時,音樂會自行調整,同時記錄成功和失敗的分數。JET 也能支援這類音樂導向遊戲。

有多種方法可以製作及控制互動式音樂,而 JET 是一種方法。本節說明 JET 的功能,以及 JET 在遊戲或軟體應用程式中的使用方式。以及如何使用 JET 在小型測光裝置 (例如支援 Android 的行動手機) 中節省記憶體。

2.1.1 資料壓縮

JET 支援靈活的音樂格式,可用於以最少資料量建立較長的音樂序列。樂曲可以分成多個片段,再進行序列以建立較長的片段。可以在編寫音樂檔案時修正序列,也可以透過程式控制功能動態建立排序。

2.1.2 線性音樂範例


圖 1:線性音樂件組

此圖表顯示音樂區隔的儲存方式。每個片段都會編寫為獨立的 MIDI 檔案。後續處理工具會將這些檔案結合成一個容器檔案。每個片段都可以包含替代曲目,您可以將替代曲目靜音或取消靜音,以創造額外的興趣。例如,副歌中只有最後一次播放的黃銅重音。此外,區隔也可以上下平移

圖表底部部分顯示如何重組音樂片段,建立線性音樂作品。在此範例中,橋接器可能會以半步驟鍵調完成,其餘片段則移植半步驟以進行比對。

2.1.3 非線性音樂範例


圖 2:非線性音樂作品

這張圖顯示非線性音樂作品情境為第一人稱射擊 (FPS),而 JET 提供背景音樂。簡介會在載入關卡時播放,接著在程式控制項中轉至「搜尋」片段。這個區段會無限期重複,例如,遊戲中的活動指示變更之前,可能會產生細微的變動 (使用靜音/取消靜音功能)。

當玩家靠近怪獸梯時,程式會開始同步轉場至「危險」區段,提高音訊的張力。當玩家繪製在靠近地面時,系統會取消靜音其他軌跡以增加張力。

當玩家與怪物戰鬥時,程式會啟動同步轉場至「戰鬥」單元。畫面會在戰鬥過程中無限重複出現。額外金曲會暫時將裝飾音軌取消靜音,會通知玩家成功攻擊,同樣地,在玩家收到特殊損害時,還會暫時取消靜音,以表示獎勵。

戰鬥結束後,音樂會依戰鬥結果轉換為勝利或擊敗片段。

2.1.4 靜音/取消靜音同步處理

JET 也可以將曲目的靜音和取消靜音設定同步到音樂中的事件。舉例來說,在 FPS 遊戲中,建議將獎勵和損壞的相關音樂活動盡可能放置在接近實際遊戲事件的位置。不過,如果在遊戲事件發生時取消靜音,可能會導致音樂片段中間開始。或者,短片可以從頭開始播放,但不會與其他音樂曲目同步。

不過,透過 JET 同步處理引擎,您可以在下一個商機階段啟動剪輯,並持續同步處理。只要在裝飾音軌上放置一些簡短的音樂片段即可。串流中的 MIDI 事件表示短片開始,第二個事件則代表短片的結束。應用程式呼叫 JET 剪輯函式時,曲目中的下一個片段可完全與音樂同步播放。您也可以選擇由第二個 MIDI 事件自動將音軌設為靜音。


圖 3:同步靜音/取消靜音

2.2 音訊同步

JET 提供音訊同步處理 API,可將遊戲過程同步至音訊中的事件。這項機制仰賴撰寫內容時 MIDI 檔案內嵌的資料。當 JET 引擎在播放期間偵測到事件,就會向應用程式程式產生回呼。您可以調整回呼的時間,來彌補音訊播放系統的任何延遲,以便能夠同步音訊和視訊。下圖是簡單的音樂遊戲範例,該遊戲在播放音樂時按下向左鍵和向右鍵。


圖 4:音樂遊戲

箭頭代表需要同步處理遊戲事件的事件序列中的事件。在這種情況下,藍色箭頭代表玩家應按下左側按鈕的時間,紅色箭頭代表右邊按鈕。黃色箭頭可讓遊戲引擎瞭解序列已完成。可讓玩家在事件前後的特定時間範圍按下適當的鍵。

如果接收到事件且玩家沒有按下按鈕,計時器會設為視窗時間的一半。如果在計時器到期前按下按鈕,遊戲會註冊成功,如果沒有,遊戲也會註冊失敗。

如果玩家在接收事件前按下按鈕,計時器會設為視窗長度的一半。如果在計時器到期前收到事件,遊戲會註冊成功,否則遊戲會註冊失敗。遊戲過程也可能包含接近實際活動時間的獎勵。

3 JET 內容編寫總覽

為了編寫 JET 檔案並以互動方式播放,內容作者將使用兩個設計成可流暢搭配運作的應用程式。第一種是任何支援 VST (PC) 或 AU (Mac) 外掛程式的現成 MIDI 序列應用程式,作者會使用外掛程式做為合成器裝置,來撰寫其 MIDI 音樂檔案。第二個應用程式是 JET Creator 應用程式。此作者會在啟用 JET 的遊戲中匯入 MIDI 音樂檔案 (以及可選的 DLS2 音效集),並設定互動式播放條件。內容作者則可使用支援 DLS 級別 2 格式的儀器編輯器,建立自訂 DLS 檢測工具。其中一個應用程式是 MJSoft 的 Awave。

如要進一步瞭解內容編寫,請參閱 JET 內容撰寫指南說明文件。

4 安裝及啟動 JET 建立者

JET Creator 是 Python 語言應用程式,因此您必須在電腦上安裝 Python 和 wxPython。

建立 JetCreator 並進行測試時,兩者均:

Python 2.5.4 版

wxPython 2.8.7.1 版

您可前往此處下載:

電腦:

  • http://www.python.org/download/releases/2.5.4/
  • http://www.wxpython.org/download.php

MAC:

  • http://wiki.python.org/moin/MacPython/Leopard
  • http://www.wxpython.org/download.php

安裝 Python 和 wxPython 之後,只需解壓縮或複製 JET Creator 應用程式目錄中的所有檔案,或複製到硬碟上的資料夾。

如要啟動 JET Creator,請前往指令提示,並將目錄設為您安裝 Python 的位置。接著請使用以下指令執行 Python:

python jetcreator.py

5 使用 JET Creator

5.1 檔案類型

有幾種不同的檔案類型與 JET Creator 相關聯。

.jtc JET Creator 專案檔案。這個檔案包含與 JET Creator 專案相關聯的所有資訊。當您透過 JET Creator 儲存或另存新檔時,系統就會儲存這種檔案類型。

.jet JET 檔案。每當您儲存 JET Creator 專案時,JET Creator 都會自動產生此輸出檔案。這個檔案會將所有 JET 資產合併成單一檔案,供 Android 應用程式使用。請將這個檔案提供給 Android 應用程式開發人員。

.mid 檔案。這是 JET Creator 用來建立區段的標準 MIDI 類型 1 檔案。

.seg Segment 檔案。這是 JET 區段檔案。這個檔案的名稱與所參照的 MIDI 檔案相同,但包含額外的區隔資訊。

ZIP 壓縮檔。匯出 JET 封存檔時,系統會建立 ZIP 檔案,其中包含 JET Creator 所需的所有資產 (檔案)。請使用這個連結將 JET Creator 專案轉移給其他使用者。

5.2 開啟對話方塊

初次啟動 JET Creator 時,系統會顯示一個開啟的對話方塊,如下所示:

<img <="" border="0" height="285" p="" src="/static/images/jet/jc_open_dlg.png" width="450" />

開啟:開啟現有的 .jtc (JET Creator 檔案) 檔案。請使用瀏覽器按鈕前往您儲存 .jtc 檔案的目錄。

New 將建立新的 .jtc 檔案。

匯入選項會匯入 JET 封存 (.zip) 檔案,

「Cancel」:取消對話方塊並結束應用程式。

5 主視窗

JET Creator 應用程式的主視窗如下圖所示。由上到下分為三個主要部分:區隔檢視、事件檢視和時間軸。

區隔檢視部分會顯示目前區隔的清單,包含來自各個區段的 MIDI 檔案和 (選擇性) DLS2 檔案。也會顯示每個片段的開始和停止時間,且每個片段都會量化、轉置、重複和靜音標記設定。

「區隔」檢視正下方顯示事件資料檢視「事件檢視」區段會顯示與特定區隔相關聯的所有事件。只有指派給該區隔的區隔才會顯示事件。每個事件都會顯示類型、開始和結束時間、追蹤管道和 中型管道分配,以及事件 ID。

「事件」檢視畫面正下方顯示時間軸。時間軸會顯示特定片段的測量次數,以及與該區隔相關聯的任何事件。時間軸會改為顯示目前選取或正在播放的片段。您可以在播放期間按一下時間軸顯示的事件,在此視窗中觸發事件。


JET 創作者主視窗

主視窗左側的按鈕會執行以下操作:

新增: 顯示用於新增區隔或事件的區隔或事件視窗

修改:顯示更新現有區隔或事件的區隔或事件視窗

刪除: 刪除所選區隔或事件 (要求確認)

移動:顯示移動視窗,讓您即時移動所選片段或事件

Queue All:佇列的 (選取) 所有播放片段

全部移除佇列:解除佇列 (取消選取) 所有區隔

播放:開始播放所有排入佇列的片段。如有任何片段正在播放 這個按鈕會變更為「停止」

稽核:顯示「稽核」期間 (請見下方)

5.1 區隔視窗

區段視窗是指派並稽核特定片段屬性的位置,如下圖所示。視窗左側會顯示儲存在 JET 檔案中的線段屬性。視窗的右側可允許作者設定忽略標記、重複並轉置設定及稽核片段,就像在 JET 遊戲中播放一樣。

注意:稽核屬性 (忽略標記、重複和轉置)「不會」儲存在 JET 內容檔案 (.jet) 中,而是由遊戲或應用程式本身定義。在程式設計語言中,這些設定會直接與 API 呼叫至 JET 引擎直接對應。JET 內容作者可在此模擬在遊戲過程中對應用程式 API 指令的回應方式,

區隔參數會執行下列操作:

  • 區隔名稱 - 設定區隔的名稱
  • MIDI 檔案 - 產生區隔的 MIDI 檔案名稱和位置。右側的按鈕會開啟瀏覽器,讓您在硬碟上尋找 midi 檔案。
  • DLS 檔案 - MIDI 檔案用於該片段的 DLS2 檔案名稱和位置 (如有)。
  • 從 M/B/T 開始: 開始測量、跳動與控製片段
  • 結束測量、節拍與滴答結束
  • 量化 - 在播放期間量化目前片段的值

稽核欄位如下:

  • 追蹤靜音 - 在 MIDI 檔案中顯示 MIDI 測試群組 (而非頻道)。按一下曲目的核取方塊 即可將該曲目設為靜音
  • 管道 - 顯示指派給每個測試群組的 MIDI 管道
  • 名稱 - 顯示每個曲目的曲目名稱中繼事件 (如有)
  • 重複 - 指示區段在播放期間應重複播放的次數
  • 轉置 - 表示片段在播放期間應以半色調或半步驟進行轉置
  • 「稽核」視窗右側有幾個其他按鈕。方法如下:
  • 確定 - 選取 [確定] 即可確認所有區隔設定,並關閉區隔視窗
  • 取消 - 選取「取消」會取消所有變更,並關閉區隔視窗
  • Replicate - 顯示可一次輸入多個路段的「Relicate Segment」(複製區隔) 視窗。詳情請參閱下文。
  • 播放/停止區段 - 使用指派的區段屬性開始或停止播放區段。
  • 播放/停止 MIDI 檔案 - 開始或停止播放指派區段的 MIDI 檔案。
  • 暫停/繼續 - 暫停或繼續播放。

5.2 事件回溯期

事件視窗會指派並稽核特定片段的事件屬性,如下圖所示。如要在區隔中新增事件,作者必須先選取含有事件的區隔,然後選取「新增」按鈕。畫面上就會顯示「事件」視窗

事件視窗會有兩個主要區段。事件視窗左側的區隔部分僅供顯示。顯示特定區隔的區隔屬性。右側的「事件」部分是指派事件的地方。可用的參數如下:

事件名稱 - 為事件指派名稱

事件類型 - 選取要指派的事件類型。

開始 M/B/T - 設定事件的開始度量、節拍和刻度

結束 M/B/T - 設定事件的結束度量、節拍和刻點 (如適用)

追蹤 - 設定要套用事件的指定區隔中的哪個音軌

管道 - 設定事件要套用的 MIDI 管道。MIDI 版本應與測試群組的 MIDI 管道相符

事件 ID:設定事件的事件 ID。多個事件可指派給同一個區隔,因此使用事件 ID 即可加以識別

「稽核」視窗右側有幾個其他按鈕。方法如下:

確定 - 選取 [確定] 即可確認所有活動設定,並關閉活動視窗

取消 - 選取「取消」會取消所有變更,並關閉活動視窗

複製 - 顯示可一次輸入多個活動的「複製活動」視窗。請參閱下文。

播放/停止 - 使用指派的區段屬性開始或停止播放區段。在區隔播放時,可以觸發及稽核事件。

觸發條件 - 觸發指派的事件。這會複製 JET 遊戲用來觸發事件的 API 指令,進而提供內容作者稽核事件行為的方法。

靜音/取消靜音 - 靜音/取消靜音可將事件指派的音軌靜音或取消靜音

暫停/繼續 - 暫停或繼續播放。

如要稽核事件的行為,您可以選取「播放」按鈕。這會開始播放。按下時,觸發按鈕會傳送觸發事件。這相當於在時間軸中選取綠色觸發事件。

注意:觸發事件主要用於在觸發時將區隔的單一追蹤取消靜音,然後在觸發條件區隔結束時將該軌跡設為靜音。因此,您應確保將靜音標記設為靜音,以在收到觸發事件時將觸發事件取消靜音的曲目。

如要進一步瞭解觸發事件的運作方式和行為,請參閱下方「6 相關案例」一節。

5.3 複製視窗

您通常必須在建立 JET 檔案時建立數十個或數百個事件。你可能也會需要移動事件。「Replicate」(複製) 和「Move」(移動) 視窗可執行這項操作。建立多個區隔或事件時,可以使用兩個複製視窗。如下所示:

複製區隔視窗

複製事件視窗

兩個複製窗口的功能相同。 建立初始區隔或事件後,您可以選取「複製」按鈕。參數如下:

名稱前置字元 - 設定每個區隔或事件的名稱前置字元

從 M/B/T 開始:設定第一個區隔或事件的開始時間

增量 M/B/T - 設定區隔或建立事件之間的時間。

編號 - 設定您想建立的區隔或事件數量。如果數字溢位 MIDI 檔案 (用於區隔) 或區隔 (針對事件) 的長度,系統就不會建立這些物件。

預覽 - 預覽功能可讓您在說出「OK」之前檢查建立的物件。

5.4 移動視窗

移動函式的運作方式與「複製」函式類似,都可讓您一次編輯多個片段或事件,在此情況下,系統會即時移動這些片段或事件。和「複製」一樣,有兩個「移動」視窗:一個用於「區隔」,另一個用於「事件」。視窗大致如下:

移動活動視窗

如要使用「移動」功能,請先選取要及時移動的區隔或事件,然後按一下「移動」按鈕。參數如下:

從 M/B/T 開始:設定第一個區隔或事件的開始時間

增量 M/B/T - 設定物件移動的 M/B/T 時間。

預覽 - 預覽功能可讓您在說出「確定」之前先檢查建立的物件。

5.5 試奏期間

在 JET Creator 應用程式的主要視窗中按一下 [Audition] 按鈕,即可開啟「Audition」視窗。這時內容作者或應用程式程式設計師可以模擬互動播放,因為行動應用程式或遊戲本身中可能發生。

JET 試鏡期間

稽核期間有四個主要部分最左側的區段會顯示可用區段及其長度 (以秒為單位)。中間部分的執行清單會顯示將哪些片段排入播放佇列,以及各片段的播放狀態。最右側部分會顯示目前播放片段的靜音標記。底部的時間軸部分與主視窗中相同。其中會顯示目前播放的區隔,並會以視覺化方式呈現與該區隔相關聯的任何事件觸發條件。

「稽核」視窗可讓您將任何片段排入佇列,以任何順序播放。方法是選取想出現的片段 然後點選「Queue」該區段會顯示在佇列視窗中,並開始播放 (如果這是第一個區段)。之後,您可以選取任何其他片段或片段,並提示觀眾播放。當片段完成播放時,佇列中的下一個片段會開始播放。如同 JET Creator 的其他視窗,您可以在每個片段播放時即時靜音、取消靜音、觸發事件片段等。

具體來說,按鈕的行為如下:

佇列 - 將所選片段載入佇列並開始播放

取消和佇列 - 取消目前播放的片段,再將所選片段排入播放佇列

取消 Current (取消目前) - 取消佇列中目前正在播放的片段,並開始播放下一個片段

停止 - 停止播放所有排入佇列的片段

全部靜音 - 將目前片段中的所有曲目設為靜音

靜音 - 將目前片段中的所有曲目取消靜音

原始靜音標記 - 設定目前片段的原始靜音標記

這些播放選項的組合可讓作者或應用程式程式設計師稽核互動式音樂應用程式可能遇到的任何行為。

5.6 JET 創作者選單

JET Creator 選單可讓您存取主視窗中的許多參數以及一些其他參數。

5.6.1 檔案選單

「檔案」選單包含下列元素:

新增 - 建立新的 JET 建立者檔案 (.jtc)

開啟 - 開啟現有的 JET Creator 檔案

儲存 - 儲存目前開啟的 JET Creator 檔案

另存新檔 - 將目前開啟的 JET Creator 檔案儲存至新檔案

匯入專案 - 匯入 JET Creator 封存檔 (.zip)

匯出專案 - 匯出 JET Creator 封存檔 (.zip)

結束 - 結束應用程式

5.6.2 編輯選單

「編輯」選單包含下列元素:

復原 - 復原 - 復原最近一次編輯

重做: 重做會重做上次復原

剪下 - 將所選參數複製到剪貼簿,並刪除選取項目

複製 - 將所選參數複製到剪貼簿,並保留選取項目

貼上 - 貼上所選參數

5.6.3 加幣

「編輯」選單包含下列元素:

屬性 - 開啟 JET Creator 優先事項視窗。這個視窗可讓您為指定 JET 檔案設定下列條件:

版權資訊 - 包含要插入 JET 檔案的版權資訊

Chase Controller - 追逐控制器的選項 (開啟/關閉)。此功能通常應為開啟狀態。

刪除空白曲目:刪除任何空的 MIDI 測試群組

5.6.4 區隔

「區隔」選單包含下列元素:

新增區隔 - 開啟「區隔」視窗

更新區隔 - 更新區隔屬性

刪除區隔 - 從區隔清單中刪除目前的區隔

5.6.5 說明

說明選單至少會包含下列元素:

JET Creator Help:啟動 PDF 說明文件或瀏覽線上說明

關於 - JET 建立者版本號碼、SONiVOX 資訊

6 個觸發事件說明

將 MIDI 檔案拆分為個別 (非線性) 區段,並根據遊戲中的事件將這些區隔排入佇列以便播放,是 JET 音樂檔案的互動方式。觸發事件是互動播放的額外方法。兩者皆可在互動式遊戲或應用程式中搭配使用。

觸發條件事件允許下列行為:

  1. MIDI「範圍內」的測試群組可根據遊戲事件開啟或關閉。舉例來說,作曲家可以編寫兩首快速和一首慢速的鼓。如果遊戲中的動作速度很快,就能播放快速鼓聲。如果遊戲過程緩慢,可以播放緩慢鼓舞曲目。
  2. 您可以將使用者動作與觸發音樂正確位置的音樂檔案進行比較,結果也會視結果、分數或遊戲動作實際發生。
  3. 可以同步關卡或動作序列之間的音樂轉場效果,就能順暢無礙地享受音樂。

實際上,JET 會使用標準 MIDI CC 事件完成這些動作並同步處理音訊。JET 使用的控制器包含在規格中未針對特定用途定義的控制器。具體的控制器定義如下:

控制器 80-83 保留供應用程式使用

控制器 102 JET 事件標記

控制器 103 JET 剪輯標記

控制器 104-119 保留供日後使用

6.1 JET 裁剪標記 (CC103)

Controller 103 專用於標記 MIDI 測試群組中的剪輯作業,該軌跡可透過 JET_TriggerClip API 呼叫觸發。剪輯 ID 會以控制器值的低 6 位元編碼。位元 6 設定為 1 表示剪輯開始,而設為 0 表示剪輯結束。

舉例來說,如要識別片段 ID 為 1 的片段,作者會在短片開頭插入 MIDI 控制器事件,其控制器是 103,值則在 value=65 之間,並在剪輯開始時插入另一個事件,Controller=103 且 value=1。使用片段 ID 1 呼叫 JET_TriggerClip() 函式時,當遇到控制器值 65 時,系統就會取消靜音,並在出現控制器值 1 時再次靜音。

圖 5:同步夾扣

在上圖中,如果在第一個控制器事件之前呼叫 JET_TriggerClip() 函式,則在第一個控制器事件發生時,系統會將 Track 3 取消靜音,並播放第一個片段,並在發生第二個控制器事件時靜音。如果在第一個控制器事件發生之後呼叫 JET_TriggerClip() 函式,則在第三個控制器事件發生時,音軌 3 將取消靜音,系統會播放第二個片段,並在第四個控制器事件發生時,再次靜音軌跡。

注意:一般而言,當片段一開始由 JET_QueueSegment() 呼叫排入佇列時,應用程式會將含有片段的曲目設為靜音。如未將片段設為靜音,系統會一直播放片段,直到使用片段 ID 呼叫 Jet_TriggerClip() 為止。

6.2 JET 事件標記 (CC102)

控制器 102 專用於標記 MIDI 串流中 JET 功能特有的事件。目前唯一定義的值是 0,這會標示片段的結尾以便用於計時。

一般而言,當發生 MIDI 追蹤結束事件事件時,JET 會開始播放下一個片段 (或重複目前的區段)。部分 MIDI 編寫工具會難以準確放置結尾標記,導致將片段合併在一起時造成同步問題。

為了避免這個問題,作者可在片段被循環的時間點置入 JET 區段結尾標記 (controller=102, value=0)。遇到結束區段標記時,會觸發下一個區段;如果是循環播放目前的片段,則會在區段開始時繼續播放。

結尾標記也可用來在測量下一個片段開始時,完整播放音樂人物。舉例來說,內容作者可以建立一個包含擊鼓的 4 長條片段,結尾是第 5 列的第 1 條,後者超出區段自然結尾的長條。透過在第 4 列末端放置一個區段的結尾標記,會觸發下一個區段,但是鼓式填色作業會與下一個片段平行,持續聆聽音樂連續性。

圖 6:區段結尾標記

6.3 應用程式控制器 (CC80-83)

應用程式可能會基於自身目的使用這個範圍中的控制器,遇到這個範圍內的控制器時,該事件會輸入到事件佇列,以供應用程式查詢。可能的應用方式包括同步處理含有音訊的影片事件,以及標示 MIDI 片段中的一個點,以便將下一個片段排入佇列。應用程式監控的控制器範圍可在初始化期間修改。

7 JET 創作者指南

7.1 工作順序

如同所有專案,建議您在開始構圖前,與遊戲設計人員和程式設計師討論及設計互動式音樂配置。大綱和/或規格可以大幅節省您的時間,這樣一來,當遊戲結束之後,就不必再重複操作。

一般而言,建議您先以慣用的 DAW 格式編寫音樂,再視需要將最終的 MIDI 檔案分割成應用程式。接著,前往 JET Creator 建立所有的音樂片段,並按照順序播放時,方便試聽。最後,請新增 JET 事件,透過 Android 遊戲控制這些片段,並視需要在 JET Creator 中與「稽核」功能來控製片段。最後,將專案儲存在 JET Creator 中,然後將 .jet 檔案交給程式設計師,即可將其整合至遊戲中。預覽之後,MIDI 檔案和 JET Creator 屬性可能會有變更。

7.2 節省記憶體

如要節省記憶體,請盡量組合 MIDI 檔案,然後從該 MIDI 檔案建立多個片段。舉例來說,假設有 12 個長條的 MIDI 檔案包含 4 格的三個段落,A、B、C 就會產生更長的歌曲。只要建立多個參照這個 MIDI 檔案的片段,再按照需要的方式排序即可。例如,A、A、B、A、C、A、B、A、A 會創作 36 歌。你可以使用 JET 新增重複播放、傳輸片段,並以互動方式將歌曲靜音及取消靜音,讓曲風更加有趣。

7.3 複製

如要快速新增區隔或事件,請使用「複製」指令。複製功能可以一次新增多個區隔或事件,並使用 offset 參數和前置字串命名慣例,讓設定清晰易讀。MOVE 指令也適合按照固定的測量單位、跳動點或滴答移動多個事件。

7.4 互動式選項

JET 提供多種互動式音訊概念。以下提供幾個例子,但我們希望開發人員可以提出一些我們從未想到的案例!這兩種網址格式分別如下:

7.4.1 多個區隔觸發條件

使用這種方法時,應用程式會根據遊戲中的事件觸發特定區隔。舉例來說,有大量戰鬥的走廊可能會觸發第 1 段,沒有戰鬥的走廊可能會觸發第 2 段。搭配使用 JET TriggerClips 與此方法,即可創造更多多樣性。

7.4.2 靜音陣列

使用此方法時,應用程式會在單一 MIDI 序列中觸發將靜音和取消靜音的事件。舉例來說,有大量戰鬥的走廊可能會播放 MIDI 音軌 1 到 16,在沒有戰鬥的走廊可能會播放相同的 9-16 音軌,但設為靜音。搭配使用 JET TriggerClips 與此方法,即可創造更多多樣性。

7.4.3 以音樂為導向的遊戲

音樂導向的遊戲和《吉他英雄》和 JETBOY 在音樂內容中的呈現方式決定了血腥事件的顯示方式。接著,應用程式會查詢使用者回應圖像事件,並透過互動方式修改音樂。這個方法中的遊戲會使用 JET 應用程式事件、內嵌於 MIDI 檔案中的 MIDI 控制器,並讓遊戲即時讀取。您可以根據使用者回應,設定多個區隔觸發條件和/或忽略陣列。