xref: /aosp_15_r20/external/sonivox/docs/JET_Programming_Manual.html (revision f81fb7c475c4b71ff83bdcc517de2a8c174e4e5c)
1*f81fb7c4SAndroid Build Coastguard Worker<html xmlns:v="urn:schemas-microsoft-com:vml"
2*f81fb7c4SAndroid Build Coastguard Workerxmlns:o="urn:schemas-microsoft-com:office:office"
3*f81fb7c4SAndroid Build Coastguard Workerxmlns:w="urn:schemas-microsoft-com:office:word"
4*f81fb7c4SAndroid Build Coastguard Workerxmlns:st1="urn:schemas-microsoft-com:office:smarttags"
5*f81fb7c4SAndroid Build Coastguard Workerxmlns="http://www.w3.org/TR/REC-html40">
6*f81fb7c4SAndroid Build Coastguard Worker
7*f81fb7c4SAndroid Build Coastguard Worker<head>
8*f81fb7c4SAndroid Build Coastguard Worker<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
9*f81fb7c4SAndroid Build Coastguard Worker<meta name=ProgId content=Word.Document>
10*f81fb7c4SAndroid Build Coastguard Worker<meta name=Generator content="Microsoft Word 11">
11*f81fb7c4SAndroid Build Coastguard Worker<meta name=Originator content="Microsoft Word 11">
12*f81fb7c4SAndroid Build Coastguard Worker<link rel=File-List href="JET_Programming_Manual_files/filelist.xml">
13*f81fb7c4SAndroid Build Coastguard Worker<link rel=Edit-Time-Data href="JET_Programming_Manual_files/editdata.mso">
14*f81fb7c4SAndroid Build Coastguard Worker<link rel=OLE-Object-Data href="JET_Programming_Manual_files/oledata.mso">
15*f81fb7c4SAndroid Build Coastguard Worker<!--[if !mso]>
16*f81fb7c4SAndroid Build Coastguard Worker<style>
17*f81fb7c4SAndroid Build Coastguard Workerv\:* {behavior:url(#default#VML);}
18*f81fb7c4SAndroid Build Coastguard Workero\:* {behavior:url(#default#VML);}
19*f81fb7c4SAndroid Build Coastguard Workerw\:* {behavior:url(#default#VML);}
20*f81fb7c4SAndroid Build Coastguard Worker.shape {behavior:url(#default#VML);}
21*f81fb7c4SAndroid Build Coastguard Worker</style>
22*f81fb7c4SAndroid Build Coastguard Worker<![endif]-->
23*f81fb7c4SAndroid Build Coastguard Worker<title>JET PROGRAMMING MANUAL</title>
24*f81fb7c4SAndroid Build Coastguard Worker<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
25*f81fb7c4SAndroid Build Coastguard Worker name="place"/>
26*f81fb7c4SAndroid Build Coastguard Worker<!--[if gte mso 9]><xml>
27*f81fb7c4SAndroid Build Coastguard Worker <o:DocumentProperties>
28*f81fb7c4SAndroid Build Coastguard Worker  <o:Author>Dave Sparks</o:Author>
29*f81fb7c4SAndroid Build Coastguard Worker  <o:Template>SONiVOX Technical Note.dot</o:Template>
30*f81fb7c4SAndroid Build Coastguard Worker  <o:LastAuthor>Jennifer Hruska</o:LastAuthor>
31*f81fb7c4SAndroid Build Coastguard Worker  <o:Revision>5</o:Revision>
32*f81fb7c4SAndroid Build Coastguard Worker  <o:TotalTime>34</o:TotalTime>
33*f81fb7c4SAndroid Build Coastguard Worker  <o:LastPrinted>2006-06-30T19:06:00Z</o:LastPrinted>
34*f81fb7c4SAndroid Build Coastguard Worker  <o:Created>2009-03-13T18:45:00Z</o:Created>
35*f81fb7c4SAndroid Build Coastguard Worker  <o:LastSaved>2009-03-19T14:20:00Z</o:LastSaved>
36*f81fb7c4SAndroid Build Coastguard Worker  <o:Pages>1</o:Pages>
37*f81fb7c4SAndroid Build Coastguard Worker  <o:Words>3887</o:Words>
38*f81fb7c4SAndroid Build Coastguard Worker  <o:Characters>22157</o:Characters>
39*f81fb7c4SAndroid Build Coastguard Worker  <o:Company> </o:Company>
40*f81fb7c4SAndroid Build Coastguard Worker  <o:Lines>184</o:Lines>
41*f81fb7c4SAndroid Build Coastguard Worker  <o:Paragraphs>51</o:Paragraphs>
42*f81fb7c4SAndroid Build Coastguard Worker  <o:CharactersWithSpaces>25993</o:CharactersWithSpaces>
43*f81fb7c4SAndroid Build Coastguard Worker  <o:Version>11.9999</o:Version>
44*f81fb7c4SAndroid Build Coastguard Worker </o:DocumentProperties>
45*f81fb7c4SAndroid Build Coastguard Worker <o:OfficeDocumentSettings>
46*f81fb7c4SAndroid Build Coastguard Worker  <o:AllowPNG/>
47*f81fb7c4SAndroid Build Coastguard Worker </o:OfficeDocumentSettings>
48*f81fb7c4SAndroid Build Coastguard Worker</xml><![endif]--><!--[if gte mso 9]><xml>
49*f81fb7c4SAndroid Build Coastguard Worker <w:WordDocument>
50*f81fb7c4SAndroid Build Coastguard Worker  <w:DrawingGridHorizontalSpacing>6 pt</w:DrawingGridHorizontalSpacing>
51*f81fb7c4SAndroid Build Coastguard Worker  <w:DrawingGridVerticalSpacing>8.15 pt</w:DrawingGridVerticalSpacing>
52*f81fb7c4SAndroid Build Coastguard Worker  <w:DisplayHorizontalDrawingGridEvery>2</w:DisplayHorizontalDrawingGridEvery>
53*f81fb7c4SAndroid Build Coastguard Worker  <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
54*f81fb7c4SAndroid Build Coastguard Worker  <w:ValidateAgainstSchemas/>
55*f81fb7c4SAndroid Build Coastguard Worker  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
56*f81fb7c4SAndroid Build Coastguard Worker  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
57*f81fb7c4SAndroid Build Coastguard Worker  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
58*f81fb7c4SAndroid Build Coastguard Worker  <w:Compatibility>
59*f81fb7c4SAndroid Build Coastguard Worker   <w:BreakWrappedTables/>
60*f81fb7c4SAndroid Build Coastguard Worker   <w:SnapToGridInCell/>
61*f81fb7c4SAndroid Build Coastguard Worker   <w:WrapTextWithPunct/>
62*f81fb7c4SAndroid Build Coastguard Worker   <w:UseAsianBreakRules/>
63*f81fb7c4SAndroid Build Coastguard Worker   <w:UseWord2002TableStyleRules/>
64*f81fb7c4SAndroid Build Coastguard Worker  </w:Compatibility>
65*f81fb7c4SAndroid Build Coastguard Worker  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
66*f81fb7c4SAndroid Build Coastguard Worker </w:WordDocument>
67*f81fb7c4SAndroid Build Coastguard Worker</xml><![endif]--><!--[if gte mso 9]><xml>
68*f81fb7c4SAndroid Build Coastguard Worker <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
69*f81fb7c4SAndroid Build Coastguard Worker </w:LatentStyles>
70*f81fb7c4SAndroid Build Coastguard Worker</xml><![endif]--><!--[if !mso]><object
71*f81fb7c4SAndroid Build Coastguard Worker classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object>
72*f81fb7c4SAndroid Build Coastguard Worker<style>
73*f81fb7c4SAndroid Build Coastguard Workerst1\:*{behavior:url(#ieooui) }
74*f81fb7c4SAndroid Build Coastguard Worker</style>
75*f81fb7c4SAndroid Build Coastguard Worker<![endif]-->
76*f81fb7c4SAndroid Build Coastguard Worker<style>
77*f81fb7c4SAndroid Build Coastguard Worker<!--
78*f81fb7c4SAndroid Build Coastguard Worker /* Font Definitions */
79*f81fb7c4SAndroid Build Coastguard Worker @font-face
80*f81fb7c4SAndroid Build Coastguard Worker	{font-family:Tahoma;
81*f81fb7c4SAndroid Build Coastguard Worker	panose-1:2 11 6 4 3 5 4 4 2 4;
82*f81fb7c4SAndroid Build Coastguard Worker	mso-font-charset:0;
83*f81fb7c4SAndroid Build Coastguard Worker	mso-generic-font-family:swiss;
84*f81fb7c4SAndroid Build Coastguard Worker	mso-font-pitch:variable;
85*f81fb7c4SAndroid Build Coastguard Worker	mso-font-signature:1627421319 -2147483648 8 0 66047 0;}
86*f81fb7c4SAndroid Build Coastguard Worker /* Style Definitions */
87*f81fb7c4SAndroid Build Coastguard Worker p.MsoNormal, li.MsoNormal, div.MsoNormal
88*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-parent:"";
89*f81fb7c4SAndroid Build Coastguard Worker	margin:0in;
90*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:.0001pt;
91*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
92*f81fb7c4SAndroid Build Coastguard Worker	font-size:12.0pt;
93*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
94*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
95*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";}
96*f81fb7c4SAndroid Build Coastguard Workerh1
97*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-next:Normal;
98*f81fb7c4SAndroid Build Coastguard Worker	margin-top:12.0pt;
99*f81fb7c4SAndroid Build Coastguard Worker	margin-right:0in;
100*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:3.0pt;
101*f81fb7c4SAndroid Build Coastguard Worker	margin-left:0in;
102*f81fb7c4SAndroid Build Coastguard Worker	text-align:center;
103*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
104*f81fb7c4SAndroid Build Coastguard Worker	page-break-after:avoid;
105*f81fb7c4SAndroid Build Coastguard Worker	mso-outline-level:1;
106*f81fb7c4SAndroid Build Coastguard Worker	font-size:16.0pt;
107*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
108*f81fb7c4SAndroid Build Coastguard Worker	mso-font-kerning:16.0pt;}
109*f81fb7c4SAndroid Build Coastguard Workerh2
110*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-link:"Heading 2 Char";
111*f81fb7c4SAndroid Build Coastguard Worker	mso-style-next:Normal;
112*f81fb7c4SAndroid Build Coastguard Worker	margin-top:12.0pt;
113*f81fb7c4SAndroid Build Coastguard Worker	margin-right:0in;
114*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:3.0pt;
115*f81fb7c4SAndroid Build Coastguard Worker	margin-left:0in;
116*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
117*f81fb7c4SAndroid Build Coastguard Worker	page-break-after:avoid;
118*f81fb7c4SAndroid Build Coastguard Worker	mso-outline-level:2;
119*f81fb7c4SAndroid Build Coastguard Worker	font-size:14.0pt;
120*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
121*f81fb7c4SAndroid Build Coastguard Worker	font-style:italic;}
122*f81fb7c4SAndroid Build Coastguard Workerh3
123*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-next:Normal;
124*f81fb7c4SAndroid Build Coastguard Worker	margin-top:12.0pt;
125*f81fb7c4SAndroid Build Coastguard Worker	margin-right:0in;
126*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:3.0pt;
127*f81fb7c4SAndroid Build Coastguard Worker	margin-left:0in;
128*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
129*f81fb7c4SAndroid Build Coastguard Worker	page-break-after:avoid;
130*f81fb7c4SAndroid Build Coastguard Worker	mso-outline-level:3;
131*f81fb7c4SAndroid Build Coastguard Worker	font-size:13.0pt;
132*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;}
133*f81fb7c4SAndroid Build Coastguard Workerh4
134*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-next:Normal;
135*f81fb7c4SAndroid Build Coastguard Worker	margin-top:12.0pt;
136*f81fb7c4SAndroid Build Coastguard Worker	margin-right:0in;
137*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:3.0pt;
138*f81fb7c4SAndroid Build Coastguard Worker	margin-left:0in;
139*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
140*f81fb7c4SAndroid Build Coastguard Worker	page-break-after:avoid;
141*f81fb7c4SAndroid Build Coastguard Worker	mso-outline-level:4;
142*f81fb7c4SAndroid Build Coastguard Worker	font-size:12.0pt;
143*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-size:14.0pt;
144*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
145*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";
146*f81fb7c4SAndroid Build Coastguard Worker	font-style:italic;
147*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-style:normal;}
148*f81fb7c4SAndroid Build Coastguard Workerp.MsoToc1, li.MsoToc1, div.MsoToc1
149*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-update:auto;
150*f81fb7c4SAndroid Build Coastguard Worker	mso-style-noshow:yes;
151*f81fb7c4SAndroid Build Coastguard Worker	mso-style-next:Normal;
152*f81fb7c4SAndroid Build Coastguard Worker	margin:0in;
153*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:.0001pt;
154*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
155*f81fb7c4SAndroid Build Coastguard Worker	font-size:12.0pt;
156*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
157*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
158*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";}
159*f81fb7c4SAndroid Build Coastguard Workerp.MsoToc2, li.MsoToc2, div.MsoToc2
160*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-update:auto;
161*f81fb7c4SAndroid Build Coastguard Worker	mso-style-noshow:yes;
162*f81fb7c4SAndroid Build Coastguard Worker	mso-style-next:Normal;
163*f81fb7c4SAndroid Build Coastguard Worker	margin-top:0in;
164*f81fb7c4SAndroid Build Coastguard Worker	margin-right:0in;
165*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:0in;
166*f81fb7c4SAndroid Build Coastguard Worker	margin-left:12.0pt;
167*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:.0001pt;
168*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
169*f81fb7c4SAndroid Build Coastguard Worker	font-size:12.0pt;
170*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
171*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
172*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";}
173*f81fb7c4SAndroid Build Coastguard Workerp.MsoToc3, li.MsoToc3, div.MsoToc3
174*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-update:auto;
175*f81fb7c4SAndroid Build Coastguard Worker	mso-style-noshow:yes;
176*f81fb7c4SAndroid Build Coastguard Worker	mso-style-next:Normal;
177*f81fb7c4SAndroid Build Coastguard Worker	margin-top:0in;
178*f81fb7c4SAndroid Build Coastguard Worker	margin-right:0in;
179*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:0in;
180*f81fb7c4SAndroid Build Coastguard Worker	margin-left:24.0pt;
181*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:.0001pt;
182*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
183*f81fb7c4SAndroid Build Coastguard Worker	font-size:12.0pt;
184*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
185*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
186*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";}
187*f81fb7c4SAndroid Build Coastguard Workerp.MsoToc4, li.MsoToc4, div.MsoToc4
188*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-update:auto;
189*f81fb7c4SAndroid Build Coastguard Worker	mso-style-noshow:yes;
190*f81fb7c4SAndroid Build Coastguard Worker	mso-style-next:Normal;
191*f81fb7c4SAndroid Build Coastguard Worker	margin-top:0in;
192*f81fb7c4SAndroid Build Coastguard Worker	margin-right:0in;
193*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:0in;
194*f81fb7c4SAndroid Build Coastguard Worker	margin-left:.5in;
195*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:.0001pt;
196*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
197*f81fb7c4SAndroid Build Coastguard Worker	font-size:12.0pt;
198*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
199*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
200*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";}
201*f81fb7c4SAndroid Build Coastguard Workerp.MsoCommentText, li.MsoCommentText, div.MsoCommentText
202*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-noshow:yes;
203*f81fb7c4SAndroid Build Coastguard Worker	margin:0in;
204*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:.0001pt;
205*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
206*f81fb7c4SAndroid Build Coastguard Worker	font-size:10.0pt;
207*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
208*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
209*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";}
210*f81fb7c4SAndroid Build Coastguard Workerp.MsoHeader, li.MsoHeader, div.MsoHeader
211*f81fb7c4SAndroid Build Coastguard Worker	{margin:0in;
212*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:.0001pt;
213*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
214*f81fb7c4SAndroid Build Coastguard Worker	tab-stops:center 3.0in right 6.0in;
215*f81fb7c4SAndroid Build Coastguard Worker	font-size:12.0pt;
216*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
217*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
218*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";}
219*f81fb7c4SAndroid Build Coastguard Workerp.MsoFooter, li.MsoFooter, div.MsoFooter
220*f81fb7c4SAndroid Build Coastguard Worker	{margin:0in;
221*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:.0001pt;
222*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
223*f81fb7c4SAndroid Build Coastguard Worker	tab-stops:center 3.0in right 6.0in;
224*f81fb7c4SAndroid Build Coastguard Worker	font-size:12.0pt;
225*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
226*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
227*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";}
228*f81fb7c4SAndroid Build Coastguard Workerp.MsoCaption, li.MsoCaption, div.MsoCaption
229*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-noshow:yes;
230*f81fb7c4SAndroid Build Coastguard Worker	mso-style-next:Normal;
231*f81fb7c4SAndroid Build Coastguard Worker	margin-top:6.0pt;
232*f81fb7c4SAndroid Build Coastguard Worker	margin-right:0in;
233*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:6.0pt;
234*f81fb7c4SAndroid Build Coastguard Worker	margin-left:0in;
235*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
236*f81fb7c4SAndroid Build Coastguard Worker	font-size:10.0pt;
237*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
238*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
239*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";
240*f81fb7c4SAndroid Build Coastguard Worker	font-weight:bold;}
241*f81fb7c4SAndroid Build Coastguard Workerspan.MsoCommentReference
242*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-noshow:yes;
243*f81fb7c4SAndroid Build Coastguard Worker	mso-ansi-font-size:8.0pt;
244*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-size:8.0pt;}
245*f81fb7c4SAndroid Build Coastguard Workerp.MsoTitle, li.MsoTitle, div.MsoTitle
246*f81fb7c4SAndroid Build Coastguard Worker	{margin-top:12.0pt;
247*f81fb7c4SAndroid Build Coastguard Worker	margin-right:0in;
248*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:3.0pt;
249*f81fb7c4SAndroid Build Coastguard Worker	margin-left:0in;
250*f81fb7c4SAndroid Build Coastguard Worker	text-align:center;
251*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan lines-together;
252*f81fb7c4SAndroid Build Coastguard Worker	mso-outline-level:1;
253*f81fb7c4SAndroid Build Coastguard Worker	font-size:16.0pt;
254*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-size:10.0pt;
255*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
256*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
257*f81fb7c4SAndroid Build Coastguard Worker	mso-font-kerning:14.0pt;
258*f81fb7c4SAndroid Build Coastguard Worker	mso-ansi-language:EN-IE;
259*f81fb7c4SAndroid Build Coastguard Worker	font-weight:bold;
260*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-weight:normal;}
261*f81fb7c4SAndroid Build Coastguard Workera:link, span.MsoHyperlink
262*f81fb7c4SAndroid Build Coastguard Worker	{color:blue;
263*f81fb7c4SAndroid Build Coastguard Worker	text-decoration:underline;
264*f81fb7c4SAndroid Build Coastguard Worker	text-underline:single;}
265*f81fb7c4SAndroid Build Coastguard Workera:visited, span.MsoHyperlinkFollowed
266*f81fb7c4SAndroid Build Coastguard Worker	{color:purple;
267*f81fb7c4SAndroid Build Coastguard Worker	text-decoration:underline;
268*f81fb7c4SAndroid Build Coastguard Worker	text-underline:single;}
269*f81fb7c4SAndroid Build Coastguard Workerp.MsoCommentSubject, li.MsoCommentSubject, div.MsoCommentSubject
270*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-noshow:yes;
271*f81fb7c4SAndroid Build Coastguard Worker	mso-style-parent:"Comment Text";
272*f81fb7c4SAndroid Build Coastguard Worker	mso-style-next:"Comment Text";
273*f81fb7c4SAndroid Build Coastguard Worker	margin:0in;
274*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:.0001pt;
275*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
276*f81fb7c4SAndroid Build Coastguard Worker	font-size:10.0pt;
277*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
278*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
279*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";
280*f81fb7c4SAndroid Build Coastguard Worker	font-weight:bold;}
281*f81fb7c4SAndroid Build Coastguard Workerp.MsoAcetate, li.MsoAcetate, div.MsoAcetate
282*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-noshow:yes;
283*f81fb7c4SAndroid Build Coastguard Worker	margin:0in;
284*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:.0001pt;
285*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
286*f81fb7c4SAndroid Build Coastguard Worker	font-size:8.0pt;
287*f81fb7c4SAndroid Build Coastguard Worker	font-family:Tahoma;
288*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";}
289*f81fb7c4SAndroid Build Coastguard Workerspan.Heading2Char
290*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-name:"Heading 2 Char";
291*f81fb7c4SAndroid Build Coastguard Worker	mso-style-locked:yes;
292*f81fb7c4SAndroid Build Coastguard Worker	mso-style-link:"Heading 2";
293*f81fb7c4SAndroid Build Coastguard Worker	mso-ansi-font-size:14.0pt;
294*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-size:14.0pt;
295*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
296*f81fb7c4SAndroid Build Coastguard Worker	mso-ascii-font-family:Arial;
297*f81fb7c4SAndroid Build Coastguard Worker	mso-hansi-font-family:Arial;
298*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:Arial;
299*f81fb7c4SAndroid Build Coastguard Worker	mso-ansi-language:EN-US;
300*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-language:EN-US;
301*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-language:AR-SA;
302*f81fb7c4SAndroid Build Coastguard Worker	font-weight:bold;
303*f81fb7c4SAndroid Build Coastguard Worker	font-style:italic;}
304*f81fb7c4SAndroid Build Coastguard Workerp.Style1, li.Style1, div.Style1
305*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-name:Style1;
306*f81fb7c4SAndroid Build Coastguard Worker	mso-style-parent:"Heading 4";
307*f81fb7c4SAndroid Build Coastguard Worker	margin-top:12.0pt;
308*f81fb7c4SAndroid Build Coastguard Worker	margin-right:0in;
309*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:3.0pt;
310*f81fb7c4SAndroid Build Coastguard Worker	margin-left:0in;
311*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
312*f81fb7c4SAndroid Build Coastguard Worker	page-break-after:avoid;
313*f81fb7c4SAndroid Build Coastguard Worker	mso-outline-level:4;
314*f81fb7c4SAndroid Build Coastguard Worker	font-size:12.0pt;
315*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-size:14.0pt;
316*f81fb7c4SAndroid Build Coastguard Worker	font-family:Arial;
317*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
318*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";
319*f81fb7c4SAndroid Build Coastguard Worker	font-weight:bold;
320*f81fb7c4SAndroid Build Coastguard Worker	font-style:italic;
321*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-style:normal;}
322*f81fb7c4SAndroid Build Coastguard Workerp.Code, li.Code, div.Code
323*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-name:Code;
324*f81fb7c4SAndroid Build Coastguard Worker	margin-top:0in;
325*f81fb7c4SAndroid Build Coastguard Worker	margin-right:0in;
326*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:0in;
327*f81fb7c4SAndroid Build Coastguard Worker	margin-left:.5in;
328*f81fb7c4SAndroid Build Coastguard Worker	margin-bottom:.0001pt;
329*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
330*f81fb7c4SAndroid Build Coastguard Worker	font-size:12.0pt;
331*f81fb7c4SAndroid Build Coastguard Worker	font-family:"Courier New";
332*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-font-family:"Times New Roman";
333*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-font-family:"Times New Roman";}
334*f81fb7c4SAndroid Build Coastguard Worker /* Page Definitions */
335*f81fb7c4SAndroid Build Coastguard Worker @page
336*f81fb7c4SAndroid Build Coastguard Worker	{mso-footnote-separator:url("JET_Programming_Manual_files/header.htm") fs;
337*f81fb7c4SAndroid Build Coastguard Worker	mso-footnote-continuation-separator:url("JET_Programming_Manual_files/header.htm") fcs;
338*f81fb7c4SAndroid Build Coastguard Worker	mso-endnote-separator:url("JET_Programming_Manual_files/header.htm") es;
339*f81fb7c4SAndroid Build Coastguard Worker	mso-endnote-continuation-separator:url("JET_Programming_Manual_files/header.htm") ecs;}
340*f81fb7c4SAndroid Build Coastguard Worker@page Section1
341*f81fb7c4SAndroid Build Coastguard Worker	{size:8.5in 11.0in;
342*f81fb7c4SAndroid Build Coastguard Worker	margin:1.0in 1.25in 1.0in 1.25in;
343*f81fb7c4SAndroid Build Coastguard Worker	mso-header-margin:.5in;
344*f81fb7c4SAndroid Build Coastguard Worker	mso-footer-margin:.5in;
345*f81fb7c4SAndroid Build Coastguard Worker	mso-footer:url("JET_Programming_Manual_files/header.htm") f1;
346*f81fb7c4SAndroid Build Coastguard Worker	mso-paper-source:0;}
347*f81fb7c4SAndroid Build Coastguard Workerdiv.Section1
348*f81fb7c4SAndroid Build Coastguard Worker	{page:Section1;}
349*f81fb7c4SAndroid Build Coastguard Worker-->
350*f81fb7c4SAndroid Build Coastguard Worker</style>
351*f81fb7c4SAndroid Build Coastguard Worker<!--[if gte mso 10]>
352*f81fb7c4SAndroid Build Coastguard Worker<style>
353*f81fb7c4SAndroid Build Coastguard Worker /* Style Definitions */
354*f81fb7c4SAndroid Build Coastguard Worker table.MsoNormalTable
355*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-name:"Table Normal";
356*f81fb7c4SAndroid Build Coastguard Worker	mso-tstyle-rowband-size:0;
357*f81fb7c4SAndroid Build Coastguard Worker	mso-tstyle-colband-size:0;
358*f81fb7c4SAndroid Build Coastguard Worker	mso-style-noshow:yes;
359*f81fb7c4SAndroid Build Coastguard Worker	mso-style-parent:"";
360*f81fb7c4SAndroid Build Coastguard Worker	mso-padding-alt:0in 5.4pt 0in 5.4pt;
361*f81fb7c4SAndroid Build Coastguard Worker	mso-para-margin:0in;
362*f81fb7c4SAndroid Build Coastguard Worker	mso-para-margin-bottom:.0001pt;
363*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
364*f81fb7c4SAndroid Build Coastguard Worker	font-size:10.0pt;
365*f81fb7c4SAndroid Build Coastguard Worker	font-family:"Times New Roman";
366*f81fb7c4SAndroid Build Coastguard Worker	mso-ansi-language:#0400;
367*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-language:#0400;
368*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-language:#0400;}
369*f81fb7c4SAndroid Build Coastguard Workertable.MsoTableGrid
370*f81fb7c4SAndroid Build Coastguard Worker	{mso-style-name:"Table Grid";
371*f81fb7c4SAndroid Build Coastguard Worker	mso-tstyle-rowband-size:0;
372*f81fb7c4SAndroid Build Coastguard Worker	mso-tstyle-colband-size:0;
373*f81fb7c4SAndroid Build Coastguard Worker	border:solid windowtext 1.0pt;
374*f81fb7c4SAndroid Build Coastguard Worker	mso-border-alt:solid windowtext .5pt;
375*f81fb7c4SAndroid Build Coastguard Worker	mso-padding-alt:0in 5.4pt 0in 5.4pt;
376*f81fb7c4SAndroid Build Coastguard Worker	mso-border-insideh:.5pt solid windowtext;
377*f81fb7c4SAndroid Build Coastguard Worker	mso-border-insidev:.5pt solid windowtext;
378*f81fb7c4SAndroid Build Coastguard Worker	mso-para-margin:0in;
379*f81fb7c4SAndroid Build Coastguard Worker	mso-para-margin-bottom:.0001pt;
380*f81fb7c4SAndroid Build Coastguard Worker	mso-pagination:widow-orphan;
381*f81fb7c4SAndroid Build Coastguard Worker	font-size:10.0pt;
382*f81fb7c4SAndroid Build Coastguard Worker	font-family:"Times New Roman";
383*f81fb7c4SAndroid Build Coastguard Worker	mso-ansi-language:#0400;
384*f81fb7c4SAndroid Build Coastguard Worker	mso-fareast-language:#0400;
385*f81fb7c4SAndroid Build Coastguard Worker	mso-bidi-language:#0400;}
386*f81fb7c4SAndroid Build Coastguard Worker</style>
387*f81fb7c4SAndroid Build Coastguard Worker<![endif]--><!--[if gte mso 9]><xml>
388*f81fb7c4SAndroid Build Coastguard Worker <o:shapedefaults v:ext="edit" spidmax="5122">
389*f81fb7c4SAndroid Build Coastguard Worker  <o:colormenu v:ext="edit" fillcolor="none" strokecolor="none"/>
390*f81fb7c4SAndroid Build Coastguard Worker </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
391*f81fb7c4SAndroid Build Coastguard Worker <o:shapelayout v:ext="edit">
392*f81fb7c4SAndroid Build Coastguard Worker  <o:idmap v:ext="edit" data="1"/>
393*f81fb7c4SAndroid Build Coastguard Worker </o:shapelayout></xml><![endif]-->
394*f81fb7c4SAndroid Build Coastguard Worker</head>
395*f81fb7c4SAndroid Build Coastguard Worker
396*f81fb7c4SAndroid Build Coastguard Worker<body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'>
397*f81fb7c4SAndroid Build Coastguard Worker
398*f81fb7c4SAndroid Build Coastguard Worker<pre>
399*f81fb7c4SAndroid Build Coastguard Worker   Copyright (C) 2009 The Android Open Source Project
400*f81fb7c4SAndroid Build Coastguard Worker
401*f81fb7c4SAndroid Build Coastguard Worker   Licensed under the Apache License, Version 2.0 (the "License");
402*f81fb7c4SAndroid Build Coastguard Worker   you may not use this file except in compliance with the License.
403*f81fb7c4SAndroid Build Coastguard Worker   You may obtain a copy of the License at
404*f81fb7c4SAndroid Build Coastguard Worker
405*f81fb7c4SAndroid Build Coastguard Worker         http://www.apache.org/licenses/LICENSE-2.0
406*f81fb7c4SAndroid Build Coastguard Worker
407*f81fb7c4SAndroid Build Coastguard Worker   Unless required by applicable law or agreed to in writing, software
408*f81fb7c4SAndroid Build Coastguard Worker   distributed under the License is distributed on an "AS IS" BASIS,
409*f81fb7c4SAndroid Build Coastguard Worker   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
410*f81fb7c4SAndroid Build Coastguard Worker   See the License for the specific language governing permissions and
411*f81fb7c4SAndroid Build Coastguard Worker   limitations under the License.
412*f81fb7c4SAndroid Build Coastguard Worker</pre>
413*f81fb7c4SAndroid Build Coastguard Worker
414*f81fb7c4SAndroid Build Coastguard Worker<div class=Section1>
415*f81fb7c4SAndroid Build Coastguard Worker
416*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoTitle align=left style='text-align:left'><a name="_Toc203292246"></a><a
417*f81fb7c4SAndroid Build Coastguard Workername="_Toc203298075"><span style='mso-bookmark:_Toc203292246'><span lang=EN-IE
418*f81fb7c4SAndroid Build Coastguard Workerstyle='font-size:20.0pt'>JET� Programming Manual<o:p></o:p></span></span></a></p>
419*f81fb7c4SAndroid Build Coastguard Worker
420*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoTitle align=left style='text-align:left'><span style='mso-bookmark:
421*f81fb7c4SAndroid Build Coastguard Worker_Toc203298075'><span style='mso-bookmark:_Toc203292246'><span lang=EN-IE>JET
422*f81fb7c4SAndroid Build Coastguard WorkerInteractive Music Engine</span></span></span></p>
423*f81fb7c4SAndroid Build Coastguard Worker
424*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoTitle align=left style='text-align:left'><span style='mso-bookmark:
425*f81fb7c4SAndroid Build Coastguard Worker_Toc203298075'><span style='mso-bookmark:_Toc203292246'><span lang=EN-IE
426*f81fb7c4SAndroid Build Coastguard Workerstyle='font-size:12.0pt'>Vrs 2.0<o:p></o:p></span></span></span></p>
427*f81fb7c4SAndroid Build Coastguard Worker
428*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoTitle align=left style='text-align:left'><span style='mso-bookmark:
429*f81fb7c4SAndroid Build Coastguard Worker_Toc203298075'><span style='mso-bookmark:_Toc203292246'><span lang=EN-IE
430*f81fb7c4SAndroid Build Coastguard Workerstyle='font-size:12.0pt'>Authored by SONiVOX<o:p></o:p></span></span></span></p>
431*f81fb7c4SAndroid Build Coastguard Worker
432*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoTitle align=left style='text-align:left'><span style='mso-bookmark:
433*f81fb7c4SAndroid Build Coastguard Worker_Toc203298075'><span style='mso-bookmark:_Toc203292246'></span></span><a
434*f81fb7c4SAndroid Build Coastguard Workerhref="http://www.sonivoxrocks.com/"><span style='mso-bookmark:_Toc203298075'><span
435*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-bookmark:_Toc203292246'><span lang=EN-IE style='font-size:12.0pt'>www.sonivoxrocks.com</span></span></span><span
436*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-bookmark:_Toc203298075'><span style='mso-bookmark:_Toc203292246'></span></span></a><span
437*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-bookmark:_Toc203298075'><span style='mso-bookmark:_Toc203292246'><span
438*f81fb7c4SAndroid Build Coastguard Workerlang=EN-IE style='font-size:12.0pt'><o:p></o:p></span></span></span></p>
439*f81fb7c4SAndroid Build Coastguard Worker
440*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoTitle align=left style='text-align:left'><span style='mso-bookmark:
441*f81fb7c4SAndroid Build Coastguard Worker_Toc203298075'><span style='mso-bookmark:_Toc203292246'><span lang=EN-IE
442*f81fb7c4SAndroid Build Coastguard Workerstyle='font-size:12.0pt'>Copyright 2009 Sonic Network, Inc.<o:p></o:p></span></span></span></p>
443*f81fb7c4SAndroid Build Coastguard Worker
444*f81fb7c4SAndroid Build Coastguard Worker<span style='mso-bookmark:_Toc203292246'></span><span style='mso-bookmark:_Toc203298075'></span>
445*f81fb7c4SAndroid Build Coastguard Worker
446*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoCommentText><o:p>&nbsp;</o:p></p>
447*f81fb7c4SAndroid Build Coastguard Worker
448*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoHeader><o:p>&nbsp;</o:p></p>
449*f81fb7c4SAndroid Build Coastguard Worker
450*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoHeader><o:p>&nbsp;</o:p></p>
451*f81fb7c4SAndroid Build Coastguard Worker
452*f81fb7c4SAndroid Build Coastguard Worker<h1 align=left style='text-align:left'><a name="_Toc203298082"></a><a
453*f81fb7c4SAndroid Build Coastguard Workername="_Toc482161515"><span style='mso-bookmark:_Toc203298082'><i
454*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-bidi-font-style:normal'>Introduction</i></span></a><i
455*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-bidi-font-style:normal'><o:p></o:p></i></h1>
456*f81fb7c4SAndroid Build Coastguard Worker
457*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>This document contains programmer guidelines for the SONiVOX
458*f81fb7c4SAndroid Build Coastguard WorkerJET Interactive Music System. JET is an interactive music player for small
459*f81fb7c4SAndroid Build Coastguard Workerembedded devices, including the Google Android platform. It allows applications
460*f81fb7c4SAndroid Build Coastguard Workerto include interactive music soundtracks, in <st1:place w:st="on">MIDI</st1:place>
461*f81fb7c4SAndroid Build Coastguard Workerformat, that respond in real-time to game play events and user interaction. </p>
462*f81fb7c4SAndroid Build Coastguard Worker
463*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
464*f81fb7c4SAndroid Build Coastguard Worker
465*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>JET works in conjunction with SONiVOX�s Embedded Audio
466*f81fb7c4SAndroid Build Coastguard WorkerSynthesizer (EAS) which is the <st1:place w:st="on">MIDI</st1:place> playback
467*f81fb7c4SAndroid Build Coastguard Workerdevice for Android.<span style='mso-spacerun:yes'>� </span>Both the JET and EAS
468*f81fb7c4SAndroid Build Coastguard Workerengines are integrated into the Android embedded platform as well as inherent
469*f81fb7c4SAndroid Build Coastguard Workerin <i style='mso-bidi-font-style:normal'>JET Creator</i>, an application for
470*f81fb7c4SAndroid Build Coastguard Workerauthoring JET content files. As such, the JET content author can be sure that
471*f81fb7c4SAndroid Build Coastguard Workerthe playback will sound exactly the same in both <i style='mso-bidi-font-style:
472*f81fb7c4SAndroid Build Coastguard Workernormal'>JET Creator</i> and the final Android application playing back on
473*f81fb7c4SAndroid Build Coastguard WorkerAndroid mobile devices.</p>
474*f81fb7c4SAndroid Build Coastguard Worker
475*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
476*f81fb7c4SAndroid Build Coastguard Worker
477*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>The programmer of a JET application will want to work
478*f81fb7c4SAndroid Build Coastguard Workerclosely with the content author in designing how real-time application events
479*f81fb7c4SAndroid Build Coastguard Workerand music will interactively work together. Once decided, the content author
480*f81fb7c4SAndroid Build Coastguard Workerwill create the content and ultimately save a .jet file for the programmer to
481*f81fb7c4SAndroid Build Coastguard Workerinclude in the application.</p>
482*f81fb7c4SAndroid Build Coastguard Worker
483*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
484*f81fb7c4SAndroid Build Coastguard Worker
485*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Please see �JET Creator User Documentation� for additional
486*f81fb7c4SAndroid Build Coastguard Workerinformation on authoring JET content.</p>
487*f81fb7c4SAndroid Build Coastguard Worker
488*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
489*f81fb7c4SAndroid Build Coastguard Worker
490*f81fb7c4SAndroid Build Coastguard Worker<h2><a name="_Toc203298084">Abbreviations and Common Terms</a></h2>
491*f81fb7c4SAndroid Build Coastguard Worker
492*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>It is important to use a common set of terms to minimize confusion.
493*f81fb7c4SAndroid Build Coastguard WorkerSince JET uses <st1:place w:st="on">MIDI</st1:place> in a unique way, normal
494*f81fb7c4SAndroid Build Coastguard Workerindustry terms may not always suffice. Here is the definition of terms as they
495*f81fb7c4SAndroid Build Coastguard Workerare used in this document and in the JET Creator application:</p>
496*f81fb7c4SAndroid Build Coastguard Worker
497*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
498*f81fb7c4SAndroid Build Coastguard Worker
499*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>Channel</i>: MIDI data
500*f81fb7c4SAndroid Build Coastguard Workerassociated with a specific <st1:place w:st="on">MIDI</st1:place> channel.
501*f81fb7c4SAndroid Build Coastguard WorkerStandard MIDI allows for 16 channels of <st1:place w:st="on">MIDI</st1:place>
502*f81fb7c4SAndroid Build Coastguard Workerdata each of which are typically associated with a specific instrument. </p>
503*f81fb7c4SAndroid Build Coastguard Worker
504*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
505*f81fb7c4SAndroid Build Coastguard Worker
506*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>Controller</i>: A <st1:place
507*f81fb7c4SAndroid Build Coastguard Workerw:st="on">MIDI</st1:place> event consisting of a channel number, controller
508*f81fb7c4SAndroid Build Coastguard Workernumber, and a controller value. The <st1:place w:st="on">MIDI</st1:place> spec
509*f81fb7c4SAndroid Build Coastguard Workerassociates many controller numbers with specific functions, such as volume,
510*f81fb7c4SAndroid Build Coastguard Workerexpression, sustain pedal, etc. JET also uses controller events as a means of
511*f81fb7c4SAndroid Build Coastguard Workerembedding special control information in a <st1:place w:st="on">MIDI</st1:place>
512*f81fb7c4SAndroid Build Coastguard Workersequence to provide for audio synchronization.</p>
513*f81fb7c4SAndroid Build Coastguard Worker
514*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
515*f81fb7c4SAndroid Build Coastguard Worker
516*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>DAW</i>: Digital Audio
517*f81fb7c4SAndroid Build Coastguard WorkerWorkstation. A common term for <st1:place w:st="on">MIDI</st1:place> and audio
518*f81fb7c4SAndroid Build Coastguard Workersequencing applications such as Logic, SONAR, Cubase and others. </p>
519*f81fb7c4SAndroid Build Coastguard Worker
520*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
521*f81fb7c4SAndroid Build Coastguard Worker
522*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>EAS:</i> Embedded <st1:place
523*f81fb7c4SAndroid Build Coastguard Workerw:st="on">MIDI</st1:place> Synthesizer. The name of the SONiVOX MIDI
524*f81fb7c4SAndroid Build Coastguard Workersynthesizer engine.</p>
525*f81fb7c4SAndroid Build Coastguard Worker
526*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
527*f81fb7c4SAndroid Build Coastguard Worker
528*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>JET</i>: Jet
529*f81fb7c4SAndroid Build Coastguard WorkerInteractive Engine. The name of the SONiVOX JET interactive music engine.</p>
530*f81fb7c4SAndroid Build Coastguard Worker
531*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
532*f81fb7c4SAndroid Build Coastguard Worker
533*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>Segment</i>: A musical
534*f81fb7c4SAndroid Build Coastguard Workersection such as a chorus or verse that is a component of the overall
535*f81fb7c4SAndroid Build Coastguard Workercomposition. In JET, a segment can be an entire MIDI file or a derived from a
536*f81fb7c4SAndroid Build Coastguard Workerportion of a <st1:place w:st="on">MIDI</st1:place> file.</p>
537*f81fb7c4SAndroid Build Coastguard Worker
538*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
539*f81fb7c4SAndroid Build Coastguard Worker
540*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>SMF-0</i>: Standard
541*f81fb7c4SAndroid Build Coastguard WorkerMIDI File Type 0, a MIDI file that contains a single track, but may be made up
542*f81fb7c4SAndroid Build Coastguard Workerof multiple channels of <st1:place w:st="on">MIDI</st1:place> data.</p>
543*f81fb7c4SAndroid Build Coastguard Worker
544*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
545*f81fb7c4SAndroid Build Coastguard Worker
546*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>SMF-1</i>: Standard
547*f81fb7c4SAndroid Build Coastguard WorkerMIDI File Type 1, a MIDI file that contains a one more tracks, and each track
548*f81fb7c4SAndroid Build Coastguard Workermay in turn be made up of one or more channels of <st1:place w:st="on">MIDI</st1:place>
549*f81fb7c4SAndroid Build Coastguard Workerdata. By convention, each channel is stored on a separate track in an SMF-1
550*f81fb7c4SAndroid Build Coastguard Workerfile. However, it is possible to have multiple MIDI channels on a single track,
551*f81fb7c4SAndroid Build Coastguard Workeror multiple tracks that contain data for the same <st1:place w:st="on">MIDI</st1:place>
552*f81fb7c4SAndroid Build Coastguard Workerchannel.</p>
553*f81fb7c4SAndroid Build Coastguard Worker
554*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
555*f81fb7c4SAndroid Build Coastguard Worker
556*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>Track</i>: A single
557*f81fb7c4SAndroid Build Coastguard Workertrack in a DAW containing a timed sequence of <st1:place w:st="on">MIDI</st1:place>
558*f81fb7c4SAndroid Build Coastguard Workerevents. Be careful not to confuse Tracks with Channels. A MIDI file may contain
559*f81fb7c4SAndroid Build Coastguard Workermany tracks with several tracks utilizing the same <st1:place w:st="on">MIDI</st1:place>
560*f81fb7c4SAndroid Build Coastguard Workerchannel. </p>
561*f81fb7c4SAndroid Build Coastguard Worker
562*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
563*f81fb7c4SAndroid Build Coastguard Worker
564*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
565*f81fb7c4SAndroid Build Coastguard Worker
566*f81fb7c4SAndroid Build Coastguard Worker<h1 align=left style='text-align:left'><a name="_Toc203298085"></a><a
567*f81fb7c4SAndroid Build Coastguard Workername="_Toc135723076"></a><a name="_Toc135723793"></a><a name="_Toc135724016"></a><a
568*f81fb7c4SAndroid Build Coastguard Workername="_Toc135724241"></a><a name="_Toc135724464"></a><a name="_Toc135724687"></a><a
569*f81fb7c4SAndroid Build Coastguard Workername="_Toc135724909"></a><a name="_Toc135725132"></a><a name="_Toc135726607"></a><a
570*f81fb7c4SAndroid Build Coastguard Workername="_Toc135727776"></a><a name="_Toc137004452"></a><a name="_Toc135724689"></a><a
571*f81fb7c4SAndroid Build Coastguard Workername="_Toc135724467"></a><span style='mso-bookmark:_Toc203298085'>The JET
572*f81fb7c4SAndroid Build Coastguard WorkerInteractive Music Concept</span></h1>
573*f81fb7c4SAndroid Build Coastguard Worker
574*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Interactive music can be defined as music that changes in
575*f81fb7c4SAndroid Build Coastguard Workerreal-time according to non-predictable events such as user interaction or game
576*f81fb7c4SAndroid Build Coastguard Workerplay events. In this way, interactive music is much more engaging as it has the
577*f81fb7c4SAndroid Build Coastguard Workerability to match the energy and mood of a game much closer than a pre-composed
578*f81fb7c4SAndroid Build Coastguard Workercomposition that never changes. In some applications and games, interactive
579*f81fb7c4SAndroid Build Coastguard Workermusic is central to the game play. Guitar Hero is one such popular game. When
580*f81fb7c4SAndroid Build Coastguard Workerthe end user successfully �captures� the musical notes coming down the fret
581*f81fb7c4SAndroid Build Coastguard Workerboard, the music adapts itself and simultaneously keeps score of successes and
582*f81fb7c4SAndroid Build Coastguard Workerfailures. JET allows for these types of music driven games as well.</p>
583*f81fb7c4SAndroid Build Coastguard Worker
584*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
585*f81fb7c4SAndroid Build Coastguard Worker
586*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>There are several methods for making and controlling
587*f81fb7c4SAndroid Build Coastguard Workerinteractive music and JET is one such method. This section describes the
588*f81fb7c4SAndroid Build Coastguard Workerfeatures of JET and how they might be used in a game or software application.
589*f81fb7c4SAndroid Build Coastguard WorkerIt also describes how JET can be used to save memory in small footprint devices
590*f81fb7c4SAndroid Build Coastguard Workersuch as Android enabled mobile handsets.</p>
591*f81fb7c4SAndroid Build Coastguard Worker
592*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
593*f81fb7c4SAndroid Build Coastguard Worker
594*f81fb7c4SAndroid Build Coastguard Worker<h2>JET Operation</h2>
595*f81fb7c4SAndroid Build Coastguard Worker
596*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>JET supports a flexible music format that can be used to
597*f81fb7c4SAndroid Build Coastguard Workercreate extended musical sequences with a minimal amount of data. A musical
598*f81fb7c4SAndroid Build Coastguard Workercomposition is broken up into segments that can be sequenced to create a longer
599*f81fb7c4SAndroid Build Coastguard Workerpiece. The sequencing can be fixed at the time the music file is authored, or
600*f81fb7c4SAndroid Build Coastguard Workerit can be created dynamically under program control.</p>
601*f81fb7c4SAndroid Build Coastguard Worker
602*f81fb7c4SAndroid Build Coastguard Worker<h3><span class=Heading2Char><span style='font-size:14.0pt'>Linear Music
603*f81fb7c4SAndroid Build Coastguard WorkerExample<o:p></o:p></span></span></h3>
604*f81fb7c4SAndroid Build Coastguard Worker
605*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
606*f81fb7c4SAndroid Build Coastguard Worker o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
607*f81fb7c4SAndroid Build Coastguard Worker stroked="f">
608*f81fb7c4SAndroid Build Coastguard Worker <v:stroke joinstyle="miter"/>
609*f81fb7c4SAndroid Build Coastguard Worker <v:formulas>
610*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
611*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="sum @0 1 0"/>
612*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="sum 0 0 @1"/>
613*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="prod @2 1 2"/>
614*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="prod @3 21600 pixelWidth"/>
615*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="prod @3 21600 pixelHeight"/>
616*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="sum @0 0 1"/>
617*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="prod @6 1 2"/>
618*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="prod @7 21600 pixelWidth"/>
619*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="sum @8 21600 0"/>
620*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="prod @7 21600 pixelHeight"/>
621*f81fb7c4SAndroid Build Coastguard Worker  <v:f eqn="sum @10 21600 0"/>
622*f81fb7c4SAndroid Build Coastguard Worker </v:formulas>
623*f81fb7c4SAndroid Build Coastguard Worker <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
624*f81fb7c4SAndroid Build Coastguard Worker <o:lock v:ext="edit" aspectratio="t"/>
625*f81fb7c4SAndroid Build Coastguard Worker</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:431.25pt;
626*f81fb7c4SAndroid Build Coastguard Worker height:294.75pt' o:ole="">
627*f81fb7c4SAndroid Build Coastguard Worker <v:imagedata src="JET_Programming_Manual_files/image013.emz" o:title=""/>
628*f81fb7c4SAndroid Build Coastguard Worker</v:shape><![endif]--><![if !vml]><img border=0 width=575 height=393
629*f81fb7c4SAndroid Build Coastguard Workersrc="JET_Programming_Manual_files/image002.png" v:shapes="_x0000_i1025"><![endif]><!--[if gte mso 9]><xml>
630*f81fb7c4SAndroid Build Coastguard Worker <o:OLEObject Type="Embed" ProgID="Visio.Drawing.11" ShapeID="_x0000_i1025"
631*f81fb7c4SAndroid Build Coastguard Worker  DrawAspect="Content" ObjectID="_1298963236">
632*f81fb7c4SAndroid Build Coastguard Worker </o:OLEObject>
633*f81fb7c4SAndroid Build Coastguard Worker</xml><![endif]--></p>
634*f81fb7c4SAndroid Build Coastguard Worker
635*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoCaption>Figure <!--[if supportFields]><span style='mso-element:
636*f81fb7c4SAndroid Build Coastguard Workerfield-begin'></span><span style='mso-spacerun:yes'>�</span>SEQ Figure \* ARABIC
637*f81fb7c4SAndroid Build Coastguard Worker<span style='mso-element:field-separator'></span><![endif]--><span
638*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-no-proof:yes'>1</span><!--[if supportFields]><span style='mso-element:
639*f81fb7c4SAndroid Build Coastguard Workerfield-end'></span><![endif]-->: Linear Music Piece</p>
640*f81fb7c4SAndroid Build Coastguard Worker
641*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
642*f81fb7c4SAndroid Build Coastguard Worker
643*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>This diagram shows how musical segments are stored. Each
644*f81fb7c4SAndroid Build Coastguard Workersegment is authored as a separate <st1:place w:st="on">MIDI</st1:place> file. A
645*f81fb7c4SAndroid Build Coastguard Workerpost-processing tool combines the files into a single container file. Each
646*f81fb7c4SAndroid Build Coastguard Workersegment can contain alternate music tracks that can be muted or un-muted to
647*f81fb7c4SAndroid Build Coastguard Workercreate additional interest. An example might be a brass accent in the chorus
648*f81fb7c4SAndroid Build Coastguard Workerthat is played only the last time through. Also, segments can be transposed up
649*f81fb7c4SAndroid Build Coastguard Workeror down.</p>
650*f81fb7c4SAndroid Build Coastguard Worker
651*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
652*f81fb7c4SAndroid Build Coastguard Worker
653*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>The bottom part of the diagram shows how the musical
654*f81fb7c4SAndroid Build Coastguard Workersegments can be recombined to create a linear music piece. In this example, the
655*f81fb7c4SAndroid Build Coastguard Workerbridge might end with a half-step key modulation and the remaining segments
656*f81fb7c4SAndroid Build Coastguard Workercould be transposed up a half-step to match.</p>
657*f81fb7c4SAndroid Build Coastguard Worker
658*f81fb7c4SAndroid Build Coastguard Worker<h3>Non-linear Music Example</h3>
659*f81fb7c4SAndroid Build Coastguard Worker
660*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal style='page-break-after:avoid'><!--[if gte vml 1]><v:shape
661*f81fb7c4SAndroid Build Coastguard Worker id="_x0000_i1026" type="#_x0000_t75" style='width:6in;height:291.75pt' o:ole="">
662*f81fb7c4SAndroid Build Coastguard Worker <v:imagedata src="JET_Programming_Manual_files/image014.emz" o:title=""/>
663*f81fb7c4SAndroid Build Coastguard Worker</v:shape><![endif]--><![if !vml]><img border=0 width=576 height=389
664*f81fb7c4SAndroid Build Coastguard Workersrc="JET_Programming_Manual_files/image004.png" v:shapes="_x0000_i1026"><![endif]><!--[if gte mso 9]><xml>
665*f81fb7c4SAndroid Build Coastguard Worker <o:OLEObject Type="Embed" ProgID="Visio.Drawing.11" ShapeID="_x0000_i1026"
666*f81fb7c4SAndroid Build Coastguard Worker  DrawAspect="Content" ObjectID="_1298963237">
667*f81fb7c4SAndroid Build Coastguard Worker </o:OLEObject>
668*f81fb7c4SAndroid Build Coastguard Worker</xml><![endif]--></p>
669*f81fb7c4SAndroid Build Coastguard Worker
670*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoCaption>Figure <!--[if supportFields]><span style='mso-element:
671*f81fb7c4SAndroid Build Coastguard Workerfield-begin'></span><span style='mso-spacerun:yes'>�</span>SEQ Figure \* ARABIC
672*f81fb7c4SAndroid Build Coastguard Worker<span style='mso-element:field-separator'></span><![endif]--><span
673*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-no-proof:yes'>2</span><!--[if supportFields]><span style='mso-element:
674*f81fb7c4SAndroid Build Coastguard Workerfield-end'></span><![endif]-->: Non-linear music piece</p>
675*f81fb7c4SAndroid Build Coastguard Worker
676*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
677*f81fb7c4SAndroid Build Coastguard Worker
678*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>In this diagram, we see a non-linear music piece. The
679*f81fb7c4SAndroid Build Coastguard Workerscenario is a first-person-shooter (FPS) and JET is providing the background
680*f81fb7c4SAndroid Build Coastguard Workermusic. The intro plays as the level is loading and then transitions under
681*f81fb7c4SAndroid Build Coastguard Workerprogram control to the Searching segment. This segment is repeated
682*f81fb7c4SAndroid Build Coastguard Workerindefinitely, perhaps with small variations (using the mute/un-mute feature)
683*f81fb7c4SAndroid Build Coastguard Workeruntil activity in the game dictates a change.</p>
684*f81fb7c4SAndroid Build Coastguard Worker
685*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
686*f81fb7c4SAndroid Build Coastguard Worker
687*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>As the player nears a monster lair, the program starts a
688*f81fb7c4SAndroid Build Coastguard Workersynchronized transition to the Danger segment, increasing the tension level in
689*f81fb7c4SAndroid Build Coastguard Workerthe audio. As the player draws closer to the lair, additional tracks are
690*f81fb7c4SAndroid Build Coastguard Workerun-muted to increase the tension.</p>
691*f81fb7c4SAndroid Build Coastguard Worker
692*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
693*f81fb7c4SAndroid Build Coastguard Worker
694*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>As the player enters into combat with the monster, the
695*f81fb7c4SAndroid Build Coastguard Workerprogram starts a synchronized transition to the Combat segment. The segment
696*f81fb7c4SAndroid Build Coastguard Workerrepeats indefinitely as the combat continues. A Bonus Hit temporarily un-mutes
697*f81fb7c4SAndroid Build Coastguard Workera decorative track that notifies the player of a successful attack, and
698*f81fb7c4SAndroid Build Coastguard Workersimilarly, another track is temporarily un-muted to signify when the player
699*f81fb7c4SAndroid Build Coastguard Workerreceives Special Damage.</p>
700*f81fb7c4SAndroid Build Coastguard Worker
701*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
702*f81fb7c4SAndroid Build Coastguard Worker
703*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>At the end of combat, the music transitions to a victory or
704*f81fb7c4SAndroid Build Coastguard Workerdefeat segment based on the outcome of battle.</p>
705*f81fb7c4SAndroid Build Coastguard Worker
706*f81fb7c4SAndroid Build Coastguard Worker<h3>Mute/Un-mute Synchronization</h3>
707*f81fb7c4SAndroid Build Coastguard Worker
708*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>JET can also synchronize the muting and un-muting of tracks
709*f81fb7c4SAndroid Build Coastguard Workerto events in the music. For example, in the FPS game, it would probably be
710*f81fb7c4SAndroid Build Coastguard Workerdesirable to place the musical events relating to bonuses and damage as close
711*f81fb7c4SAndroid Build Coastguard Workerto the actual game event as possible. However, simply un-muting a track at the
712*f81fb7c4SAndroid Build Coastguard Workermoment the game event occurs might result in a music clip starting in the
713*f81fb7c4SAndroid Build Coastguard Workermiddle. Alternatively, a clip could be started from the beginning, but then it
714*f81fb7c4SAndroid Build Coastguard Workerwouldn�t be synchronized with the other music tracks.</p>
715*f81fb7c4SAndroid Build Coastguard Worker
716*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
717*f81fb7c4SAndroid Build Coastguard Worker
718*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>However, with the JET sync engine, a clip can be started at
719*f81fb7c4SAndroid Build Coastguard Workerthe next opportune moment and maintain synchronization. This can be
720*f81fb7c4SAndroid Build Coastguard Workeraccomplished by placing a number of short music clips on a decorative track. A <st1:place
721*f81fb7c4SAndroid Build Coastguard Workerw:st="on">MIDI</st1:place> event in the stream signifies the start of a clip
722*f81fb7c4SAndroid Build Coastguard Workerand a second event signifies the end of a clip. When the application calls the
723*f81fb7c4SAndroid Build Coastguard WorkerJET clip function, the next clip in the track is allowed to play fully
724*f81fb7c4SAndroid Build Coastguard Workersynchronized to the music. Optionally, the track can be automatically muted by
725*f81fb7c4SAndroid Build Coastguard Workera second <st1:place w:st="on">MIDI</st1:place> event.</p>
726*f81fb7c4SAndroid Build Coastguard Worker
727*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
728*f81fb7c4SAndroid Build Coastguard Worker
729*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal style='page-break-after:avoid'><!--[if gte vml 1]><v:shape
730*f81fb7c4SAndroid Build Coastguard Worker id="_x0000_i1027" type="#_x0000_t75" style='width:6in;height:116.25pt' o:ole="">
731*f81fb7c4SAndroid Build Coastguard Worker <v:imagedata src="JET_Programming_Manual_files/image015.emz" o:title=""/>
732*f81fb7c4SAndroid Build Coastguard Worker</v:shape><![endif]--><![if !vml]><img border=0 width=576 height=155
733*f81fb7c4SAndroid Build Coastguard Workersrc="JET_Programming_Manual_files/image006.png" v:shapes="_x0000_i1027"><![endif]><!--[if gte mso 9]><xml>
734*f81fb7c4SAndroid Build Coastguard Worker <o:OLEObject Type="Embed" ProgID="Visio.Drawing.11" ShapeID="_x0000_i1027"
735*f81fb7c4SAndroid Build Coastguard Worker  DrawAspect="Content" ObjectID="_1298963238">
736*f81fb7c4SAndroid Build Coastguard Worker </o:OLEObject>
737*f81fb7c4SAndroid Build Coastguard Worker</xml><![endif]--></p>
738*f81fb7c4SAndroid Build Coastguard Worker
739*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoCaption>Figure <!--[if supportFields]><span style='mso-element:
740*f81fb7c4SAndroid Build Coastguard Workerfield-begin'></span><span style='mso-spacerun:yes'>�</span>SEQ Figure \* ARABIC
741*f81fb7c4SAndroid Build Coastguard Worker<span style='mso-element:field-separator'></span><![endif]--><span
742*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-no-proof:yes'>3</span><!--[if supportFields]><span style='mso-element:
743*f81fb7c4SAndroid Build Coastguard Workerfield-end'></span><![endif]-->: Synchronized Mute/Unmute</p>
744*f81fb7c4SAndroid Build Coastguard Worker
745*f81fb7c4SAndroid Build Coastguard Worker<h2>Audio Synchronization</h2>
746*f81fb7c4SAndroid Build Coastguard Worker
747*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>JET provides an audio synchronization API that allows game
748*f81fb7c4SAndroid Build Coastguard Workerplay to be synchronized to events in the audio. The mechanism relies on data
749*f81fb7c4SAndroid Build Coastguard Workerembedded in the <st1:place w:st="on">MIDI</st1:place> file at the time the
750*f81fb7c4SAndroid Build Coastguard Workercontent is authored. When the JET engine senses an event during playback it
751*f81fb7c4SAndroid Build Coastguard Workergenerates a callback into the application program. The timing of the callback
752*f81fb7c4SAndroid Build Coastguard Workercan be adjusted to compensate for any latency in the audio playback system so
753*f81fb7c4SAndroid Build Coastguard Workerthat audio and video can be synchronized. The diagram below shows an example of
754*f81fb7c4SAndroid Build Coastguard Workera simple music game that involves pressing the left and right arrows in time
755*f81fb7c4SAndroid Build Coastguard Workerwith the music.</p>
756*f81fb7c4SAndroid Build Coastguard Worker
757*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
758*f81fb7c4SAndroid Build Coastguard Worker
759*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
760*f81fb7c4SAndroid Build Coastguard Worker
761*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal style='page-break-after:avoid'><!--[if gte vml 1]><v:shape
762*f81fb7c4SAndroid Build Coastguard Worker id="_x0000_i1028" type="#_x0000_t75" style='width:6in;height:100.5pt' o:ole="">
763*f81fb7c4SAndroid Build Coastguard Worker <v:imagedata src="JET_Programming_Manual_files/image016.emz" o:title=""/>
764*f81fb7c4SAndroid Build Coastguard Worker</v:shape><![endif]--><![if !vml]><img border=0 width=576 height=134
765*f81fb7c4SAndroid Build Coastguard Workersrc="JET_Programming_Manual_files/image008.png" v:shapes="_x0000_i1028"><![endif]><!--[if gte mso 9]><xml>
766*f81fb7c4SAndroid Build Coastguard Worker <o:OLEObject Type="Embed" ProgID="Visio.Drawing.11" ShapeID="_x0000_i1028"
767*f81fb7c4SAndroid Build Coastguard Worker  DrawAspect="Content" ObjectID="_1298963239">
768*f81fb7c4SAndroid Build Coastguard Worker </o:OLEObject>
769*f81fb7c4SAndroid Build Coastguard Worker</xml><![endif]--></p>
770*f81fb7c4SAndroid Build Coastguard Worker
771*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoCaption>Figure <!--[if supportFields]><span style='mso-element:
772*f81fb7c4SAndroid Build Coastguard Workerfield-begin'></span><span style='mso-spacerun:yes'>�</span>SEQ Figure \* ARABIC
773*f81fb7c4SAndroid Build Coastguard Worker<span style='mso-element:field-separator'></span><![endif]--><span
774*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-no-proof:yes'>4</span><!--[if supportFields]><span style='mso-element:
775*f81fb7c4SAndroid Build Coastguard Workerfield-end'></span><![endif]-->: Music Game<span style='mso-no-proof:yes'> with
776*f81fb7c4SAndroid Build Coastguard WorkerSynchronization<o:p></o:p></span></p>
777*f81fb7c4SAndroid Build Coastguard Worker
778*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
779*f81fb7c4SAndroid Build Coastguard Worker
780*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>The arrows represent events in the music sequence where game
781*f81fb7c4SAndroid Build Coastguard Workerevents need to be synchronized. In this case, the blue arrow represents a time
782*f81fb7c4SAndroid Build Coastguard Workerwhere the player is supposed to press the left button, and the red arrow is for
783*f81fb7c4SAndroid Build Coastguard Workerthe right button. The yellow arrow tells the game engine that the sequence is
784*f81fb7c4SAndroid Build Coastguard Workercomplete. The player is allowed a certain time window before and after the
785*f81fb7c4SAndroid Build Coastguard Workerevent to press the appropriate key.</p>
786*f81fb7c4SAndroid Build Coastguard Worker
787*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
788*f81fb7c4SAndroid Build Coastguard Worker
789*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>If an event is received and the player has not pressed a
790*f81fb7c4SAndroid Build Coastguard Workerbutton, a timer is set to half the length of the window. If the player presses
791*f81fb7c4SAndroid Build Coastguard Workerthe button before the timer expires, the game registers a success, and if not,
792*f81fb7c4SAndroid Build Coastguard Workerthe game registers a failure. </p>
793*f81fb7c4SAndroid Build Coastguard Worker
794*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
795*f81fb7c4SAndroid Build Coastguard Worker
796*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>If the player presses the button before the event is
797*f81fb7c4SAndroid Build Coastguard Workerreceived, a timer is set to half the length of the window. If an event is
798*f81fb7c4SAndroid Build Coastguard Workerreceived before the timer expires, the game registers a success, and if not,
799*f81fb7c4SAndroid Build Coastguard Workerthe game registers a failure. Game play might also include bonuses for getting
800*f81fb7c4SAndroid Build Coastguard Workerclose to the timing of the actual event. </p>
801*f81fb7c4SAndroid Build Coastguard Worker
802*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
803*f81fb7c4SAndroid Build Coastguard Worker
804*f81fb7c4SAndroid Build Coastguard Worker<h2>Operational Details</h2>
805*f81fb7c4SAndroid Build Coastguard Worker
806*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>JET uses the standard EAS library calls to manage multiple <st1:place
807*f81fb7c4SAndroid Build Coastguard Workerw:st="on">MIDI</st1:place> streams that are synchronized to sound like a
808*f81fb7c4SAndroid Build Coastguard Workerseamless audio track. JET requires the use of the dynamic memory model, i.e.
809*f81fb7c4SAndroid Build Coastguard Workersupport for malloc() and free() memory allocation functions or their
810*f81fb7c4SAndroid Build Coastguard Workerequivalent. JET also requires the DLS parser and synthesizer module to support
811*f81fb7c4SAndroid Build Coastguard Workercustom instruments in JET content files.</p>
812*f81fb7c4SAndroid Build Coastguard Worker
813*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
814*f81fb7c4SAndroid Build Coastguard Worker
815*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>JET uses standard <st1:place w:st="on">MIDI</st1:place>
816*f81fb7c4SAndroid Build Coastguard Workerevents for audio synchronization. This simplifies the authoring process by
817*f81fb7c4SAndroid Build Coastguard Workerallowing content authors to use their favorite tools for developing content.
818*f81fb7c4SAndroid Build Coastguard WorkerAfter the content has been developed, a simple post-processing tool pulls the
819*f81fb7c4SAndroid Build Coastguard Workercontent together into a JET compatible content file.</p>
820*f81fb7c4SAndroid Build Coastguard Worker
821*f81fb7c4SAndroid Build Coastguard Worker<h3>Synchronization Events</h3>
822*f81fb7c4SAndroid Build Coastguard Worker
823*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>JET uses <st1:place w:st="on">MIDI</st1:place> controller
824*f81fb7c4SAndroid Build Coastguard Workerevents to synchronize audio. The controllers used by JET are among those not
825*f81fb7c4SAndroid Build Coastguard Workerdefined for specific use by the <st1:place w:st="on">MIDI</st1:place>
826*f81fb7c4SAndroid Build Coastguard Workerspecification. The specific controller definitions are as follows:</p>
827*f81fb7c4SAndroid Build Coastguard Worker
828*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
829*f81fb7c4SAndroid Build Coastguard Worker
830*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><span style='mso-tab-count:1'>����������� </span>Controllers
831*f81fb7c4SAndroid Build Coastguard Worker80-83<span style='mso-tab-count:2'>���������������� </span>Reserved for use by
832*f81fb7c4SAndroid Build Coastguard Workerapplication</p>
833*f81fb7c4SAndroid Build Coastguard Worker
834*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><span style='mso-tab-count:1'>����������� </span>Controller 102<span
835*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-tab-count:2'>���������������������� </span>JET event marker</p>
836*f81fb7c4SAndroid Build Coastguard Worker
837*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><span style='mso-tab-count:1'>����������� </span>Controller
838*f81fb7c4SAndroid Build Coastguard Worker103<span style='mso-tab-count:2'>���������������������� </span>JET clip marker</p>
839*f81fb7c4SAndroid Build Coastguard Worker
840*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><span style='mso-tab-count:1'>����������� </span>Controllers
841*f81fb7c4SAndroid Build Coastguard Worker104-119<span style='mso-tab-count:2'>������������ </span>Reserved for future
842*f81fb7c4SAndroid Build Coastguard Workeruse</p>
843*f81fb7c4SAndroid Build Coastguard Worker
844*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
845*f81fb7c4SAndroid Build Coastguard Worker
846*f81fb7c4SAndroid Build Coastguard Worker<h4>Controllers 80-83 � Application Controllers</h4>
847*f81fb7c4SAndroid Build Coastguard Worker
848*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>The application may use controllers in this range for its
849*f81fb7c4SAndroid Build Coastguard Workerown purposes. When a controller in this range is encountered, the event is
850*f81fb7c4SAndroid Build Coastguard Workerentered into an event queue that can be queried by the application. Some
851*f81fb7c4SAndroid Build Coastguard Workerpossible uses include synchronizing video events with audio and marking a point
852*f81fb7c4SAndroid Build Coastguard Workerin a <st1:place w:st="on">MIDI</st1:place> segment to queue up the next
853*f81fb7c4SAndroid Build Coastguard Workersegment. The range of controllers monitored by the application can be modified
854*f81fb7c4SAndroid Build Coastguard Workerby the application during initialization.</p>
855*f81fb7c4SAndroid Build Coastguard Worker
856*f81fb7c4SAndroid Build Coastguard Worker<h4>Controller 102 � JET Event Marker</h4>
857*f81fb7c4SAndroid Build Coastguard Worker
858*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Controller 102 is reserved for marking events in the <st1:place
859*f81fb7c4SAndroid Build Coastguard Workerw:st="on">MIDI</st1:place> streams that are specific to JET functionality.
860*f81fb7c4SAndroid Build Coastguard WorkerCurrently, the only defined value is 0, which marks the end of a segment for
861*f81fb7c4SAndroid Build Coastguard Workertiming purposes. </p>
862*f81fb7c4SAndroid Build Coastguard Worker
863*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
864*f81fb7c4SAndroid Build Coastguard Worker
865*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Normally, JET starts playback of the next segment (or
866*f81fb7c4SAndroid Build Coastguard Workerrepeats the current segment) when the <st1:place w:st="on">MIDI</st1:place>
867*f81fb7c4SAndroid Build Coastguard Workerend-of-track meta-event is encountered. Some <st1:place w:st="on">MIDI</st1:place>
868*f81fb7c4SAndroid Build Coastguard Workerauthoring tools make it difficult to place the end-of-track marker accurately,
869*f81fb7c4SAndroid Build Coastguard Workerresulting in synchronization problems when segments are joined together.</p>
870*f81fb7c4SAndroid Build Coastguard Worker
871*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
872*f81fb7c4SAndroid Build Coastguard Worker
873*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>To avoid this problem, the author can place a JET
874*f81fb7c4SAndroid Build Coastguard Workerend-of-segment marker (controller=102, value=0) at the point where the segment is
875*f81fb7c4SAndroid Build Coastguard Workerto be looped. When the end-of-segment marker is encountered, the next segment
876*f81fb7c4SAndroid Build Coastguard Workerwill be triggered, or if the current segment is looped, playback will resume at
877*f81fb7c4SAndroid Build Coastguard Workerthe start of the segment.</p>
878*f81fb7c4SAndroid Build Coastguard Worker
879*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
880*f81fb7c4SAndroid Build Coastguard Worker
881*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>The end-of-segment marker can also be used to allow for
882*f81fb7c4SAndroid Build Coastguard Workercompletion of a musical figure beyond the end of measure that marks the start
883*f81fb7c4SAndroid Build Coastguard Workerof the next segment. For example, the content author might create a 4-bar
884*f81fb7c4SAndroid Build Coastguard Workersegment with a drum fill that ends on beat 1 of the 5<sup>th</sup> bar � a bar
885*f81fb7c4SAndroid Build Coastguard Workerbeyond the natural end of the segment. By placing an end-of-segment marker at
886*f81fb7c4SAndroid Build Coastguard Workerthe end of the 4<sup>th</sup> bar, the next segment will be triggered, but the
887*f81fb7c4SAndroid Build Coastguard Workerdrum fill will continue in parallel with the next segment providing musical
888*f81fb7c4SAndroid Build Coastguard Workercontinuity.</p>
889*f81fb7c4SAndroid Build Coastguard Worker
890*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
891*f81fb7c4SAndroid Build Coastguard Worker
892*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal align=center style='text-align:center;page-break-after:avoid'><!--[if gte vml 1]><v:shape
893*f81fb7c4SAndroid Build Coastguard Worker id="_x0000_i1029" type="#_x0000_t75" style='width:350.25pt;height:138.75pt'
894*f81fb7c4SAndroid Build Coastguard Worker o:ole="">
895*f81fb7c4SAndroid Build Coastguard Worker <v:imagedata src="JET_Programming_Manual_files/image017.emz" o:title=""/>
896*f81fb7c4SAndroid Build Coastguard Worker</v:shape><![endif]--><![if !vml]><img border=0 width=467 height=185
897*f81fb7c4SAndroid Build Coastguard Workersrc="JET_Programming_Manual_files/image010.png" v:shapes="_x0000_i1029"><![endif]><!--[if gte mso 9]><xml>
898*f81fb7c4SAndroid Build Coastguard Worker <o:OLEObject Type="Embed" ProgID="Visio.Drawing.11" ShapeID="_x0000_i1029"
899*f81fb7c4SAndroid Build Coastguard Worker  DrawAspect="Content" ObjectID="_1298963240">
900*f81fb7c4SAndroid Build Coastguard Worker </o:OLEObject>
901*f81fb7c4SAndroid Build Coastguard Worker</xml><![endif]--></p>
902*f81fb7c4SAndroid Build Coastguard Worker
903*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoCaption align=center style='text-align:center'>Figure <!--[if supportFields]><span
904*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-element:field-begin'></span><span
905*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-spacerun:yes'>�</span>SEQ Figure \* ARABIC <span style='mso-element:
906*f81fb7c4SAndroid Build Coastguard Workerfield-separator'></span><![endif]--><span style='mso-no-proof:yes'>5</span><!--[if supportFields]><span
907*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-element:field-end'></span><![endif]-->: End-of-segment Marker</p>
908*f81fb7c4SAndroid Build Coastguard Worker
909*f81fb7c4SAndroid Build Coastguard Worker<h4>Controller 103 � JET Clip Marker</h4>
910*f81fb7c4SAndroid Build Coastguard Worker
911*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Controller 103 is reserved for marking clips in a <st1:place
912*f81fb7c4SAndroid Build Coastguard Workerw:st="on">MIDI</st1:place> track that can be triggered by the JET_TriggerClip
913*f81fb7c4SAndroid Build Coastguard WorkerAPI call. The clip ID is encoded in the low 6 bits of the controller value. Bit
914*f81fb7c4SAndroid Build Coastguard Worker6 is set to one to indicate the start of a clip, and set to zero to indicate
915*f81fb7c4SAndroid Build Coastguard Workerthe end of a clip.</p>
916*f81fb7c4SAndroid Build Coastguard Worker
917*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
918*f81fb7c4SAndroid Build Coastguard Worker
919*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>For example, to identify a clip with a clip ID of 1, the
920*f81fb7c4SAndroid Build Coastguard Workerauthor inserts a <st1:place w:st="on">MIDI</st1:place> controller event with
921*f81fb7c4SAndroid Build Coastguard Workercontroller=103 and value=65 at the start of the clip and another event with controller=103
922*f81fb7c4SAndroid Build Coastguard Workerand value=1 at the end of the clip. When the JET_TriggerClip() function is
923*f81fb7c4SAndroid Build Coastguard Workercalled with a clip ID of 1, the track will be un-muted when the controller
924*f81fb7c4SAndroid Build Coastguard Workervalue 65 is encountered and muted again when the controller value 1 is
925*f81fb7c4SAndroid Build Coastguard Workerencountered.</p>
926*f81fb7c4SAndroid Build Coastguard Worker
927*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
928*f81fb7c4SAndroid Build Coastguard Worker
929*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal align=center style='text-align:center;page-break-after:avoid'><!--[if gte vml 1]><v:shape
930*f81fb7c4SAndroid Build Coastguard Worker id="_x0000_i1030" type="#_x0000_t75" style='width:369pt;height:275.25pt'
931*f81fb7c4SAndroid Build Coastguard Worker o:ole="">
932*f81fb7c4SAndroid Build Coastguard Worker <v:imagedata src="JET_Programming_Manual_files/image018.emz" o:title=""/>
933*f81fb7c4SAndroid Build Coastguard Worker</v:shape><![endif]--><![if !vml]><img border=0 width=492 height=367
934*f81fb7c4SAndroid Build Coastguard Workersrc="JET_Programming_Manual_files/image012.png" v:shapes="_x0000_i1030"><![endif]><!--[if gte mso 9]><xml>
935*f81fb7c4SAndroid Build Coastguard Worker <o:OLEObject Type="Embed" ProgID="Visio.Drawing.11" ShapeID="_x0000_i1030"
936*f81fb7c4SAndroid Build Coastguard Worker  DrawAspect="Content" ObjectID="_1298963241">
937*f81fb7c4SAndroid Build Coastguard Worker </o:OLEObject>
938*f81fb7c4SAndroid Build Coastguard Worker</xml><![endif]--></p>
939*f81fb7c4SAndroid Build Coastguard Worker
940*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoCaption align=center style='text-align:center'>Figure <!--[if supportFields]><span
941*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-element:field-begin'></span><span
942*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-spacerun:yes'>�</span>SEQ Figure \* ARABIC <span style='mso-element:
943*f81fb7c4SAndroid Build Coastguard Workerfield-separator'></span><![endif]--><span style='mso-no-proof:yes'>6</span><!--[if supportFields]><span
944*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-element:field-end'></span><![endif]-->: Synchronized Clip</p>
945*f81fb7c4SAndroid Build Coastguard Worker
946*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
947*f81fb7c4SAndroid Build Coastguard Worker
948*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>In the figure above, if the JET_TriggerClip() function is
949*f81fb7c4SAndroid Build Coastguard Workercalled prior to the first controller event, Track 3 will be un-muted when the
950*f81fb7c4SAndroid Build Coastguard Workerfirst controller event occurs, the first clip will play, and the track will be
951*f81fb7c4SAndroid Build Coastguard Workermuted when the second controller event occurs. If the JET_TriggerClip()
952*f81fb7c4SAndroid Build Coastguard Workerfunction is called after the first controller event has occurred, Track 3 will
953*f81fb7c4SAndroid Build Coastguard Workerbe un-muted when the third controller event occurs, the second clip will play,
954*f81fb7c4SAndroid Build Coastguard Workerand the track will be muted again when the fourth controller event occurs.</p>
955*f81fb7c4SAndroid Build Coastguard Worker
956*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
957*f81fb7c4SAndroid Build Coastguard Worker
958*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><b style='mso-bidi-font-weight:normal'>Note:</b> Normally,
959*f81fb7c4SAndroid Build Coastguard Workerthe track containing the clip is muted by the application when the segment is
960*f81fb7c4SAndroid Build Coastguard Workerinitially queued by the call to JET_QueueSegment(). If it is not muted, the clip
961*f81fb7c4SAndroid Build Coastguard Workerwill always play until Jet_TriggerClip() has been called with the clip ID.</p>
962*f81fb7c4SAndroid Build Coastguard Worker
963*f81fb7c4SAndroid Build Coastguard Worker<h2>JET Programming</h2>
964*f81fb7c4SAndroid Build Coastguard Worker
965*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>The JET library builds on functionality in the EAS library.
966*f81fb7c4SAndroid Build Coastguard WorkerIt is assumed that the reader is familiar with EAS and has implemented basic
967*f81fb7c4SAndroid Build Coastguard WorkerEAS audio functionality in the application. Specifically, the application must
968*f81fb7c4SAndroid Build Coastguard Workerfirst initialize EAS by calling EAS_Init() and must call EAS_Render() at
969*f81fb7c4SAndroid Build Coastguard Workerappropriate times to render audio and stream it to the audio hardware. JET also
970*f81fb7c4SAndroid Build Coastguard Workerrequires the use of the dynamic memory model which uses malloc() and free() or
971*f81fb7c4SAndroid Build Coastguard Workerfunctional equivalents. </p>
972*f81fb7c4SAndroid Build Coastguard Worker
973*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
974*f81fb7c4SAndroid Build Coastguard Worker
975*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Most JET function calls return an EAS_RESULT type which
976*f81fb7c4SAndroid Build Coastguard Workershould be checked against the EAS_SUCCESS return code. Most failures are not
977*f81fb7c4SAndroid Build Coastguard Workerfatal, i.e. they will not put the library in a state where it must be
978*f81fb7c4SAndroid Build Coastguard Workerre-initialized. However, some failures such as memory allocation or file
979*f81fb7c4SAndroid Build Coastguard Workeropen/read errors will likely result in the specific open content failing to
980*f81fb7c4SAndroid Build Coastguard Workerrender.</p>
981*f81fb7c4SAndroid Build Coastguard Worker
982*f81fb7c4SAndroid Build Coastguard Worker<h3>JET Application Initialization</h3>
983*f81fb7c4SAndroid Build Coastguard Worker
984*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>The JET library is initialized by the JET_Init() function.
985*f81fb7c4SAndroid Build Coastguard WorkerThe application must first call EAS_Init() and then pass the EAS data handle
986*f81fb7c4SAndroid Build Coastguard Workerreturned by EAS_Init() to the JET_Init() function. Currently, only a single JET
987*f81fb7c4SAndroid Build Coastguard Workerapplication can be active at a time.</p>
988*f81fb7c4SAndroid Build Coastguard Worker
989*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
990*f81fb7c4SAndroid Build Coastguard Worker
991*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>The JET_Init function takes 3 arguments: The first is the
992*f81fb7c4SAndroid Build Coastguard WorkerEAS data handle. The second is a pointer to a configuration structure
993*f81fb7c4SAndroid Build Coastguard WorkerS_JET_CONFIG and the third is the size of the configuration structure. For most
994*f81fb7c4SAndroid Build Coastguard Workerapplications, it is sufficient to pass a NULL pointer and size 0 for the
995*f81fb7c4SAndroid Build Coastguard Workerconfiguration data. </p>
996*f81fb7c4SAndroid Build Coastguard Worker
997*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
998*f81fb7c4SAndroid Build Coastguard Worker
999*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>However, if desired, the configuration can be modified to
1000*f81fb7c4SAndroid Build Coastguard Workerallow the application to monitor <st1:place w:st="on">MIDI</st1:place> events
1001*f81fb7c4SAndroid Build Coastguard Workeroutside the normal range of controllers allocated for JET application events.
1002*f81fb7c4SAndroid Build Coastguard WorkerIn this case, a configuration structure should be allocated and the data fields
1003*f81fb7c4SAndroid Build Coastguard Workerinitialized with the appropriate values with the low and high controller
1004*f81fb7c4SAndroid Build Coastguard Workernumbers to be monitored. The size field should be the sizeof() of the data
1005*f81fb7c4SAndroid Build Coastguard Workerstructure. This is to allow for future enhancement of the configuration data
1006*f81fb7c4SAndroid Build Coastguard Workerwhile maintaining compatibility.</p>
1007*f81fb7c4SAndroid Build Coastguard Worker
1008*f81fb7c4SAndroid Build Coastguard Worker<h3>JET Application Termination</h3>
1009*f81fb7c4SAndroid Build Coastguard Worker
1010*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>When the JET application terminates, it should call
1011*f81fb7c4SAndroid Build Coastguard WorkerJET_Shutdown() to release the resources allocated by the JET engine.<span
1012*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-spacerun:yes'>� </span>If the application has no other use for the
1013*f81fb7c4SAndroid Build Coastguard WorkerEAS library, it should also call EAS_Shutdown(). </p>
1014*f81fb7c4SAndroid Build Coastguard Worker
1015*f81fb7c4SAndroid Build Coastguard Worker<h3>JET Audio Processing</h3>
1016*f81fb7c4SAndroid Build Coastguard Worker
1017*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>To start the JET engine, the content must first be opened
1018*f81fb7c4SAndroid Build Coastguard Workerwith the JET_OpenFile() function. Just as with EAS_OpenFile(), the file locator
1019*f81fb7c4SAndroid Build Coastguard Workeris an opaque value that is passed to the EAS_HWOpenFile() function. It can
1020*f81fb7c4SAndroid Build Coastguard Workereither be a pointer to a filename, or a pointer to an in-memory object,
1021*f81fb7c4SAndroid Build Coastguard Workerdepending on the user implementation of file I/O in the eas_host.c or
1022*f81fb7c4SAndroid Build Coastguard Workereas_hostmm.c module. Only a single JET content file can be opened at a time.</p>
1023*f81fb7c4SAndroid Build Coastguard Worker
1024*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1025*f81fb7c4SAndroid Build Coastguard Worker
1026*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Once the JET file is opened, the application can begin
1027*f81fb7c4SAndroid Build Coastguard Workerqueuing up segments for playback by calling the JET_QueueSegment() function.
1028*f81fb7c4SAndroid Build Coastguard WorkerGenerally, it is advisable to keep a minimum of two segments queued at all
1029*f81fb7c4SAndroid Build Coastguard Workertimes:<span style='mso-spacerun:yes'>� </span>the currently playing segment
1030*f81fb7c4SAndroid Build Coastguard Workerplus an additional segment that is ready to start playing when the current
1031*f81fb7c4SAndroid Build Coastguard Workersegment finishes. However, with proper programming, it is possible to queue up
1032*f81fb7c4SAndroid Build Coastguard Workersegments using a �just-in-time� technique. This technique typically involves
1033*f81fb7c4SAndroid Build Coastguard Workercareful placement of application controller events near the end of a segment so
1034*f81fb7c4SAndroid Build Coastguard Workerthat the application is informed when a segment is about to end.</p>
1035*f81fb7c4SAndroid Build Coastguard Worker
1036*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1037*f81fb7c4SAndroid Build Coastguard Worker
1038*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>After the segment(s) are queued up, playback can begin. By
1039*f81fb7c4SAndroid Build Coastguard Workerdefault, the segments are initialized in a paused state. To start playback,
1040*f81fb7c4SAndroid Build Coastguard Workercall the JET_Play() function. Playback can be paused again by calling the JET_Pause()
1041*f81fb7c4SAndroid Build Coastguard Workerfunction. Once initiated, playback will continue as long as the application
1042*f81fb7c4SAndroid Build Coastguard Workercontinues to queue up new segments before all the segments in the queue are
1043*f81fb7c4SAndroid Build Coastguard Workerexhausted.</p>
1044*f81fb7c4SAndroid Build Coastguard Worker
1045*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1046*f81fb7c4SAndroid Build Coastguard Worker
1047*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>The JET_Status() function can be used to monitor progress.
1048*f81fb7c4SAndroid Build Coastguard WorkerIt returns the number of segments queued, repeat count, current segment ID, and
1049*f81fb7c4SAndroid Build Coastguard Workerplay status. By monitor the number of segments queued, the application can
1050*f81fb7c4SAndroid Build Coastguard Workerdetermine when it needs to queue another segment and when playback has
1051*f81fb7c4SAndroid Build Coastguard Workercompleted.</p>
1052*f81fb7c4SAndroid Build Coastguard Worker
1053*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1054*f81fb7c4SAndroid Build Coastguard Worker
1055*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>When playback has completed and the application is finished
1056*f81fb7c4SAndroid Build Coastguard Workerwith the contents of the currently open file, the application should call
1057*f81fb7c4SAndroid Build Coastguard WorkerJET_CloseFile() to close the file and release any resources associated with the
1058*f81fb7c4SAndroid Build Coastguard Workerfile.</p>
1059*f81fb7c4SAndroid Build Coastguard Worker
1060*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_Init</h4>
1061*f81fb7c4SAndroid Build Coastguard Worker
1062*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC EAS_RESULT JET_Init
1063*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle, S_JET_CONFIG *pConfig, EAS_INT configSize)</p>
1064*f81fb7c4SAndroid Build Coastguard Worker
1065*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'><o:p>&nbsp;</o:p></p>
1066*f81fb7c4SAndroid Build Coastguard Worker
1067*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Initializes JET library for use by application. Most
1068*f81fb7c4SAndroid Build Coastguard Workerapplication should simply pass a NULL for pConfig and 0 for configSize, which
1069*f81fb7c4SAndroid Build Coastguard Workermeans that only controller events in the application range (80-83) will end up
1070*f81fb7c4SAndroid Build Coastguard Workerin the application event queue. If desired, the application can instantiate an
1071*f81fb7c4SAndroid Build Coastguard WorkerS_JET_CONFIG data structure and set the controller range to a different range.
1072*f81fb7c4SAndroid Build Coastguard WorkerIn this case, the configSize parameter should be set to sizeof(S_JET_CONFIG).</p>
1073*f81fb7c4SAndroid Build Coastguard Worker
1074*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_Shutdown</h4>
1075*f81fb7c4SAndroid Build Coastguard Worker
1076*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC EAS_RESULT JET_Shutdown
1077*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle)</p>
1078*f81fb7c4SAndroid Build Coastguard Worker
1079*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'><o:p>&nbsp;</o:p></p>
1080*f81fb7c4SAndroid Build Coastguard Worker
1081*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Releases resources used by the JET library. The application
1082*f81fb7c4SAndroid Build Coastguard Workershould call this function when it is no longer using the JET library.</p>
1083*f81fb7c4SAndroid Build Coastguard Worker
1084*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_ OpenFile</h4>
1085*f81fb7c4SAndroid Build Coastguard Worker
1086*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC EAS_RESULT JET_OpenFile
1087*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle, EAS_FILE_LOCATOR locator)</p>
1088*f81fb7c4SAndroid Build Coastguard Worker
1089*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1090*f81fb7c4SAndroid Build Coastguard Worker
1091*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Opens a JET content file for playback. Content must be
1092*f81fb7c4SAndroid Build Coastguard Workerformatted for use by the JET library, which is typically accomplished with the
1093*f81fb7c4SAndroid Build Coastguard Workerjetfile.py script (see �Creating JET Content�). Only a single JET content file
1094*f81fb7c4SAndroid Build Coastguard Workercan be opened at a time. However, since JET can contain many <st1:place w:st="on">MIDI</st1:place>
1095*f81fb7c4SAndroid Build Coastguard Workerfiles and DLS libraries, this limitation is normally not an issue.</p>
1096*f81fb7c4SAndroid Build Coastguard Worker
1097*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_ CloseFile</h4>
1098*f81fb7c4SAndroid Build Coastguard Worker
1099*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC EAS_RESULT JET_CloseFile
1100*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle)</p>
1101*f81fb7c4SAndroid Build Coastguard Worker
1102*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'><o:p>&nbsp;</o:p></p>
1103*f81fb7c4SAndroid Build Coastguard Worker
1104*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Closes a JET file and release the resources associated with it.</p>
1105*f81fb7c4SAndroid Build Coastguard Worker
1106*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_ Status</h4>
1107*f81fb7c4SAndroid Build Coastguard Worker
1108*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC EAS_RESULT JET_Status
1109*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle, S_JET_STATUS *pStatus)</p>
1110*f81fb7c4SAndroid Build Coastguard Worker
1111*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'><o:p>&nbsp;</o:p></p>
1112*f81fb7c4SAndroid Build Coastguard Worker
1113*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Returns the current JET status. The elements of the status
1114*f81fb7c4SAndroid Build Coastguard Workerdata structure are as follows:</p>
1115*f81fb7c4SAndroid Build Coastguard Worker
1116*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1117*f81fb7c4SAndroid Build Coastguard Worker
1118*f81fb7c4SAndroid Build Coastguard Worker<p class=Code>typedef struct s_jet_status_tag</p>
1119*f81fb7c4SAndroid Build Coastguard Worker
1120*f81fb7c4SAndroid Build Coastguard Worker<p class=Code>{</p>
1121*f81fb7c4SAndroid Build Coastguard Worker
1122*f81fb7c4SAndroid Build Coastguard Worker<p class=Code><span style='mso-tab-count:1'>���� </span>EAS_INT <span
1123*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-tab-count:1'>� </span>currentUserID;</p>
1124*f81fb7c4SAndroid Build Coastguard Worker
1125*f81fb7c4SAndroid Build Coastguard Worker<p class=Code><span style='mso-tab-count:1'>���� </span>EAS_INT <span
1126*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-tab-count:1'>� </span>segmentRepeatCount;</p>
1127*f81fb7c4SAndroid Build Coastguard Worker
1128*f81fb7c4SAndroid Build Coastguard Worker<p class=Code><span style='mso-tab-count:1'>���� </span>EAS_INT <span
1129*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-tab-count:1'>� </span>numQueuedSegments;</p>
1130*f81fb7c4SAndroid Build Coastguard Worker
1131*f81fb7c4SAndroid Build Coastguard Worker<p class=Code><span style='mso-tab-count:1'>���� </span>EAS_BOOL <span
1132*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-tab-count:1'> </span>paused;</p>
1133*f81fb7c4SAndroid Build Coastguard Worker
1134*f81fb7c4SAndroid Build Coastguard Worker<p class=Code>} S_JET_STATUS;</p>
1135*f81fb7c4SAndroid Build Coastguard Worker
1136*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1137*f81fb7c4SAndroid Build Coastguard Worker
1138*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>currentUserID</i>: An
1139*f81fb7c4SAndroid Build Coastguard Worker8-bit value assigned by the application.</p>
1140*f81fb7c4SAndroid Build Coastguard Worker
1141*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'><o:p>&nbsp;</o:p></i></p>
1142*f81fb7c4SAndroid Build Coastguard Worker
1143*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>segmentRepeatCount</i>:
1144*f81fb7c4SAndroid Build Coastguard WorkerNumber of times left to repeat. Zero indicates no repeats, a negative number
1145*f81fb7c4SAndroid Build Coastguard Workerindicates an infinite number of repeats. Any positive value indicates that the
1146*f81fb7c4SAndroid Build Coastguard Workersegment will play n+1 times.</p>
1147*f81fb7c4SAndroid Build Coastguard Worker
1148*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1149*f81fb7c4SAndroid Build Coastguard Worker
1150*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>numQueuedSegments</i>:
1151*f81fb7c4SAndroid Build Coastguard WorkerNumber of segments currently queued to play including the currently playing
1152*f81fb7c4SAndroid Build Coastguard Workersegment. A value of zero indicates that nothing is playing. Normally, the
1153*f81fb7c4SAndroid Build Coastguard Workerapplication will queue a new segment each time the value is 1 so that playback
1154*f81fb7c4SAndroid Build Coastguard Workeris uninterrupted.</p>
1155*f81fb7c4SAndroid Build Coastguard Worker
1156*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_ QueueSegment</h4>
1157*f81fb7c4SAndroid Build Coastguard Worker
1158*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC EAS_RESULT JET_QueueSegment
1159*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle, EAS_INT segmentNum, EAS_INT libNum, EAS_INT
1160*f81fb7c4SAndroid Build Coastguard WorkerrepeatCount, EAS_INT transpose, EAS_U32 muteFlags, EAS_U8 userID)</p>
1161*f81fb7c4SAndroid Build Coastguard Worker
1162*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'><o:p>&nbsp;</o:p></p>
1163*f81fb7c4SAndroid Build Coastguard Worker
1164*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Queues up a JET MIDI segment for playback. The parameters
1165*f81fb7c4SAndroid Build Coastguard Workerare as follows:</p>
1166*f81fb7c4SAndroid Build Coastguard Worker
1167*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1168*f81fb7c4SAndroid Build Coastguard Worker
1169*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>segmentNum</i>:
1170*f81fb7c4SAndroid Build Coastguard WorkerSegment number as identified in the JET content configuration file.</p>
1171*f81fb7c4SAndroid Build Coastguard Worker
1172*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1173*f81fb7c4SAndroid Build Coastguard Worker
1174*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>libNum</i>: The library
1175*f81fb7c4SAndroid Build Coastguard Workernumber as specified in the JET content configuration file. Use -1 to select the
1176*f81fb7c4SAndroid Build Coastguard Workerstandard General MIDI library.</p>
1177*f81fb7c4SAndroid Build Coastguard Worker
1178*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1179*f81fb7c4SAndroid Build Coastguard Worker
1180*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>repeatCount</i>: The
1181*f81fb7c4SAndroid Build Coastguard Workernumber of times this segment should repeat. Zero indicates no repeat, i.e. play
1182*f81fb7c4SAndroid Build Coastguard Workeronly once. Any positive number indicates to play n+1 times. Set to -1 to repeat
1183*f81fb7c4SAndroid Build Coastguard Workerindefinitely.</p>
1184*f81fb7c4SAndroid Build Coastguard Worker
1185*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1186*f81fb7c4SAndroid Build Coastguard Worker
1187*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>transpose:</i> The
1188*f81fb7c4SAndroid Build Coastguard Workeramount of pitch transposition. Set to 0 for normal playback. Range is -12 to
1189*f81fb7c4SAndroid Build Coastguard Worker+12.</p>
1190*f81fb7c4SAndroid Build Coastguard Worker
1191*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1192*f81fb7c4SAndroid Build Coastguard Worker
1193*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>muteFlags</i>:
1194*f81fb7c4SAndroid Build Coastguard WorkerSpecific which MIDI tracks (not <st1:place w:st="on">MIDI</st1:place> channels)
1195*f81fb7c4SAndroid Build Coastguard Workershould be muted during playback. These flags can be changed dynamically using
1196*f81fb7c4SAndroid Build Coastguard Workerthe mute functions. Bit 0 = track 0, bit 1 = track 1, etc.</p>
1197*f81fb7c4SAndroid Build Coastguard Worker
1198*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1199*f81fb7c4SAndroid Build Coastguard Worker
1200*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><i style='mso-bidi-font-style:normal'>userID</i>: 8-bit
1201*f81fb7c4SAndroid Build Coastguard Workervalue specified by the application that uniquely identifies the segment. This
1202*f81fb7c4SAndroid Build Coastguard Workervalue is returned in the JET_Status() function as well as by the application
1203*f81fb7c4SAndroid Build Coastguard Workerevent when an event is detected in a segment. Normally, the application keeps
1204*f81fb7c4SAndroid Build Coastguard Workeran 8-bit value that is incremented each time a new segment is queued up. This
1205*f81fb7c4SAndroid Build Coastguard Workercan be used to look up any special characteristics of that track including
1206*f81fb7c4SAndroid Build Coastguard Workertrigger clips and mute flags.</p>
1207*f81fb7c4SAndroid Build Coastguard Worker
1208*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_ Play</h4>
1209*f81fb7c4SAndroid Build Coastguard Worker
1210*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC EAS_RESULT JET_Play
1211*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle)</p>
1212*f81fb7c4SAndroid Build Coastguard Worker
1213*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'><o:p>&nbsp;</o:p></p>
1214*f81fb7c4SAndroid Build Coastguard Worker
1215*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Starts playback of the current segment. This function must
1216*f81fb7c4SAndroid Build Coastguard Workerbe called once after the initial segments are queued up to start playback. It
1217*f81fb7c4SAndroid Build Coastguard Workeris also called after JET_Pause() to resume playback.</p>
1218*f81fb7c4SAndroid Build Coastguard Worker
1219*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_ Pause</h4>
1220*f81fb7c4SAndroid Build Coastguard Worker
1221*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC EAS_RESULT JET_Pause
1222*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle)</p>
1223*f81fb7c4SAndroid Build Coastguard Worker
1224*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1225*f81fb7c4SAndroid Build Coastguard Worker
1226*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Pauses playback of the current segment. Call JET_Pause() to
1227*f81fb7c4SAndroid Build Coastguard Workerresume playback.</p>
1228*f81fb7c4SAndroid Build Coastguard Worker
1229*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_ SetMuteFlags</h4>
1230*f81fb7c4SAndroid Build Coastguard Worker
1231*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC EAS_RESULT JET_SetMuteFlags
1232*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle, EAS_U32 muteFlags, EAS_BOOL sync)</p>
1233*f81fb7c4SAndroid Build Coastguard Worker
1234*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'><o:p>&nbsp;</o:p></p>
1235*f81fb7c4SAndroid Build Coastguard Worker
1236*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Modifies the mute flags during playback. If the <i
1237*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-bidi-font-style:normal'>sync</i> parameter is false, the mute flags
1238*f81fb7c4SAndroid Build Coastguard Workerare updated at the beginning of the next render. This means that any new notes
1239*f81fb7c4SAndroid Build Coastguard Workeror controller events will be processed during the next audio frame. If the <i
1240*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-bidi-font-style:normal'>sync</i> parameter is true, the mute flags
1241*f81fb7c4SAndroid Build Coastguard Workerwill be updated at the start of the next segment. If the segment is repeated,
1242*f81fb7c4SAndroid Build Coastguard Workerthe flags will take effect the next time segment is repeated. </p>
1243*f81fb7c4SAndroid Build Coastguard Worker
1244*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_ SetMuteFlag</h4>
1245*f81fb7c4SAndroid Build Coastguard Worker
1246*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC EAS_RESULT JET_SetMuteFlag
1247*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle, EAS_INT trackNum, EAS_BOOL muteFlag, EAS_BOOL sync)</p>
1248*f81fb7c4SAndroid Build Coastguard Worker
1249*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Modifies a mute flag for a single track during playback. If
1250*f81fb7c4SAndroid Build Coastguard Workerthe <i style='mso-bidi-font-style:normal'>sync</i> parameter is false, the mute
1251*f81fb7c4SAndroid Build Coastguard Workerflag is updated at the beginning of the next render. This means that any new
1252*f81fb7c4SAndroid Build Coastguard Workernotes or controller events will be processed during the next audio frame. If
1253*f81fb7c4SAndroid Build Coastguard Workerthe <i style='mso-bidi-font-style:normal'>sync</i> parameter is true, the mute
1254*f81fb7c4SAndroid Build Coastguard Workerflag will be updated at the start of the next segment. If the segment is
1255*f81fb7c4SAndroid Build Coastguard Workerrepeated, the flag will take effect the next time segment is repeated. </p>
1256*f81fb7c4SAndroid Build Coastguard Worker
1257*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_ TriggerClip</h4>
1258*f81fb7c4SAndroid Build Coastguard Worker
1259*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC EAS_RESULT JET_TriggerClip
1260*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle, EAS_INT clipID)</p>
1261*f81fb7c4SAndroid Build Coastguard Worker
1262*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1263*f81fb7c4SAndroid Build Coastguard Worker
1264*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Automatically updates mute flags in sync with the JET Clip
1265*f81fb7c4SAndroid Build Coastguard WorkerMarker (controller 103). The parameter <i style='mso-bidi-font-style:normal'>clipID</i>
1266*f81fb7c4SAndroid Build Coastguard Workermust be in the range of 0-63. After the call to JET_TriggerClip, when JET next
1267*f81fb7c4SAndroid Build Coastguard Workerencounters a controller event 103 with bits 0-5 of the value equal to <i
1268*f81fb7c4SAndroid Build Coastguard Workerstyle='mso-bidi-font-style:normal'>clipID </i>and<i style='mso-bidi-font-style:
1269*f81fb7c4SAndroid Build Coastguard Workernormal'> </i>bit 6 set to 1, it will automatically un-mute the track containing
1270*f81fb7c4SAndroid Build Coastguard Workerthe controller event. When JET encounters the complementary controller event
1271*f81fb7c4SAndroid Build Coastguard Worker103 with bits 0-5 of the value equal to <i style='mso-bidi-font-style:normal'>clipID
1272*f81fb7c4SAndroid Build Coastguard Worker</i>and<i style='mso-bidi-font-style:normal'> </i>bit 6 set to 0, it will mute
1273*f81fb7c4SAndroid Build Coastguard Workerthe track again.</p>
1274*f81fb7c4SAndroid Build Coastguard Worker
1275*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_ GetEvent</h4>
1276*f81fb7c4SAndroid Build Coastguard Worker
1277*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_BOOL JET_GetEvent (EAS_DATA_HANDLE
1278*f81fb7c4SAndroid Build Coastguard WorkereasHandle, EAS_U32 *pEventRaw, S_JET_EVENT *pEvent)</p>
1279*f81fb7c4SAndroid Build Coastguard Worker
1280*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1281*f81fb7c4SAndroid Build Coastguard Worker
1282*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Attempts to read an event from the application event queue,
1283*f81fb7c4SAndroid Build Coastguard Workerreturn EAS_TRUE if an event is found and EAS_FALSE if not. If the application
1284*f81fb7c4SAndroid Build Coastguard Workerpasses a valid pointer for <i style='mso-bidi-font-style:normal'>pEventRaw</i>,
1285*f81fb7c4SAndroid Build Coastguard Workera 32-bit compressed event code is returned. If the application passes a valid
1286*f81fb7c4SAndroid Build Coastguard Workerpointer for <i style='mso-bidi-font-style:normal'>pEvent</i>, the event is
1287*f81fb7c4SAndroid Build Coastguard Workerparsed into the S_JET_EVENT fields. The application can pass NULL for either
1288*f81fb7c4SAndroid Build Coastguard Workerparameter and that variable will be ignored. Normally, the application will
1289*f81fb7c4SAndroid Build Coastguard Workercall JET_GetEvent() repeatedly to retrieve events until it returns EAS_FALSE.</p>
1290*f81fb7c4SAndroid Build Coastguard Worker
1291*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_ ParseEvent</h4>
1292*f81fb7c4SAndroid Build Coastguard Worker
1293*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_PUBLIC void JET_ParseEvent (EAS_U32
1294*f81fb7c4SAndroid Build Coastguard Workerevent, S_JET_EVENT *pEvent)</p>
1295*f81fb7c4SAndroid Build Coastguard Worker
1296*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Parses a 32-bit compressed event code into a data structure.
1297*f81fb7c4SAndroid Build Coastguard WorkerThe application passes the event code received from JET_GetEvent(). The parsed
1298*f81fb7c4SAndroid Build Coastguard Workerevent data is returned in the memory pointed to by <i style='mso-bidi-font-style:
1299*f81fb7c4SAndroid Build Coastguard Workernormal'>pEvent</i>.</p>
1300*f81fb7c4SAndroid Build Coastguard Worker
1301*f81fb7c4SAndroid Build Coastguard Worker<h4>JET_GetAppData</h4>
1302*f81fb7c4SAndroid Build Coastguard Worker
1303*f81fb7c4SAndroid Build Coastguard Worker<p class=Code style='margin-left:0in'>EAS_RESULT JET_GetAppData
1304*f81fb7c4SAndroid Build Coastguard Worker(EAS_DATA_HANDLE easHandle, EAS_I32 *pAppDataOffset, EAS_I32 *pAppDataSize)</p>
1305*f81fb7c4SAndroid Build Coastguard Worker
1306*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>Returns the offset and size of the JAPP chunk in the JET
1307*f81fb7c4SAndroid Build Coastguard Workerfile. The application can use the file I/O functions in the eas_host module to
1308*f81fb7c4SAndroid Build Coastguard Workerretrieve application specific data from the file. </p>
1309*f81fb7c4SAndroid Build Coastguard Worker
1310*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1311*f81fb7c4SAndroid Build Coastguard Worker
1312*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1313*f81fb7c4SAndroid Build Coastguard Worker
1314*f81fb7c4SAndroid Build Coastguard Worker<h2>Creating JET Content</h2>
1315*f81fb7c4SAndroid Build Coastguard Worker
1316*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>JET uses standard MIDI files and DLS files that can be
1317*f81fb7c4SAndroid Build Coastguard Workercreated with commercially available content tools such as Logic, Cubase,
1318*f81fb7c4SAndroid Build Coastguard WorkerDigital Performer, or SONAR for <st1:place w:st="on">MIDI</st1:place> files and
1319*f81fb7c4SAndroid Build Coastguard WorkerAwave for DLS2 files. These source files are then bundled into a .jet package
1320*f81fb7c4SAndroid Build Coastguard Workerfile suitable for use in a JET application. </p>
1321*f81fb7c4SAndroid Build Coastguard Worker
1322*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p>&nbsp;</o:p></p>
1323*f81fb7c4SAndroid Build Coastguard Worker
1324*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal>To create JET file use the �JET Creator� desktop
1325*f81fb7c4SAndroid Build Coastguard Workerapplication. The JET Creator application is written in Python and includes a
1326*f81fb7c4SAndroid Build Coastguard Workerfull graphical interface. It is available for MAC and PC platforms. See �JET
1327*f81fb7c4SAndroid Build Coastguard WorkerCreator User Manual� for more information.</p>
1328*f81fb7c4SAndroid Build Coastguard Worker
1329*f81fb7c4SAndroid Build Coastguard Worker</div>
1330*f81fb7c4SAndroid Build Coastguard Worker
1331*f81fb7c4SAndroid Build Coastguard Worker</body>
1332*f81fb7c4SAndroid Build Coastguard Worker
1333*f81fb7c4SAndroid Build Coastguard Worker</html>
1334