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> </o:p></p> 447*f81fb7c4SAndroid Build Coastguard Worker 448*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoHeader><o:p> </o:p></p> 449*f81fb7c4SAndroid Build Coastguard Worker 450*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoHeader><o:p> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </o:p></p> 563*f81fb7c4SAndroid Build Coastguard Worker 564*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </o:p></p> 758*f81fb7c4SAndroid Build Coastguard Worker 759*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </o:p></p> 1311*f81fb7c4SAndroid Build Coastguard Worker 1312*f81fb7c4SAndroid Build Coastguard Worker<p class=MsoNormal><o:p> </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> </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