package Ġapp . the le ma . android Ċ Ċ import Ġandroid . media . Sound Pool Ċ import Ġapp . the le ma . audio . IS ound Ċ import Ġkotlin . math . abs Ċ Ċ internal Ġclass ĠAndroid Sound ( pool : ĠSound Pool , Ġval Ġsound Id : ĠInt ) Ġ: ĠIS ound Ġ{ ĊĠĠĠ Ġval Ġsound Pool : ĠSound Pool Ġ= Ġpool ĊĠĠĠ Ġval Ġstream Ids Ġ= ĠArrayList < Int >( 8 ) ĊĊĠĠĠ Ġoverride Ġfun Ġplay ( volume : ĠFloat , Ġpitch : ĠFloat , Ġpan : ĠFloat , Ġloop : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stream Ids . size Ġ== Ġ 8 ) Ġstream Ids . remove Last () ĊĊĠĠĠĠĠĠĠ Ġvar Ġleft Volume Ġ= Ġvolume ĊĠĠĠĠĠĠĠ Ġvar Ġright Volume Ġ= Ġvolume ĊĠĠĠĠĠĠĠ Ġif Ġ( pan Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Volume Ġ*= Ġ 1 Ġ- Ġabs ( pan ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pan Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Volume Ġ*= Ġ 1 Ġ- Ġabs ( pan ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstream Id : ĠInt Ġ= Ġsound Pool . play ( sound Id , Ġleft Volume , Ġright Volume , Ġ 1 , Ġif Ġ( loop ) Ġ- 1 Ġelse Ġ 0 , Ġpitch ) ĊĠĠĠĠĠĠĠ Ġ// Ġstandard ise Ġerror Ġcode Ġwith Ġother Ġbackends ĊĠĠĠĠĠĠĠ Ġif Ġ( stream Id Ġ== Ġ 0 ) Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġstream Ids . add ( 0 , Ġstream Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġstream Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġstream Ids . size ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsound Pool . stop ( stream Ids [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop ( sound Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsound Pool . stop ( sound Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsound Pool . auto Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpause ( sound Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsound Pool . pause ( sound Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsound Pool . auto Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresume ( sound Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsound Pool . resume ( sound Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Pitch ( sound Id : ĠInt , Ġpitch : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsound Pool . set Rate ( sound Id , Ġpitch ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Volume ( sound Id : ĠInt , Ġvolume : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsound Pool . set Volume ( sound Id , Ġvolume , Ġvolume ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġloop ( volume : ĠFloat Ġ= Ġ 1 f ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stream Ids . size Ġ== Ġ 8 ) Ġstream Ids . remove Last () ĊĠĠĠĠĠĠĠ Ġval Ġstream Id : ĠInt Ġ= Ġsound Pool . play ( sound Id , Ġvolume , Ġvolume , Ġ 1 , Ġ- 1 , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġ// Ġstandard ise Ġerror Ġcode Ġwith Ġother Ġbackends ĊĠĠĠĠĠĠĠ Ġif Ġ( stream Id Ġ== Ġ 0 ) Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġstream Ids . add ( 0 , Ġstream Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġstream Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Loop ing ( sound Id : ĠInt , Ġlooping : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstream Id Ġ= Ġsound Id ĊĠĠĠĠĠĠĠ Ġsound Pool . pause ( stream Id ) ĊĠĠĠĠĠĠĠ Ġsound Pool . set Loop ( stream Id , Ġif Ġ( loop ing ) Ġ- 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġsound Pool . resume ( stream Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Pan ( sound Id : ĠInt , Ġpan : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ċ // ĠĠĠĠĠĠĠ Ġvar Ġleft Volume Ġ= Ġvolume Ċ // ĠĠĠĠĠĠĠ Ġvar Ġright Volume Ġ= Ġvolume Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( pan Ġ< Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġright Volume Ġ*= Ġ 1 Ġ- Ġabs ( pan ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pan Ġ> Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġleft Volume Ġ*= Ġ 1 Ġ- Ġabs ( pan ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġsound Pool . set Volume ( sound Id , Ġleft Volume , Ġright Volume ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġplay ( volume : ĠFloat , Ġpitch : ĠFloat , Ġpan : ĠFloat ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stream Ids . size Ġ== Ġ 8 ) Ġstream Ids . remove Last () ĊĠĠĠĠĠĠĠ Ġvar Ġleft Volume Ġ= Ġvolume ĊĠĠĠĠĠĠĠ Ġvar Ġright Volume Ġ= Ġvolume ĊĠĠĠĠĠĠĠ Ġif Ġ( pan Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Volume Ġ*= Ġ 1 Ġ- Ġabs ( pan ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pan Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Volume Ġ*= Ġ 1 Ġ- Ġabs ( pan ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstream Id : ĠInt Ġ= Ġsound Pool . play ( sound Id , Ġleft Volume , Ġright Volume , Ġ 1 , Ġ 0 , Ġpitch ) ĊĠĠĠĠĠĠĠ Ġ// Ġstandard ise Ġerror Ġcode Ġwith Ġother Ġbackends ĊĠĠĠĠĠĠĠ Ġif Ġ( stream Id Ġ== Ġ 0 ) Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġstream Ids . add ( 0 , Ġstream Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġstream Id . to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġloop ( volume : ĠFloat , Ġpitch : ĠFloat , Ġpan : ĠFloat ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stream Ids . size Ġ== Ġ 8 ) Ġstream Ids . remove Last () ĊĠĠĠĠĠĠĠ Ġvar Ġleft Volume Ġ= Ġvolume ĊĠĠĠĠĠĠĠ Ġvar Ġright Volume Ġ= Ġvolume ĊĠĠĠĠĠĠĠ Ġif Ġ( pan Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Volume Ġ*= Ġ 1 Ġ- Ġabs ( pan ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pan Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Volume Ġ*= Ġ 1 Ġ- Ġabs ( pan ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstream Id : ĠInt Ġ= Ġsound Pool . play ( sound Id , Ġleft Volume , Ġright Volume , Ġ 1 , Ġ- 1 , Ġpitch ) ĊĠĠĠĠĠĠĠ Ġ// Ġstandard ise Ġerror Ġcode Ġwith Ġother Ġbackends ĊĠĠĠĠĠĠĠ Ġif Ġ( stream Id Ġ== Ġ 0 ) Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġstream Ids . add ( 0 , Ġstream Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġstream Id . to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsound Pool . unload ( sound Id ) ĊĠĠĠ Ġ} Ċ }