@ file : Suppress (" unused ", Ġ" Replace Java Static Method With Kotlin Analog ") Ċ Ċ package Ġdev . b ass hel al . j rt midi . api Ċ Ċ import Ġjava . util . Arrays Ċ import Ġjava . util . Objects Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa ĠMIDI Ġmessage Ġof Ġarbitrary Ġsize , Ġwraps Ġa Ġ[ ByteArray ] Ġin Ġ[ data ]. Ċ Ġ* Ċ Ġ* ĠAlso Ġcontains Ġuseful ĠMIDI Ġconstants Ġin Ġthe Ġcompanion Ġobject , Ġie Ġas Ġstatic Ġfields . Ċ Ġ* Ċ Ġ* Ġ@ param Ġsize Ġthe Ġ[ size ] Ġof Ġthe Ġ[ Midi Message ] Ġto Ġbegin Ġwith , Ġdefaults Ġto Ġ[ Midi Message . DEFAULT _ DATA _ SIZE ] Ċ Ġ* Ġ@ author ĠB ass am ĠHel al Ċ Ġ*/ Ċ class ĠM idi Message Ċ @ Jvm Over loads Ġconstructor ( size : ĠInt Ġ= ĠDEFAULT _ DATA _ SIZE ) Ġ: ĠIterable < Byte > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ ByteArray ] Ġbacking Ġthis Ġ[ Midi Message ] ĊĠĠĠĠ Ġ* Ġ** WARNING :** Ġany Ġchanges Ġmade Ġto Ġthe Ġarray Ġwill Ġbe Ġreflected Ġin Ġthis Ġ[ Midi Message ] Ġcausing ĊĠĠĠĠ Ġ* Ġunexpected Ġstrange Ġbehavior , Ġif Ġyou Ġplan Ġon Ġmodifying Ġthe Ġreturned Ġarray , ĊĠĠĠĠ Ġ* Ġuse Ġone Ġof Ġthe Ġfunctions Ġthat Ġprovide Ġyou Ġwith Ġa Ġcopy : Ġ[ data Copy ] Ġ, Ġ[ getData Copy ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġdata : ĠByteArray Ġ= ĠByteArray ( size ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġor Ġsets Ġthe Ġsize Ġof Ġthis Ġ[ Midi Message ], ĊĠĠĠĠ Ġ* Ġres izing Ġthis Ġ[ Midi Message ] Ġwill Ġreset Ġthe Ġcontents Ġunless Ġthe Ġrequested Ġsize Ġis Ġequal Ġto Ġthe Ġcurrent Ġsize ĊĠĠĠĠ Ġ* Ġin Ġwhich Ġcase Ġnothing Ġhappens ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġsize : ĠInt Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( value Ġ>= Ġ 0 ) Ġ{ Ġ" Size Ġcannot Ġbe Ġless Ġthan Ġ 0 : Ġ$ value " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . size Ġ< Ġvalue ) Ġdata Ġ= ĠByteArray ( value ) Ġ{ Ġif Ġ( it Ġin Ġdata . indices ) Ġdata [ it ] Ġelse Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCreate Ġa Ġnew Ġ[ Midi Message ] Ġwith Ġthe Ġdata Ġinitialized Ġfrom Ġthe Ġpassed Ġin Ġarray Ġ*/ ĊĠĠĠ Ġconstructor ( data : ĠByteArray ) Ġ: Ġthis ( data . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . setData ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCreate Ġa Ġnew Ġ[ Midi Message ] Ġfrom Ġthe Ġdata Ġof Ġanother Ġ[ midi Message ] Ġ*/ ĊĠĠĠ Ġconstructor ( midi Message : ĠM idi Message ) Ġ: Ġthis ( midi Message . data Copy ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġvalue Ġat Ġ[ index ] Ġto Ġ[ value ] ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException Ġif Ġthe Ġindex Ġis Ġout Ġof Ġbounds ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġset ( index : ĠInt , Ġvalue : ĠByte ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbounds Check ( index ) ĊĠĠĠĠĠĠĠ Ġdata [ index ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġvalue Ġat Ġ[ index ] Ġto Ġ[ value ] ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException Ġif Ġthe Ġindex Ġis Ġout Ġof Ġbounds ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġset ( index : ĠInt , Ġvalue : ĠInt ) Ġ= Ġthis . set ( index , Ġvalue . to Byte ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġvalue Ġat Ġ[ index ] ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException Ġif Ġthe Ġindex Ġis Ġout Ġof Ġbounds ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠByte Ġ{ ĊĠĠĠĠĠĠĠ Ġbounds Check ( index ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdata [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCop ies Ġthe Ġdata Ġfrom Ġ[ data ] Ġuntil Ġ[ length ] Ġinto Ġthis Ġ[ Midi Message ]' s Ġdata ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException Ġif Ġ[ length ] Ġis Ġless Ġthan Ġ 0 Ġor Ġgreater Ġthan Ġ[ data ]' s Ġlength ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetData ( data : ĠByteArray , Ġlength : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ< Ġ 0 Ġ|| Ġlength Ġ> Ġdata . size ) Ġthrow ĠIndex OutOfBoundsException (" Length Ġout Ġof Ġbounds : Ġ$ length ") ĊĠĠĠĠĠĠĠ Ġif Ġ( this . size Ġ< Ġlength ) Ġthis . size Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġdata . copy Into ( this . data , Ġend Index Ġ= Ġlength ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCop ies Ġthe Ġdata Ġfrom Ġ[ data ] Ġinto Ġthis Ġ[ Midi Message ]' s Ġdata Ġ*/ ĊĠĠĠ Ġfun ĠsetData ( data : ĠByteArray ) Ġ= Ġthis . setData ( data , Ġdata . size ) ĊĊĠĠĠ Ġ/** ĠCop ies Ġthe Ġdata Ġfrom Ġ[ midi Message ] Ġinto Ġthis Ġ[ Midi Message ] Ġwithout Ġmodifying Ġ[ midi Message ]' s Ġdata Ġ*/ ĊĠĠĠ Ġfun ĠsetData ( midi Message : ĠM idi Message ) Ġ= Ġthis . setData ( midi Message . data Copy ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġ* copy * Ġof Ġthe Ġ[ data ] Ġof Ġthis Ġ[ Midi Message ] Ġinto Ġthe Ġpassed Ġin Ġ[ buffer ] ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġpassed Ġin Ġ[ buffer ]' s Ġlength Ġis Ġless Ġthan Ġthis Ġ[ size ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetData Copy ( buffer : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( buffer . size Ġ>= Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Passed Ġin Ġbuffer Ġis Ġnot Ġlarge Ġenough Ġto Ġcontain Ġmessage , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" buffer Ġlength : Ġ${ buffer . size } Ġmessage Ġsize : Ġ${ data . size }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . copy Into ( buffer , Ġend Index Ġ= Ġsize ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠGets Ġa Ġ* copy * Ġof Ġthe Ġ[ data ] Ġin Ġthis Ġ[ Midi Message ] Ġ*/ ĊĠĠĠ Ġval Ġdata Copy : ĠByteArray Ġget () Ġ= Ġthis . getData Copy ( ByteArray ( size )) ĊĊĠĠĠ Ġprivate Ġfun Ġbounds Check ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ+ Ġ 1 Ġ> Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException (" Passed Ġin Ġindex : Ġ$ index , Ġgreater Ġthan ĠM idi Message Ġsize Ġof : Ġ$ size " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n Grow ĠM idi Message Ġsize Ġby Ġcalling ĠM idi Message . setSize () ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġiterator () Ġ= Ġobject Ġ: ĠIterator < Byte > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ= Ġindex Ġ< Ġsize ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠByte Ġ= Ġdata [ index ++] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= ĠObjects . hash ( this ) ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġother Ġis ĠM idi Message Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . size Ġ== Ġother . size Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrays . equals ( this . data , Ġ 0 , Ġsize , Ġother . data , Ġ 0 , Ġsize ) ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" Midi Message : Ġ[ ${ this . join ToString ()} ]" ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġdefault Ġsize Ġto Ġcreate Ġa Ġ[ Midi Message ] Ġif Ġnone Ġis Ġspecified Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ DATA _ SIZE Ġ= Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġ// ĠSystem Ġcommon Ġmessages ĊĊĠĠĠĠĠĠĠ Ġ/** ĠStatus Ġbyte Ġfor ĠMIDI ĠTime ĠCode ĠQu arter ĠFrame Ġmessage Ġ( 0 xF 1 , Ġor Ġ 2 4 1 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMIDI _ TIME _ CODE : ĠByte Ġ= Ġ 2 4 1 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠStatus Ġbyte Ġfor ĠSong ĠPosition ĠPointer Ġmessage Ġ( 0 xF 2 , Ġor Ġ 2 4 2 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠS ONG _ POSITION _ POINTER : ĠByte Ġ= Ġ 2 4 2 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠStatus Ġbyte Ġfor ĠMIDI ĠSong ĠSelect Ġmessage Ġ( 0 xF 3 , Ġor Ġ 2 4 3 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠS ONG _ SELECT : ĠByte Ġ= Ġ 2 4 3 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠStatus Ġbyte Ġfor ĠT une ĠRequest Ġmessage Ġ( 0 xF 6 , Ġor Ġ 2 4 6 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠT UNE _ REQUEST : ĠByte Ġ= Ġ 2 4 6 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠStatus Ġbyte Ġfor ĠEnd Ġof ĠSystem ĠEx clusive Ġmessage Ġ( 0 xF 7 , Ġor Ġ 2 4 7 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEND _ OF _ EXCL USIVE : ĠByte Ġ= Ġ 2 4 7 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSystem Ġreal - time Ġmessages ĊĊĠĠĠĠĠĠĠ Ġ/** ĠStatus Ġbyte Ġfor ĠT iming ĠClock Ġmessage Ġ( 0 xF 8 , Ġor Ġ 2 4 8 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTIM ING _ CLOCK : ĠByte Ġ= Ġ 2 4 8 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠStatus Ġbyte Ġfor ĠStart Ġmessage Ġ( 0 xFA , Ġor Ġ 2 5 0 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTART : ĠByte Ġ= Ġ 2 5 0 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠStatus Ġbyte Ġfor ĠContinue Ġmessage Ġ( 0 xF B , Ġor Ġ 2 5 1 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCONTINUE : ĠByte Ġ= Ġ 2 5 1 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠStatus Ġbyte Ġfor ĠStop Ġmessage Ġ( 0 xFC , Ġor Ġ 2 5 2 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTOP : ĠByte Ġ= Ġ 2 5 2 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠStatus Ġbyte Ġfor ĠActive ĠS ensing Ġmessage Ġ( 0 xFE , Ġor Ġ 2 5 4 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACT IVE _ S EN SING : ĠByte Ġ= Ġ 2 5 4 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠStatus Ġbyte Ġfor ĠSystem ĠReset Ġmessage Ġ( 0 xFF , Ġor Ġ 2 5 5 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSYSTEM _ RESET : ĠByte Ġ= Ġ 2 5 5 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ// ĠChannel Ġvoice Ġmessage Ġupper Ġnib ble Ġdefines ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCommand Ġvalue Ġfor ĠNote ĠOff Ġmessage Ġ( 0 x 8 0 , Ġor Ġ 1 2 8 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOTE _ OFF : ĠByte Ġ= Ġ 1 2 8 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCommand Ġvalue Ġfor ĠNote ĠOn Ġmessage Ġ( 0 x 9 0 , Ġor Ġ 1 4 4 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOTE _ ON : ĠByte Ġ= Ġ 1 4 4 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCommand Ġvalue Ġfor ĠPoly ph onic ĠKey ĠPress ure Ġ( After touch ) Ġmessage Ġ( 0 xA 0 , Ġor Ġ 1 6 0 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPOL Y _ PRESS URE : ĠByte Ġ= Ġ 1 6 0 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCommand Ġvalue Ġfor ĠControl ĠChange Ġmessage Ġ( 0 xB 0 , Ġor Ġ 1 7 6 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCONT ROL _ CHANGE : ĠByte Ġ= Ġ 1 7 6 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCommand Ġvalue Ġfor ĠProgram ĠChange Ġmessage Ġ( 0 xC 0 , Ġor Ġ 1 9 2 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPRO GRAM _ CHANGE : ĠByte Ġ= Ġ 1 9 2 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCommand Ġvalue Ġfor ĠChannel ĠPress ure Ġ( After touch ) Ġmessage Ġ( 0 xD 0 , Ġor Ġ 2 0 8 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCHAN NEL _ PRESS URE : ĠByte Ġ= Ġ 2 0 8 . to Byte () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCommand Ġvalue Ġfor ĠP itch ĠB end Ġmessage Ġ( 0 xE 0 , Ġor Ġ 2 2 4 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP ITCH _ B END : ĠByte Ġ= Ġ 2 2 4 . to Byte () ĊĠĠĠ Ġ} Ċ }