SONiVOX JETCreator 用户手册

适用于 JET 互动式音乐引擎的内容创作应用

1 简介

1.1 概览

本文档包含适用于 SONiVOX JET Creator 的用户指南,SONiVOX JET Creator 是一款用于创建和试听 JET 文件的内容创作应用。JET 是一种适用于小型嵌入式设备(包括运行 Android 平台的设备)的互动式音乐播放器。它允许应用包含 MIDI 格式的互动式音乐配乐,以便实时响应游戏事件和用户互动。

JET 可与 SONiVOX 的嵌入式音频合成器 (EAS) 搭配使用,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 互动式引擎。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 互动式音乐的概念

互动式音乐可以定义为根据不可预测的事件(例如用户互动或游戏事件)实时变化的音乐。从这个意义上来讲,互动式音乐更具吸引力,因为它能够与游戏的活力和基调相得益彰,而不是与一成不变的预合成乐曲更贴近。在某些应用和游戏中,互动式音乐是游戏过程的核心。《吉他英雄》就是这样的热门游戏当最终用户成功捕捉到指板上的音符时,音乐会自行调整,同时记录成功和失败情况。JET 也支持这些音乐类游戏。

创作和控制互动式音乐有多种方法,JET 就是其中之一。本部分介绍了 JET 的功能以及如何在游戏或软件应用中使用这些功能。此外,还介绍了如何使用 JET 来节省占用空间较小的设备(例如支持 Android 的移动设备)中的内存。

2.1.1 数据压缩

JET 支持灵活的音乐格式,可用于以最少的数据创建扩展音乐序列。乐曲被拆分为多个片段,可以按顺序排列以创作更长的乐曲。序列可以在创作音乐文件时固定,也可以在程序控制下动态创建。

2.1.2 线性音乐示例


图 1:线性乐曲

下图显示了音乐片段的存储方式。每个片段都是作为单独的 MIDI 文件创作的。后期处理工具会将这些文件整合到单个容器文件中。每个片段可以包含交替音乐轨道,这些轨道可以静音或取消静音,以产生额外的兴趣。例如,仅在最后一次播放的副歌中的黄铜口音。此外,还可将片段上调或下调。

上图的底部显示了如何重新组合音乐片段来创作线性乐曲。在此示例中,网桥可能以半音调调结束,而可以将其余片段上调半音以保持一致。

2.1.3 非线性音乐示例


图 2:非线性乐曲

在此图中,我们看到的是一个非线性音乐片段。该场景是一个第一人称射击游戏 (FPS),JET 负责提供背景音乐。加载关卡时,会播放前奏,然后在程序控制下过渡到“搜索”片段。此片段会无限期重复,可能会有细微的变化(使用静音/取消静音功能),直到游戏中的活动发生变化为止。

当玩家靠近怪兽巢穴时,该程序开始同步过渡到“危险”片段,从而提高音频的紧张感。随着玩家逐渐靠近洞穴,其他轨道会取消静音,以增加紧张气氛。

当玩家与怪兽战斗时,该程序开始同步过渡到“战斗”片段。随着战斗的继续,此片段会无限重播。奖励 Hit 使一条装饰性轨道暂时取消静音,以通知玩家攻击成功;同样,另一个轨道会暂时取消静音,以表明玩家受到特殊伤害。

在战斗结束时,音乐会根据战斗结果过渡到胜利或失败的片段。

2.1.4 同步静音/取消静音

JET 还可以将轨道的静音和取消静音与音乐中的事件同步。例如,在 FPS 游戏中,最好将与奖励和损坏相关的音乐事件放置在尽可能接近实际游戏事件的位置。但是,如果在游戏事件发生时直接将某个曲目取消静音,可能会导致音乐片段从中间开始播放。或者,片段可以从头开始播放,但不会与其他音乐轨道同步。

不过,借助 JET 同步引擎,片段可在下一个合适时刻开始播放,并保持同步。这可以通过在装饰性曲目上放置一些简短的音乐片段来实现。数据流中的 MIDI 事件表示片段的开始,第二个事件表示片段的结束。当应用调用 JET 片段函数时,曲目中的下一个片段可以与音乐完全同步播放。(可选)轨道可由第二个 MIDI 事件自动静音。


图 3:同步静音/取消静音

2.2 音频同步

JET 提供了一个音频同步 API,该 API 可将游戏过程与音频中的事件同步。该机制依赖于在创作内容时嵌入到 MIDI 文件中的数据。当 JET 引擎在播放期间检测到事件时,它会生成对应用程序的回调。回调的时间可以调整,以补偿音频播放系统中的任何延迟,以便音频和视频可以同步。下图显示了一个简单的音乐游戏示例,其中需要随着音乐及时按下向左和向右箭头。


图 4:音乐游戏

箭头表示音乐序列中需要同步游戏事件的事件。在本例中,蓝色箭头表示玩家应按下左按钮的时间,红色箭头表示应按下右按钮的时间。黄色箭头告知游戏引擎序列已完成。玩家可以在事件前后的特定时间段内按适当的键。

如果收到事件,但玩家尚未按下按钮,则会将计时器设置为窗口时长的一半。如果玩家在计时器到期之前按下该按钮,游戏会记录为成功,否则游戏会记录为失败。

如果播放器在收到事件之前按下按钮,则系统会将计时器设置为时长的一半。如果在计时器到期之前收到事件,游戏会记录为成功,否则会记录为失败。游戏过程可能还包括接近实际事件时间的奖励。

3 JET 内容创作概览

为了创作 JET 文件并聆听以交互方式播放这些文件,内容创作者将使用两个旨在顺畅协作的应用。第一种应用是支持 VST(适用于 PC)或 AU(适用于 Mac)插件的任何现成的 MIDI 序列应用。在这里,作者将插件用作合成器设备来编写自己的 MIDI 音乐文件。第二款应用是 JET Creator 应用。在这里,作者将导入其 MIDI 音乐文件(以及可选的 DLS2 声音集),并设置在支持 JET 的游戏中进行互动式播放的条件。内容创作者可以选择使用支持 DLS Level 2 格式的乐器编辑器创建一组自定义 DLS 乐器。MJSoft 推出的 Awave 就是这样一款应用。

如需详细了解内容创作,请参阅 JET 内容创作准则文档。

4 安装并启动 JET Creator

JET Creator 是一款 Python 语言应用,因此您必须在机器上安装 Python 和 wxPython。

JetCreator 采用以下版本进行创建和测试:

Python 版本 2.5.4

wxPython 版本 2.8.7.1

您可以通过以下网址进行下载:

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 使用 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 片段文件。这是一个 JET 片段文件。它与引用的 MIDI 文件具有相同的名称,但包含额外的片段信息。

.zip Zip 归档文件。导出 JET 归档文件时,系统会创建一个 ZIP 文件,其中包含 JET Creator 所需的所有资源(文件)。使用此方法将 JET Creator 项目转移给其他人。

5.2 打开对话框

首次启动 JET Creator 时,系统会显示如下打开的对话框。

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

打开用于打开现有的 .jtc(JET Creator 文件)文件。使用浏览器按钮浏览到保存 .jtc 文件的目录。

新建用于创建新的 .jtc 文件。

导入操作会导入 JET 归档 (.zip) 文件。

取消将取消对话框并退出应用。

5 主窗口

JET Creator 应用的主窗口如下图所示。从上到下分为三个主要部分:细分视图、事件视图和时间轴。

片段视图部分会显示当前片段的列表,即每个片段衍生自哪个 MIDI 文件和(可选)DLS2 文件。它还会显示每个片段的开始和停止时间,以及每个片段的量化、转置、重复和静音标志设置。

“细分”视图正下方是事件视图“事件视图”部分会显示与指定细分关联的所有事件。事件仅在分配给它们的片段突出显示时才会显示。每个事件都会显示其类型、起点和终点、轨道和 MIDI 通道分配及其事件 ID。

“事件”视图正下方是时间轴显示区域。时间轴会显示指定片段的数量,以及与该片段相关联的所有事件。时间轴会更改以显示当前所选或正在播放的片段。您只需在时间轴显示内容中点击事件,即可在播放片段时在此窗口中触发事件。


JET Creator 主窗口

主窗口左侧的按钮可用于执行以下操作:

添加:显示用于添加新片段或事件的片段或事件窗口

修改:显示用于更新现有片段或事件的片段或事件窗口

删除: 删除选定的片段或事件(系统会要求确认)

移动:显示移动窗口,以便您及时移动选定的片段或事件

将所有片段加入队列: 将所有片段加入播放队列(选定)

将所有片段移出队列:将所有片段移出队列(取消选择)

播放:开始播放已加入队列的所有片段。如果正在播放任何片段,此按钮将变为“停止”

试听:显示“试听”窗口(见下文)

5.1 片段窗口

在片段窗口中可以分配和试听给定片段的属性,如下图所示。窗口左侧会显示存储在 JET 文件中的片段属性。通过窗口右侧,作者可以设置静音标志、重复和转置设置,以及试听在 JET 游戏中播放的片段。

注意:试听属性(静音标记、重复和转置)不会存储在 JET 内容文件 (.jet) 中,而是由游戏或应用本身定义。在编程语言中,这些设置直接与对 JET 引擎的 API 调用相对应。通过在此处添加这些片段,JET 内容作者可以模拟片段在游戏过程中如何响应应用 API 命令。

片段参数可用于执行以下操作:

  • 细分名称 - 设置细分的名称
  • MIDI 文件 - 从中派生片段的 MIDI 文件的名称和位置。点击最右侧的按钮会弹出一个浏览器,用于查找硬盘上的 midi 文件。
  • DLS 文件 - MIDI 文件用于该片段的 DLS2 文件的名称和位置(如果有)。
  • 起始 M/B/T - 该片段的起始小节、节拍和节拍
  • 结束 M/B/T - 该片段的结尾小节、节拍和滴答声
  • 量化 - 量化值,用于在播放期间量化当前片段

试听部分的字段如下所示:

  • 轨道静音次数 - 显示 MIDI 文件中的 MIDI 轨道(而非通道)。点击某个轨道的复选框即可将该轨道静音
  • 通道 - 显示分配给每个轨道的 MIDI 通道
  • 名称 - 显示每个轨道的轨道名称元事件(如果存在)
  • 重复 - 指示片段在播放过程中应重复的次数
  • 转置 - 用于指示片段在播放过程中应以半音或半音进行转置
  • “试听”窗口右侧还有几个其他按钮。它们可用于执行以下操作:
  • 确定 - 选择“确定”可确认所有片段设置并关闭片段窗口
  • 取消 - 选择“取消”可取消所有更改并关闭片段窗口
  • 复制 - 显示用于一次输入多个片段的“复制片段”窗口。 请参阅下文。
  • 播放/停止片段 - 使用分配的片段属性开始或停止播放片段。
  • 播放/停止 MIDI 文件 - 开始或停止播放分配给片段的 MIDI 文件。
  • 暂停/继续 - 暂停或继续播放。

5.2 事件窗口

在事件窗口中分配和试听指定片段的事件属性,如下图所示。如需向片段添加事件,作者必须首先选择将包含该事件的片段,然后选择“添加”按钮。此操作会打开“事件”窗口。

事件窗口包含两个主要部分。事件窗口左侧的片段部分仅用于显示目的。它会显示指定片段的片段属性。可在右侧的“事件”部分分配事件。您可以使用以下参数:

事件名称 - 为事件指定名称

事件类型 - 选择要分配的事件类型。

起始 M/B/T - 设置事件的起始小节、节拍和节拍

结束 M/B/T - 设置事件的结束小节、节拍和节拍(如果适用)

轨道 - 设置事件将应用于指定片段中的哪个轨道

通道 - 设置事件将应用于哪个 MIDI 通道。MIDI 通道应与轨道的 MIDI 通道匹配

事件 ID - 设置事件的事件 ID。可将多个事件分配给同一细分,因此事件 ID 可用于识别这些事件

“试听”窗口右侧还有几个其他按钮。它们可用于执行以下操作:

确定 - 选择“确定”可确认所有事件设置并关闭事件窗口

取消 - 选择“取消”可取消所有更改并关闭事件窗口

复制 - 显示用于一次输入多个事件的“复制事件”窗口。请参阅下文。

播放/停止 - 使用分配的片段属性开始或停止播放片段。片段播放时,可触发和试听事件。

触发器 - 触发已分配的事件。这会复制 JET 游戏用于触发事件的 API 命令,从而为内容创作者提供试听事件行为的方法。

静音/取消静音 - 静音/取消静音会将事件分配到的轨道静音或取消静音

暂停/继续 - 暂停或继续播放。

如需试听事件的行为,您可以选择“播放”按钮。这将启动播放。触发按钮将在用户按下后发送触发事件。这相当于在时间轴中选择绿色触发事件。

注意:触发事件用于在触发时将某个片段的单个轨道取消静音,然后在触发片段结束时将该轨道静音。因此,您应确保将静音标志设置为在接收到触发事件时将触发事件取消静音的轨道静音。

如需详细了解触发器事件的工作原理和行为方式,请参阅下文的“6 底层探秘”部分。

5.3 复制窗口

通常,在创建 JET 文件时,您需要创建数十个甚至数百个事件。您可能还需要移动事件。您可以利用“复制”和“移动”窗口执行此操作。用于创建多个片段或事件的“复制”窗口有两个。这两个窗口如下所示:

“复制片段”窗口

“复制事件”窗口

两个“复制”窗口的功能相同。 创建初始片段或事件后,您可以选择“复制”按钮。具体参数如下所示:

名称前缀 - 为创建的每个片段或事件的名称设置前缀

起始 M/B/T - 设置第一个片段或事件的开始时间

递增 M/B/T - 设置创建片段或事件之间的时间间隔。

数字 - 设置您要创建的片段或事件的数量。如果该数量超出 MIDI 文件的长度(对于片段)或片段(对于事件),则不会创建这些对象。

预览 - 通过预览,您可以先检查创建的对象,然后再点击“确定”插入这些对象。

5.4 移动窗口

“移动”功能的作用与“复制”功能类似,因为它允许您一次修改多个片段或事件,在此情况下是及时移动它们。与“复制”功能类似,也有两个“移动”窗口,一个针对片段,另一个针对“事件”。窗口如下所示:

“移动事件”窗口

要使用“移动”功能,请先选择要及时移动的片段或事件,然后点击“移动”按钮。具体参数如下所示:

起始 M/B/T - 设置第一个片段或事件的开始时间

递增 M/B/T - 以 M/B/T 为单位设置对象移动时间。

预览 - 通过预览,您可以先检查创建的对象,然后再点击“确定”移动这些对象。

5.5 试听窗口

点击 JET Creator 应用主窗口中的“试听”按钮可打开“试听”窗口。内容作者或应用程序员可以在这里模拟互动式播放,就像在移动应用或游戏本身中一样。

JET“试听”窗口

试听窗口由四个主要部分组成最左侧的部分显示可用的片段及其时长(以秒为单位)。中间部分显示了一个运行列表,其中包含哪些片段已加入队列以及它们的播放状态是什么。最右侧部分显示当前正在播放的片段的静音标志。底部的时间轴部分与主窗口中的一样。它会显示当前正在播放的片段,以及与该片段相关联的所有事件触发器的直观显示。

在“试听”窗口中,您可以按任意顺序将任意片段加入队列进行播放。为此,只需选择要插入的片段 然后点击“加入队列”即可该片段将显示在队列窗口中并开始播放(如果是第一个片段)。随后,您可以选择任何其他片段或多个片段,并提示进行播放。当片段完成播放时,队列中的下一个片段将开始播放。与 JET Creator 的其他窗口一样,您可以在每个片段播放时实时静音、取消静音、触发事件片段等。

具体来说,按钮的行为方式如下所示:

加入队列 - 将所选片段加载到队列中并开始播放

取消并将所选片段加入队列 - 先取消当前播放的片段,然后再将所选片段加入播放队列

取消当前片段 - 取消队列中当前播放的片段,并开始播放下一个片段

停止 - 停止播放所有已加入队列的片段

全部静音 - 将当前片段中的所有轨道静音

全部静音 - 将当前片段中的所有轨道取消静音

原始静音 - 设置当前片段的原始静音标记

通过组合使用这些播放选项,作者或应用程序员可以试听交互式音乐应用可能遇到的任何行为。

5.6 JET Creator 菜单

通过 JET Creator 菜单,您可以访问主窗口中的许多参数以及其他一些参数。

5.6.1“文件”菜单

“文件”菜单包含以下元素:

新建 - 创建新的 JET Creator 文件 (.jtc)

打开 - 打开现有的 JET Creator 文件

保存 - 保存当前打开的 JET Creator 文件

另存为 - 将当前打开的 JET Creator 文件保存到新文件中

导入项目 - 导入 JET Creator 归档 (.zip)

导出项目 - 导出 JET Creator 归档 (.zip)

退出 - 退出应用

5.6.2“编辑”菜单

“修改”菜单包含以下元素:

撤消 - “撤消”用于撤消上一次的修改

重做 - 重做将重做上一次撤消

剪切 - 将所选参数复制到剪贴板并删除所选内容

复制 - 将所选参数复制到剪贴板并保留选择

粘贴 - 粘贴所选参数

5.6.3 JET

“修改”菜单包含以下元素:

属性 - 打开 JET Creator 优先事项窗口。您可以在此窗口中为指定的 JET 文件设置以下条件:

版权信息 - 包含要插入到 JET 文件中的版权信息

追光控制器 - 追光控制器的选项(开启/关闭)。此设置通常应处于“开启”状态。

删除空轨道 - 删除所有空的 MIDI 轨道

5.6.4 片段

“细分”菜单包含以下元素:

添加片段 - 打开“片段”窗口

更新片段 - 更新片段属性

删除片段 - 从片段列表中删除当前片段

5.6.5 帮助

“帮助”菜单至少包含以下元素:

JET Creator 帮助 - 将启动 PDF 帮助文档或进入联机帮助

简介 - JET Creator 版本号和 SONiVOX 信息

6 触发事件说明

将 MIDI 文件拆分为单独的(非线性)片段,并根据游戏中的事件将这些片段加入队列以供在游戏中播放,是 JET 音乐文件互动的一种方式。触发事件是另一种实现互动式播放的方法。这两种方法都能在互动式游戏或应用中一起使用。

可通过触发事件执行以下操作:

  1. 可以根据游戏事件开启或关闭 MIDI 片段内的轨道。例如,作曲家可以创作两个鼓轨道,一个快,一个慢。如果游戏中的操作较快,则可以播放快鼓轨道。如果游戏中的操作较慢,则可以播放慢节奏的鼓轨道。
  2. 用户操作可以与预先插入到音乐文件中正确位置处的触发事件相比较。根据这些结果,可能会发生评分或其他游戏操作。
  3. 关卡或动作序列之间的音乐过渡可以同步,从而实现音乐无缝衔接。

在后台,JET 使用标准 MIDI CC 事件来完成这些操作并同步音频。JET 使用的控制器属于未针对特定用途定义的控制器。具体的控制器定义如下:

控制器 80-83,预留以供应用使用

控制器 102 JET 事件标记

控制器 103,JET 片段标记

控制器 104-119,预留以供日后使用

6.1 JET 片段标记 (CC103)

控制器 103 会预留,用于标记 MIDI 轨道中可由 JET_TriggerClip API 调用触发的片段。片段 ID 采用控制器值的低 6 位进行编码。位 6 设为 1 表示片段开始,设为 0 表示片段结束。

例如,为了识别片段 ID 为 1 的片段,作者会在片段开头插入一个 MIDI 控制器事件,即 controller=103 和 value=65,并在片段末尾插入另一个 manager=103 和 value=1 的事件。当在片段 ID 为 1 的情况下调用 JET_TriggerClip() 函数时,在遇到控制器值 65 时,轨道会取消静音;当遇到控制器值 1 时,轨道会再次静音。

图 5:同步片段

在上图中,如果在第一个控制器事件之前调用 JET_TriggerClip() 函数,那么在发生第一个控制器事件时,轨道 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 Creator 准则

7.1 任务顺序

与所有项目一样,在开始创作乐曲之前,最好与游戏设计师和程序员讨论并设计互动式音乐方案。了解概要和/或规范有助于避免您在游戏开发完成后必须重做某些部分。

一般来说,您首先需要按照自己习惯的方式在所选择的 DAW 中创作音乐,然后根据应用的需求拆分最终的 MIDI 文件。接下来,开始使用 JET Creator,并按照在按顺序播放时最方便预览的顺序制作所有音乐片段。最后,添加 JET 事件以通过 Android 游戏控制片段,并根据需要在 JET Creator 中进行试听。最后,将项目保存到 JET Creator 中,然后将 .jet 文件交给程序员,以便将其集成到游戏中。预览后,MIDI 文件和 JET Creator 属性可能会发生变化。

7.2 节省内存

如果您要节省内存,请尽量少写 MIDI 文件,然后使用此 MIDI 文件创作多个片段。例如,可通过一个包含 12 个节拍的 MIDI 文件创作一首更长的歌曲,此文件中包含三个部分(即 A、B、C),每个部分都是 4 个节拍。只需创作多个引用一个 MIDI 文件的片段,然后根据需要对其进行排序即可。例如,A、A、B、A、C、A、B、A、A 这种顺序可以创作一首包含 36 个节拍的歌曲。通过使用 JET,您可以添加重播、为片段移调,以及以互动方式将轨道静音和取消静音,以使歌曲更加有趣。

7.3 复制

要更快地添加片段或事件,请使用复“复制”命令。通过使用“复制”命令,可一次添加多个片段或事件,并使用偏移参数和前缀命名惯例来确保内容简洁易读。“移动”命令还可用于按一定数量的小节、节拍或嘀嗒移动多个事件。

7.4 互动式选项

JET 中具有几个互动式音频概念。以下是一些示例,但我们希望开发者提出我们未曾想到的其他概念!这些概念包括:

7.4.1 多片段触发

通过使用此方法,应用会根据游戏中的事件触发特定片段。例如,发生很多打斗的走廊可能会触发片段 1,而没有发生打斗的走廊可能会触发片段 2。将 JET TriggerClip 与此方法结合使用可确保乐曲更多样。

7.4.2 将数组静音

通过使用此方法,应用会触发单个 MIDI 序列中特定轨道对应的静音和取消静音事件。例如,发生很多打斗的走廊可能会播放 MIDI 轨道 1-16,而没有发生打斗的走廊可能会播放相同的 Midi 文件,但会将轨道 9-16 静音。将 JET TriggerClip 与此方法结合使用可确保乐曲更多样。

7.4.3 音乐类游戏

音乐类游戏与《吉他游戏》和 JETBOY 类似,因为音乐内容决定了图形事件的显示方式。然后,应用会查询用户对图形事件的响应,并以互动方式修改音乐作为响应。通过使用这种方法,游戏使用的是 JET 应用事件,即嵌入到 MIDI 文件中并由游戏实时读取的 MIDI 控制器。根据用户响应,可设置多片段触发和/或静音数组。