JET Interactive Music Engine 向けコンテンツ オーサリング アプリケーション
1 はじめに
1.1 概要
このドキュメントには、JET ファイルの作成とオーディションを行うためのオーサリング アプリケーションである SONiVOX JET Creator のユーザー ガイドラインが記載されています。JET は、Android プラットフォーム搭載の小型組み込みデバイス向けのインタラクティブな音楽プレーヤーです。これにより、ゲームプレイ イベントやユーザー操作にリアルタイムで応答する MIDI 形式のインタラクティブな音楽サウンドトラックをアプリに含めることができます。
JET は、Android の MIDI 再生デバイスである SONiVOX の Embedded Audio Synthesizer(EAS)と連携して動作します。JET エンジンと EAS エンジンはどちらも、JET Creator アプリケーション固有のものと同様に、JetPlayer
クラスを介して Android 組み込みプラットフォームに統合されています。そのため、JET コンテンツの作成者は、JET Creator と、Android モバイル デバイスで再生される最終的な Android アプリの両方で、再生音声がまったく同じであることを確認できます。
JET Creator には、グラフィカル ユーザー インターフェース以外にも 2 つの主要な機能があります。1 つ目は、すべてのソースデータ(MIDI ファイルと DLS ファイル)を収集し、JET のリアルタイム属性を追加して、Android アプリで使用する JET(.jet)ファイルを作成します。2 つ目の機能では、Android アプリにおけるインタラクティブな再生要素のオーディションを行います。
JET Creator アプリケーションは Python プログラミング言語で作成されているため、Python と WXWidgets の最新バージョンがインストールされている必要があります。Mac 版と Windows 版の両方が用意されています。
1.2 略語と共通用語
混乱を最小限に抑えるために、共通の用語を使用することが重要です。JET では MIDI を独自の方法で用いるため、通常の業界用語では必ずしも十分でない場合があります。このページと JET Creator アプリケーションで使用される用語の定義を次に示します。
チャンネル: 特定の MIDI チャンネルに関連付けられた MIDI データ。標準 MIDI は 16 チャンネルの MIDI データに対応しており、それぞれは通常特定の楽器に関連付けられています。
コントローラ: チャンネル番号、コントローラ番号、コントローラ値で構成される MIDI イベント。MIDI 仕様では、多くのコントローラ番号をボリューム、エクスプレッション、サステイン ペダルなどの特定の機能に関連付けます。JET では、オーディオの同期を提供するために、特別なコントロール情報を MIDI シーケンスに埋め込む手段としてもコントローラ イベントを使用します。
DAW: デジタル オーディオ ワークステーション。Logic、SONAR、Cubase など、MIDI やオーディオのシーケンス アプリケーションを指す一般的な用語。
EAS: Embedded MIDI Synthesizer。SONiVOX MIDI シンセサイザー エンジンの名前。
JET: Jet Interactive Engine。SONiVOX JET インタラクティブ音楽エンジンの名前。
M/B/T: 小節、拍、ティック
セグメント: 楽曲全体の構成要素であるコーラスや節などの音楽セクション。JET では、セグメントは MIDI ファイル全体または MIDI ファイルの一部分から導出された場合があります。
SMF-0: 標準 MIDI ファイル タイプ 0。単一のトラックを含む MIDI ファイルですが、複数のチャンネルの MIDI データで構成される場合があります。
SMF-1: 標準 MIDI ファイル タイプ 1。1 つ以上のトラックを含む MIDI ファイル。各トラックは、1 つ以上の MIDI データ チャンネルで構成されます。慣例として、各チャンネルは SMF-1 ファイルの個別のトラックに保存します。ただし、1 つのトラックに複数の MIDI チャンネルを含めたり、同じ MIDI チャンネルのデータを含む複数のトラックにしたりすることは可能です。
トラック: DAW 内の 1 つのトラックを指し、時系列のイベントを含みます。トラックとチャンネルを 混同しないように注意してください1 つの MIDI ファイルには、同じ MIDI チャンネルを利用する複数のトラックを含む多数のトラックが含まれる場合があります。
2 JET インタラクティブ音楽のコンセプト
インタラクティブ音楽は、ユーザー操作やゲームプレイ イベントなどの予測不可能なイベントに応じてリアルタイムで変化する音楽と定義できます。このように、インタラクティブ音楽は、変わらない既成の楽曲よりも、ゲームの雰囲気や雰囲気にマッチできるため、より魅力的です。一部のアプリやゲームでは、インタラクティブな音楽がゲームプレイの中心です。ギターヒーローは 人気があるゲームの 1 つですエンドユーザーがフレットボードに入ってくる音符をうまくキャプチャすると、音楽はそれに適応すると同時に、成功と失敗のスコアを保持します。JET ではこのような音楽駆動型ゲームも 可能になっています
インタラクティブな音楽を作成して制御するにはいくつかの方法がありますが、JET はその方法の 1 つです。このセクションでは、JET の機能と、ゲームやソフトウェア アプリでの使用方法について説明します。また、Android 搭載のモバイル ハンドセットなどの小型フットプリントのデバイスで、JET を使用してメモリを節約する方法についても説明します。
2.1.1 データ圧縮
JET は、最小限のデータで拡張された音楽シーケンスを作成できる柔軟な音楽形式をサポートしています。楽曲は、複数のセグメントに分割され、それを順番に処理してより長い曲を作成します。シーケンスは、音楽ファイルの作成時に固定することも、プログラムの制御下で動的に作成することもできます。
2.1.2 線形音楽の例
図 1: 線形楽曲
次の図は、音楽セグメントの保存方法を示しています。各セグメントは個別の MIDI ファイルとして作成されます。後処理ツールが、複数のファイルを 1 つのコンテナ ファイルに結合します。各セグメントには、別の音楽トラックを含めることができ、さらにミュートしたり、ミュートを解除したりして、さらに興味を持たせることができます。たとえば、最後にのみ演奏されたコーラスの真ちゅうのアクセントなどです。また、セグメントは上下に転置できます。
図の下部は、音楽セグメントを再結合して線状の楽曲を作成する方法を示しています。この例では、ブリッジがハーフステップの鍵変調で終了し、残りのセグメントをそれに合わせて半ステップ分上に移動できます。
2.1.3 非線形音楽の例
図 2: 非線形楽曲
この図は非線形の楽曲ですこのシナリオは、ファースト パーソン シューティング(FPS)で、JET がバックグラウンド ミュージックを提供しています。レベルの読み込み中にイントロが再生され、プログラム制御下で検索セグメントに移行します。このセグメントは、ゲーム内のアクティビティによって変更が指示されるまで、(ミュート/ミュート解除機能を使用して)小さな変化を伴って無期限に繰り返されます。
プレーヤーがモンスターの居所に近づくと、プログラムは危険セグメントへの同期的な移行を開始し、音声の緊張レベルを上げます。プレーヤーが隠れ家に近づくと、他のトラックのミュートが解除され、緊張が増します。
プレーヤーがモンスターとの戦闘に入ると、プログラムは戦闘セグメントへの同期移行を開始します。戦闘が続く間、このセグメントは無期限に繰り返されます。ボーナスヒットは、攻撃が成功したことをプレーヤーに通知する装飾トラックのミュートを一時的に解除します。同様に、プレーヤーが特殊ダメージを受けたことを示すために、別のトラックのミュートを一時的に解除します。
戦闘終了時には、戦闘結果に応じて音楽が勝利セグメントに切り替わります。
2.1.4 同期のミュートとミュート解除
JET では、トラックのミュートとミュート解除を音楽内のイベントと同期することもできます。たとえば FPS ゲームでは、ボーナスやダメージに関連する音楽イベントは、できる限り実際のゲームイベントの近くに配置することをおすすめします。ただし、ゲームイベントが発生した時点でトラックのミュートを解除するだけで、音楽クリップが途中から開始される場合があります。また、クリップを最初から開始して、その後で他の音楽トラックと同期しないようにすることもできます。
ただし、JET 同期エンジンを使用すると、適切なタイミングでクリップを開始し、同期を維持できます。そのためには、装飾トラックに短い音楽クリップを数多く配置します。ストリーム内の MIDI イベントはクリップの開始を示し、2 つ目のイベントはクリップの終了を示します。アプリが JET クリップ関数を呼び出すと、トラック内の次のクリップが音楽に完全に同期して再生されます。必要に応じて、2 つ目の MIDI イベントで自動的にトラックをミュートできます。
図 3: 同期されたミュートとミュート解除
2.2 オーディオの同期
JET は、ゲームプレイを音声内のイベントに同期させる音声同期 API を提供します。このメカニズムは、コンテンツの作成時に MIDI ファイルに埋め込まれたデータに依存します。JET エンジンは、再生中にイベントを検出すると、アプリ プログラムへのコールバックを生成します。コールバックのタイミングを調整して、オーディオ再生システムのレイテンシを補正することで、音声と動画を同期させることができます。以下の図は、音楽に合わせて左右の矢印を押すシンプルな音楽ゲームの例を示しています。
図 4: 音楽ゲーム
矢印は、ゲームイベントを同期する必要がある音楽シーケンスのイベントを表します。この場合、青い矢印はプレーヤーが左ボタンを押すタイミングを表し、赤い矢印は右ボタンを表します。黄色の矢印はシーケンスが完了したことをゲームエンジンに知らせます。プレーヤーは、イベントの前後に特定の時間枠で適切なキーを押すことができます。
イベントを受信し、プレーヤーがボタンを押していない場合、タイマーはウィンドウの半分の長さに設定されます。タイマーが切れる前にプレーヤーがボタンを押すと、ゲームは成功を登録します。そうでなければ、ゲームは失敗を登録します。
イベントを受信する前にプレーヤーがボタンを押すと、タイマーがウィンドウの半分の長さに設定されます。タイマーが切れる前にイベントを受信すると成功を記録し、そうでない場合は失敗を登録します。ゲームプレイには、実際のイベントのタイミングに近づくとボーナスも含まれることがあります。
3 JET コンテンツ作成の概要
JET ファイルを作成してインタラクティブに再生するために、コンテンツ作成者はスムーズに連携するように設計された 2 つのアプリケーションで作業を行います。1 つ目は、VST(PC 用)プラグインまたは AU(Mac 用)プラグインをサポートする既製の MIDI シーケンス アプリケーションです。ここで作成者は、プラグインをシンセサイザー デバイスとして使用して MIDI 音楽ファイルを作成します。2 つ目は、JETCreator アプリケーションです。ここでは、作成者が MIDI 音楽ファイル(および必要に応じて DLS2 サウンドセット)をインポートし、JET 対応ゲーム内でのインタラクティブ再生の条件を設定します。必要に応じて、コンテンツ作成者は DLS レベル 2 形式をサポートする計器エディタを使用して DLS 機器のカスタムセットを作成できます。そのようなアプリケーションの 1 つに FMJ-Software の Awave Studio があります。
コンテンツ作成の詳細については、JET コンテンツ作成ガイドラインのドキュメントをご覧ください。
4 JETCreator のインストールと起動
JET Creator は Python 言語アプリケーションであるため、マシンに Python と wxPython がインストールされている必要があります。
JETCreator は、以下を使用して作成およびテストされています。
Python バージョン 2.5.4
wxPython バージョン 2.8.7.1
これらは、次の URL からダウンロードできます。
PC 用:
- 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 JETCreator の使用
5.1 ファイル形式
JET Creator に関連するファイル形式はいくつかあります。
.jtc JETCreator プロジェクトファイルが作成されますこのファイルには、JET Creator プロジェクトに関連するすべての情報が含まれています。JET Creator で [保存] または [名前を付けて保存] を選択すると、このファイル形式が保存されます。
.jet JET ファイル。この出力ファイルは、JET Creator プロジェクトを保存するたびに JET Creator から自動的に生成されます。このファイルは、Android アプリで使用するすべての JET アセットを 1 つのファイルにバンドルしたファイルです。このファイルを Android アプリ デベロッパーに渡します。
.mid ファイル。これは、JET Creator でセグメントを作成するために使用する標準の MIDI タイプ 1 ファイルです。
.seg Segment ファイルです。これは、JET セグメントのファイルです。参照先の MIDI ファイルと同じ名前になりますが、追加のセグメント情報が含まれます。
ZIP アーカイブ ファイル。JET アーカイブをエクスポートすると、JET Creator に必要なすべてのアセット(ファイル)を含む ZIP ファイルが作成されます。JET Creator プロジェクトを他のユーザーに移管するには、これを使用します。
5.2 ファイルを開くダイアログ
JET Creator を初めて起動すると、次のようなダイアログが開かれます。
<img <="" width="0" height="285" p="" src="/static/images/jet/jc_open_dlg.png" width="450" />
[Open] は、既存の .jtc ファイル(JETCreator ファイル)を開く場合に使用します。ブラウザボタンを使用して、.jtc ファイルを保存したディレクトリに移動します。
新規: 新しい .jtc ファイルを作成します。
Import は、JET アーカイブ(.zip)ファイルをインポートします。
[キャンセル] はダイアログをキャンセルし、アプリを終了します。
5 メイン ウィンドウ
JET Creator アプリケーションのメイン ウィンドウは、次の図のようになります。上から順に、セグメント ビュー、イベントビュー、タイムラインという 3 つのメイン セクションがあります。
セグメント ビュー セクションには、現在のセグメントのリストが表示され、各セグメントの派生元である MIDI ファイルと(必要に応じて)DLS2 ファイルが表示されます。また、各セグメントの開始時刻と終了時刻、各セグメントのクオンタイズ、転置、リピート、ミュートのフラグの設定も表示されます。
セグメントビューのすぐ下には イベントビューがありますイベントビュー セクションには、特定のセグメントに関連付けられているすべてのイベントが表示されます。イベントは、割り当てられているセグメントがハイライト表示されているときにのみ表示されます。各イベントには、タイプ、開始ポイントと終了ポイント、トラックと MIDI チャンネルの割り当て、イベント ID が表示されます。
[イベント]ビューのすぐ下に タイムラインが表示されますタイムラインには、特定のセグメントのメジャーの数と、そのセグメントに関連付けられているイベントが表示されます。タイムラインが変わり、現在選択されているセグメントまたは再生中のセグメントが表示されます。タイムライン表示でイベントをクリックするだけで、セグメントの再生中にこのウィンドウでイベントをトリガーできます。
JET Creator のメイン ウィンドウ
メイン ウィンドウの左側にあるボタンで、次のことができます。
[Add]: 新しいセグメントまたはイベントを追加するためのセグメントまたはイベントのウィンドウを表示します
[Revise]: 既存のセグメントまたはイベントを更新するためのセグメントまたはイベント ウィンドウを表示します
[削除]: 選択したセグメントまたはイベントを削除します(確認メッセージが表示されます)。
[Move]: 選択したセグメントまたはイベントを時間内に移動できる移動ウィンドウを表示します。
Queue All(すべてキューに追加): 再生するすべてのセグメントをキューに追加(選択)
すべてデキュー: すべてのセグメントをキューから取り出します(選択を解除します)
再生: キューに追加されたすべてのセグメントの再生を開始します。セグメントが再生されていると このボタンは [停止]に変わります
[Audition]: オーディション ウィンドウを表示します(下記参照)。
5.1 セグメント ウィンドウ
下の図に示すように、セグメント ウィンドウでは、特定のセグメントの属性の割り当てやオーディションを行うことができます。ウィンドウの左側には、JET ファイルに保存されているセグメント属性が表示されます。ウィンドウの右側では、ミュートフラグの設定、設定の繰り返しと転置、セグメントのオーディション(JET ゲームで再生される際に)を行うことができます。
注: オーディション属性(ミュートフラグ、繰り返し、転置)は JET コンテンツ ファイル(.jet)に保存されず、ゲームまたはアプリ自体によって定義されます。プログラミング言語では、これらの設定は、JET エンジンへの API 呼び出しに直接対応します。ここにそれらを含めることで、JET コンテンツ作成者は、ゲームプレイ中にセグメントがアプリの API コマンドにどのように応答するかをシミュレートできます。
セグメント パラメータの意味は以下のとおりです。
- [Segment Name] - セグメントの名前を設定します
- [MIDI File] - セグメントの抽出元となる MIDI ファイルの名前と場所。右側にあるボタンを押すと、ブラウザが開き、ハードドライブ上の MIDI ファイルを見つけることができます。
- DLS ファイル - MIDI ファイルがセグメントに使用する DLS2 ファイル(存在する場合)の名前と場所。
- [Starting M/B/T]: セグメントの小節、ビート、ティックの開始位置です。
- [Ending M/B/T] - セグメントの最後の小節、ビート、ティック
- クオンタイズ - 再生中に現在のセグメントをクオンタイズするための量子化値
オーディションの項目は次のとおりです。
- [Track ミュート] - MIDI ファイルの MIDI トラックを表示します(チャンネルではありません)。トラックのチェックボックスをオンにすると そのトラックがミュートされます
- [Channel] - 各トラックに割り当てられた MIDI チャンネルが表示されます。
- 名前 - 各トラックのトラック名のメタイベント(存在する場合)を表示します
- [繰り返し] - 再生中にセグメントが繰り返される回数を示します
- 転置 - 再生中にセグメントが転置するセミトーンまたはハーフステップの転置を指定します。
- [Audition] ウィンドウの右側には、いくつかのボタンがあります。 機能は以下のとおりです。
- [OK]を選択すると セグメントのすべての設定を確認し
- [キャンセル] - [キャンセル]を選択すると、変更がすべてキャンセルされ、セグメント ウィンドウが閉じます。
- [Replicate] - 複数のセグメントを一度に入力するための [Replicate Segment] ウィンドウを表示します。下記をご覧ください。
- [Play/Stop Segment] - 割り当てられたセグメント属性を使用して、セグメントの再生を開始または停止します。
- Play/Stop MIDI File - セグメントが割り当てられている MIDI ファイルの再生を開始または停止します。
- 一時停止/再開 - 再生を一時停止または再開します。
5.2 イベント ウィンドウ
下の図に示すように、イベント ウィンドウでは、特定のセグメントのイベント属性の割り当てやオーディションを行うことができます。セグメントにイベントを追加するには、まずイベントを含むセグメントを選択し、[追加] ボタンを選択する必要があります。これにより、イベント ウィンドウが表示されます。
イベント ウィンドウには 2 つのメイン セクションがあります。イベント ウィンドウの左側にあるセグメント セクションは表示専用です。ここには、選択したセグメントのセグメント属性が表示されます。右側の [イベント] セクションでは、イベントを割り当てることができます。使用できるパラメータは次のとおりです。
Event Name - イベントに名前を割り当てます
[Event Type] - 割り当てるイベントの種類を選択します。
[Starting M/B/T] - イベントの開始小節、ビート、ティックを設定します
Ending M/B/T - イベントの終了小節、ビート、ティックを設定する(該当する場合)
トラック - 特定のセグメント内でイベントを適用するトラックを設定します
[Channel] - イベントを適用する MIDI チャンネルを設定します。MIDI チャンネルはトラックの MIDI チャンネルと一致
Event ID - イベントのイベント ID を設定します。同じセグメントに複数のイベントを割り当てることができるため、イベント識別にはイベント ID が使用されます
[Audition] ウィンドウの右側には、いくつかのボタンがあります。 機能は以下のとおりです。
[OK] - [OK] を選択すると、すべてのイベントの設定が確認され、イベント ウィンドウが閉じます
[Cancel] - [Cancel] を選択すると、変更がすべてキャンセルされ、イベント ウィンドウが閉じます。
[Replicate] - 複数のイベントを一度に入力する [Replicate Event] ウィンドウを表示します。以下をご覧ください。
[Play/Stop] - 割り当てられたセグメント属性を使用して、セグメントの再生を開始または停止します。セグメントの再生中に、イベントをトリガーしてオーディションを行えます。
トリガー - 割り当てられたイベントをトリガーします。これにより、JET ゲームがイベントをトリガーするために使用する API コマンドが複製されるため、コンテンツ作成者はイベントの動作をオーディションするためのメソッドが提供されます。
[ミュート/ミュート解除] - [ミュート/ミュート解除] は、イベントが割り当てられているトラックをミュートまたはミュート解除します
一時停止/再開 - 再生を一時停止または再開します。
イベントの動作を確認するには 再生ボタンを選択しますこれにより、再生が開始されます。トリガーボタンを押すと、トリガー イベントが送信されます。これは、タイムラインで緑のトリガー イベントを選択するのと同じです。
注: トリガー イベントとは、トリガーされたときにセグメントの 1 つのトラックのミュートを解除し、トリガー セグメントの最後でそのトラックをミュートすることです。したがって、トリガー イベントを受信したときにミュートを解除するトラックをミュートするように、ミュートフラグを設定する必要があります。
トリガー イベントの仕組みと動作について詳しくは、以下のセクション 6 詳細をご覧ください。
5.3 複製ウィンドウ
多くの場合、JET ファイルを作成する際は、数十、場合によっては数百のイベントを作成する必要があります。イベントを移動する必要が生じる場合もあります。[Replicate] ウィンドウと [Move] ウィンドウを使用できます。複数のセグメントまたはイベントを作成するための [Replicate] ウィンドウが 2 つあります。それぞれを下の図に示します。
[Replicate Segment] ウィンドウ
[Replicate Event] ウィンドウ
どちらの [Replicate] ウィンドウも同じように機能します。 最初のセグメントまたはイベントを作成した後、[Replicate] ボタンを選択できます。パラメータは以下のとおりです。
[Name Prefix] - 作成する各セグメントまたはイベントの名前のプレフィックスを設定します。
[Starting M/B/T] - 最初のセグメントまたはイベントの開始時間を設定します。
[Increment M/B/T] - セグメントまたはイベント間の時間を設定します。
数値 - 作成するセグメントまたはイベントの数を設定します。数値が MIDI ファイル(セグメントの場合)またはセグメント(イベントの場合)の長さを超える場合、それらのオブジェクトは作成されません。
[プレビュー] - [プレビュー] では、作成されたオブジェクトを確認してから挿入することができます。
5.4 移動ウィンドウ
移動機能は、複数のセグメントまたはイベントを一度に編集できるという点で、複製機能と同様に機能します。この場合、複数のセグメントまたはイベントを一度に移動できます。[Replicate] と同様に、[Move] ウィンドウが 2 つあります。1 つはセグメント用、もう 1 つはイベント用です。ウィンドウは次のようになります。
[Move Event] ウィンドウ
移動を使用するには、まず時間軸で移動するセグメントまたはイベントを選択し、[Move](移動)ボタンをクリックします。パラメータは次のとおりです。
[Starting M/B/T] - 最初のセグメントまたはイベントの開始時間を設定します。
[Increment M/B/T] - オブジェクトを移動する時間を M/B/T 単位で設定します。
[プレビュー] - [プレビュー] では、作成されたオブジェクトを確認してから移動できます。
5.5 オーディション ウィンドウ
JET Creator アプリケーションのメイン ウィンドウで [Audition] ボタンをクリックすると、オーディション ウィンドウが開きます。ここでは、コンテンツ作成者やアプリ プログラマーが、モバイルアプリやゲーム自体で発生するインタラクティブ再生をシミュレートできます。
JET オーディション ウィンドウ
オーディションウィンドウには 4 つのメインセクションがあります左端のセクションには、使用可能なセグメントとその長さ(秒単位)が表示されます。中央のセクションには、再生キューに入れられているセグメントとその再生ステータスの一覧が、右端のセクションには現在再生中のセグメントのミュートフラグが表示されます。下部のタイムライン セクションはメイン ウィンドウと同じです。現在再生中のセグメントと、そのセグメントに関連付けられているイベント トリガーが表示されます。
オーディション ウィンドウでは、再生のために任意のセグメントを任意の順序でキューに入れることができます。キューに入れるセグメントを選択して キューに入れるだけですそのセグメントがキュー ウィンドウに表示され、再生を開始します(最初のセグメントの場合)。その後、他のセグメントを選択し、キューに入れて再生することができます。セグメントの再生が完了すると、キュー内の次のセグメントの再生が開始されます。JET Creator のその他のウィンドウと同様に、各セグメントの再生中にリアルタイムでミュート、ミュート解除、イベント クリップのトリガーなどを行うことができます。
ボタンの具体的な機能は以下のとおりです。
[Queue] - 選択したセグメントをキューに読み込んで再生を開始します。
[Cancel and Queue] - 現在再生中のセグメントをキャンセルしてから、選択したセグメントを再生用にキューに登録します。
[Cancel Current] - キュー内で現在再生中のセグメントをキャンセルし、次のセグメントの再生を開始します。
[停止] - キューに追加されたすべてのセグメントの再生を停止します。
[全体をミュート]は 現在のセグメントのすべてのトラックをミュートします
[ミュートなし]は 現在のセグメント内のすべてのトラックのミュートを解除します
元のミュート - 現在のセグメントに元のミュートフラグを設定します。
これらの再生オプションを組み合わせることで、作成者やアプリ プログラマーは、インタラクティブ音楽アプリで生じる可能性のある動作をオーディションできます。
5.6 JETCreator のメニュー
JET Creator のメニューから、メイン ウィンドウの多くのパラメータといくつかの追加パラメータにアクセスできます。
5.6.1 File メニュー
[ファイル] メニューには次の要素があります。
[新規] - 新しい JET Creator ファイル(.jtc)を作成します
[開く] - 既存の JET Creator ファイルを開きます。
保存 - 現在開いている JET Creator ファイルを保存します
名前を付けて保存 - 現在開いている JET Creator ファイルを新しいファイルに保存します
[Import Project] - JETCreator アーカイブ(.zip)をインポートします。
[Export Project] - JETCreator アーカイブ(.zip)をエクスポートします。
[Exit]は アプリを終了します
5.6.2 Edit メニュー
[編集] メニューには以下の要素があります。
元に戻す - 直前の編集を元に戻します
[やり直し] - 最後に元に戻した操作をやり直します。
切り取り - 選択したパラメータをクリップボードにコピーして、選択範囲を削除
[Copy] - 選択したパラメータをクリップボードにコピーして、選択範囲を保持します
[貼り付け] - 選択したパラメータを貼り付け
5.6.3 Jet メニュー
[編集] メニューには以下の要素があります。
プロパティ - JET Creator の優先度ウィンドウを表示します。このウィンドウでは、特定の JET ファイルに対して次の条件を設定できます。
[Copyright] - JET ファイルに含める著作権情報。
[Chase Controllers] - コントローラを追跡するオプション(オンまたはオフ)。通常はオンにします。
[Delete Empty Tracks] - 空の MIDI トラックをすべて削除します。
5.6.4 Segments メニュー
セグメント メニューには以下の要素が含まれています。
[Add Segment] - [Segment] ウィンドウを表示します
[Revise Segment] - セグメント属性を更新します。
[Delete Segment] - セグメント リストから現在のセグメントを削除します
5.6.5 Help メニュー
ヘルプメニューには少なくとも次の要素が含まれます。
[JET Creator Help] - PDF のヘルプ ドキュメント、またはオンライン ヘルプを表示します。
概要 - JET Creator のバージョン番号、SONiVOX の情報
6 トリガー イベントの説明
MIDI ファイルを個別の(非線形)セグメントに分割し、ゲーム内のイベントに基づいて、それらのセグメントをゲーム内で再生するためにキューに入れることは、JET 音楽ファイルをインタラクティブにする方法の一つです。インタラクティブな再生には、トリガー イベントも使用できます。 両方とも、インタラクティブなゲームやアプリで一緒に使用されます。
トリガー イベントを使用すると、次のことが可能です。
- MIDI セグメント内のトラックは、ゲームイベントに基づいてオンまたはオフにできます。たとえば、作曲家は速いドラムのトラックと遅いドラムのトラックを 2 つ作成します。ゲームのアクションが速い場合は、速いドラムトラックを演奏します。アクションが遅いときには遅いドラムトラックを再生できます。
- ユーザー アクションは、音楽ファイルの適切な位置にあらかじめ挿入されているトリガー イベントと比較できます。その結果に応じて、スコアリングなどのゲーム アクションを実行できます。
- レベル間やアクション シーケンス間の音楽的な遷移を同期して、音楽的にシームレスにすることができます。
内部的には、JET は標準の MIDI CC イベントを使用してこれらのアクションを実行し、オーディオを同期します。JET で使用されるコントローラは、この仕様では特定の用途が定義されていないコントローラもあります。具体的なコントローラの定義は次のとおりです。
コントローラ 80 ~ 83 アプリケーション用に予約
コントローラ 102 JET イベント マーカー
コントローラ 103 JET クリップ マーカー
コントローラ 104 ~ 119 - 将来の使用のために予約済み
6.1 JET クリップ マーカー(CC103)
コントローラ 103 は、JET_TriggerClip API 呼び出しによってトリガーできる MIDI トラック内のクリップをマーキングするために予約されています。クリップ ID は、コントローラ値の下位 6 ビットでエンコードされます。ビット 6 は 1 にセットされてクリップの開始を示し、0 にセットされてクリップの終わりを示します。
たとえば、クリップ ID が 1 のクリップを識別するには、クリップの最初に、controller=103 と value=65 の MIDI コントローラ イベントをクリップの最後に挿入し、controller=103 と value=1 の別のイベントをクリップの最後に挿入します。クリップ ID 1 を指定して JET_TriggerClip() 関数を呼び出した場合、コントローラ値 65 に達するとトラックのミュートが解除され、コントローラ値 1 に達したときに再びミュートされます。
図 5: 同期されたクリップ
上の図では、最初のコントローラ イベントの前に JET_TriggerClip() 関数が呼び出された場合、最初のコントローラ イベントが発生したときに Track 3 のミュートが解除され、最初のクリップが再生され、2 番目のコントローラ イベントが発生したときにトラックがミュートされます。最初のコントローラ イベントが発生した後に JET_TriggerClip() 関数が呼び出された場合、3 番目のコントローラ イベントが発生したときにトラック 3 のミュートが解除され、2 番目のクリップが再生され、4 番目のコントローラ イベントが発生したときにトラックが再びミュートされます。
注: 通常、クリップを含むトラックは、JET_QueueSegment() の呼び出しによってセグメントが最初にキューに登録されたときにアプリによってミュートされます。ミュートされていない場合、クリップ ID で Jet_TriggerClip() が呼び出されるまで常にクリップが再生されます。
6.2 JET イベント マーカー(CC102)
コントローラ 102 は、JET 機能に固有の MIDI ストリーム内のイベントをマークするために予約されています。現在定義されている値は 0 のみです。これは、時間の都合上、セグメントの終わりを示します。
通常、JET は MIDI トラック終了メタイベントが発生すると、次のセグメントの再生を開始します(または現在のセグメントを繰り返します)。一部の MIDI 作成ツールでは、トラック終了マーカーを正確に配置することが困難であり、セグメントを結合する際に同期の問題が発生します。
この問題を回避するには、セグメントがループされるポイントに JET セグメント終了マーカー(controller=102、value=0)を配置します。セグメントの終了マーカーが検出されると、次のセグメントがトリガーされます。または、現在のセグメントがループしている場合は、セグメントの先頭から再生が再開されます。
また、セグメントの終了マーカーを使用すると、小節の終わりを超えて次のセグメントの開始を示すためにミュージシャンを仕上げることもできます。たとえば、コンテンツ作成者は、5 小節の第 1 拍(セグメントの自然な終点より上のバー)で終わるドラムのフィルを含む 4 小節のセグメントを作成できます。4 番目の小節の終わりにセグメント終了マーカーを配置すると、次のセグメントがトリガーされますが、ドラムのフィルは次のセグメントと並行して継続し、音楽の連続性を提供します。
図 6: end-of-segment マーカー
6.3 アプリ コントローラ(CC80~83)
アプリは、独自の目的のためにこの範囲のコントローラを使用できます。この範囲内のコントローラが検出されると、イベントはイベントキューに入り、アプリケーションからクエリできるようになります。考えられる用途としては、動画イベントを音声と同期することや、MIDI セグメント内のポイントをマークして次のセグメントをキューに追加することが挙げられます。アプリケーションがモニタリングするコントローラの範囲は、初期化中にアプリケーションによって変更できます。
7 JETCreator ガイドライン
7.1 タスクの順序
すべてのプロジェクトに言えることとして、コンテンツ作成を始める前に、ゲーム デザイナーやプログラマーとインタラクティブ音楽のスキームについて打ち合わせと設計を行うことが最善です。大枠や仕様を固めておくことは、ゲーム完成後のやり直しを避けるのに大変役立ちます。
一般的には、まず普段の作曲で使い慣れた DAW で音楽を作成してから、完成した MIDI ファイルを必要に応じてアプリ用に分割します。次に、JETCreator ですべての音楽セグメントを、順番に再生した場合にプレビューが最も容易になる順序で作成します。最後に、Android ゲームからセグメントを制御するための JET イベントを追加し、必要に応じて JETCreator でオーディションを行います。完成したプロジェクトを JETCreator で保存し、ゲームに組み込むため .jet ファイルをプログラマーに渡します。プレビューの後、MIDI ファイルや JETCreator 属性を変更する場合もあります。
7.2 メモリの節約
メモリを節約する場合は、できるだけ少ない数の MIDI ファイルを作成し、その MIDI ファイルから複数のセグメントを作成するようにします。たとえば、4 小節のセクション 3 つ(A、B、C)を含む 12 小節の MIDI ファイルからは、さらに長い曲を作成できます。この 1 つの MIDI ファイルを参照する複数のセグメントを作成して、好きなように並べ替えればよいのです。A、A、B、A、C、A、B、A、A なら、36 小節の曲になります。JET を使ってリピートを追加したり、セグメントを移調したり、トラックをインタラクティブにミュートまたはミュート解除したりすることで、さらに趣向を凝らすことができます。
7.3 複製
セグメントやイベントをすばやく追加するには、複製コマンドを使用します。複製を使用すると、複数のセグメントまたはイベントを一度に追加でき、さらにオフセット パラメータや可読性のためのプレフィックス命名規則を使用できます。また、移動コマンドは、小節、拍、ティックの間隔を指定して複数のイベントを移動する場合に便利です。
7.4 インタラクティブ オプション
JET を使用して実現可能なインタラクティブ オーディオのコンセプトがいくつかあります。デベロッパーの方がこれ以外の、まったく新しいアイデアを生み出されることを期待しつつ、以下にその一端を紹介します。
7.4.1 マルチ セグメント トリガー
この方法では、ゲーム中のイベントに基づいてアプリから特定のセグメントをトリガーします。たとえば、戦闘の多い通路ではセグメント 1 をトリガーし、戦闘のない通路ではセグメント 2 をトリガーします。JET TriggerClips と組み合わせて使用することで、さらにバリエーションが広がります。
7.4.2 ミュートアレイ
この方法では、アプリから単一の MIDI シーケンス内の特定のトラックに対してミュート イベントとミュート解除イベントをトリガーします。たとえば、戦闘の多い通路では MIDI トラック 1~16 を再生し、戦闘のない通路では、再生する MIDI ファイルは同じですが、トラック 9~16 をミュートします。JET TriggerClips と組み合わせて使用することで、さらにバリエーションが広がります。
7.4.3 音楽駆動型ゲームプレイ
音楽駆動型ゲームは、音楽コンテンツによってグラフィック イベントの表示方法が決まるという点で、ギターヒーローや JETBOY と同様です。アプリでは、グラフィック イベントに対するユーザーのレスポンスを照会し、それに応じて音楽をインタラクティブに変更します。この方法では、JET アプリ イベントと、MIDI ファイルに埋め込まれた MIDI コントローラを利用します。MIDI コントローラは、ゲームによりリアルタイムに読み取られます。ユーザーのレスポンスに基づいて、マルチ セグメント トリガーやミュートアレイも設定できます。