/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġe Al va . com Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . e al va . to que . service . v lc Ċ Ċ import Ġcom . e al va . to que . common . Volume Ċ import Ġorg . vide ol an . lib v lc . MediaPlayer Ċ Ċ const Ġval ĠBUFFER ING _ PERCENT _ TRIGGER _ PRE PARE D Ġ= Ġ 9 0 . 0 Ċ @ Suppress (" NOTH ING _ TO _ INLINE ") Ċ inline Ġfun ĠMedia Player . Event . ample Buffered For Prepare (): ĠBoolean Ġ= ĊĠ Ġbuffer ing Ġ> ĠBUFFER ING _ PERCENT _ TRIGGER _ PRE PARE D Ċ Ċ val ĠMedia Player . Event . is Buffer ing : ĠBoolean ĊĠ Ġinline Ġget () Ġ= Ġtype Ġ== ĠMedia Player . Event . Buffer ing Ċ Ċ /** Ċ Ġ* ĠMap Ġthe Ġvolume Ġvalue Ġused Ġby Ġthe ĠMedia Player Ġto Ġa Ġvalue Ġwhich Ġbetter Ġmatches Ġhuman Ġhe aring . ĠAs Ġof Ċ Ġ* Ġnow Ġthe Ġuser Ġdoes Ġnot Ġdirectly Ġaffect Ġthis Ġvolume . ĠThe Ġuser Ġonly Ġaffects Ġthe Ġstream Ġvolume Ċ Ġ* Ġ( Media Ġvolume Ġpresented Ġto Ġthe Ġuser ) Ġand Ġthis Ġvolume Ġis Ġonly Ġaffected Ġvia Ġtransitions . Ċ Ġ*/ Ċ fun ĠMedia Player . set Mapped Volume ( linear Volume : ĠVolume ) Ġ{ ĊĠ Ġvolume Ġ= Ġlinear To Log Volume Map [ linear Volume (). coerce In ( linear To Log Volume Map . indices )] Ċ } Ċ Ċ /** Ċ Ġ* ĠLinear Ġvolume Ġcontrols Ġare Ġpoor Ġbecause Ġthat 's Ġnot Ġhow Ġour Ġhe aring Ġworks . ĠThis Ġmap Ġconverts Ġthe Ċ Ġ* Ġlinear Ġvolume Ġscale Ġthe Ġmedia Ġplayer Ġuses Ġto Ġa Ġlog arith mic Ġscale Ġour Ġe ars Ġuse . Ċ Ġ* Ġ[ Dec ib els ]( https :// en . wikipedia . org / wiki / Dec ib el ) Ċ Ġ* Ċ Ġ* ĠTo Ġhear Ġthe Ġproblem Ġchange Ġthe Ġ[ MediaPlayer . set Mapped Volume ] Ġto Ġdirectly Ġuse Ġthe Ġlinear Ġvolume Ċ Ġ* Ġwithout Ġmapping , Ġturn Ġthe Ġdevice Ġvolume Ġup Ġ( does n 't Ġneed Ġto Ġbe Ġvery Ġlo ud ), Ġand Ġuse Ġtransition Ċ Ġ* Ġf ades : ĠPause Fade Out Transition , ĠShutdown Fade Out Transition , ĠF ade In Transition , Ġetc ... ĠOn Ġfade Ġout Ċ Ġ* Ġyou Ġshould Ġhear Ġthe Ġvolume Ġdecrease Ġmuch Ġtoo Ġquickly Ġand Ġbe Ġsilent Ġfor Ġtoo Ġlong . ĠF ade Ġin Ġsounds Ċ Ġ* Ġvery Ġsudden Ġtoo . Ċ Ġ* Ċ Ġ* ĠCurrently Ġno Ġreason Ġto Ġcalculate Ġthis Ġat Ġruntime Ġas Ġthere Ġare Ġonly Ġ 1 0 1 Ġdistinct Ġvalues , Ġso Ġthis Ċ Ġ* Ġfunction Ġwas Ġused Ġto Ġcalculate Ġthese Ġvalues : Ċ Ġ* Ġ``` Ċ Ġ* Ġfun Ġlinear To Log ( z : ĠInt ): ĠInt Ġ{ Ċ Ġ* ĠĠ Ġval Ġx Ġ= Ġ 0 . 0 Ċ Ġ* ĠĠ Ġval Ġy Ġ= Ġ 1 0 0 . 0 0 Ċ Ġ* ĠĠ Ġval Ġb Ġ= Ġ( if Ġ( x Ġ> Ġ 0 ) Ġln ( y Ġ/ Ġx ) Ġelse Ġln ( y )) Ġ/ Ġ( y Ġ- Ġx ) Ċ Ġ* ĠĠ Ġval Ġa Ġ= Ġ 1 0 0 Ġ/ Ġexp ( b Ġ* Ġ 1 0 0 ) Ċ Ġ* ĠĠ Ġreturn Ġ( a Ġ* Ġexp ( b Ġ* Ġz )). round ToInt () Ċ Ġ* Ġ} ``` Ċ Ġ*/ Ċ private Ġval Ġlinear To Log Volume Map Ġ= Ġint ArrayOf ( ĊĠĠ 0 , Ġ 1 , Ġ 1 , Ġ 1 , Ġ 1 , Ġ 1 , Ġ 1 , Ġ 1 , Ġ 1 , Ġ 2 , Ġ 2 , Ġ 2 , Ġ 2 , Ġ 2 , Ġ 2 , Ġ 2 , Ġ 2 , Ġ 2 , Ġ 2 , Ġ 2 , Ġ 3 , Ġ 3 , Ġ 3 , Ġ 3 , Ġ 3 , Ġ 3 , Ġ 3 , Ġ 3 , Ġ 4 , Ġ 4 , Ġ 4 , Ġ 4 , Ġ 4 , ĊĠĠ 5 , Ġ 5 , Ġ 5 , Ġ 5 , Ġ 5 , Ġ 6 , Ġ 6 , Ġ 6 , Ġ 7 , Ġ 7 , Ġ 7 , Ġ 8 , Ġ 8 , Ġ 8 , Ġ 9 , Ġ 9 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 1 , Ġ 1 1 , Ġ 1 2 , Ġ 1 3 , Ġ 1 3 , Ġ 1 4 , Ġ 1 4 , Ġ 1 5 , Ġ 1 6 , ĊĠĠ 1 7 , Ġ 1 7 , Ġ 1 8 , Ġ 1 9 , Ġ 2 0 , Ġ 2 1 , Ġ 2 2 , Ġ 2 3 , Ġ 2 4 , Ġ 2 5 , Ġ 2 6 , Ġ 2 8 , Ġ 2 9 , Ġ 3 0 , Ġ 3 2 , Ġ 3 3 , Ġ 3 5 , Ġ 3 6 , Ġ 3 8 , Ġ 4 0 , Ġ 4 2 , Ġ 4 4 , Ġ 4 6 , Ġ 4 8 , ĊĠĠ 5 0 , Ġ 5 2 , Ġ 5 5 , Ġ 5 8 , Ġ 6 0 , Ġ 6 3 , Ġ 6 6 , Ġ 6 9 , Ġ 7 2 , Ġ 7 6 , Ġ 7 9 , Ġ 8 3 , Ġ 8 7 , Ġ 9 1 , Ġ 9 5 , Ġ 1 0 0 Ċ ) Ċ Ċ @ Suppress (" unused ") Ċ private Ġfun ĠMedia Player . Event . asString (): ĠString Ġ{ ĊĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠ ĠMedia Player . Event . Media Changed Ġ-> Ġ" Event . Media Changed " ĊĠĠĠ ĠMedia Player . Event . Opening Ġ-> Ġ" Event . Opening " ĊĠĠĠ ĠMedia Player . Event . Buffer ing Ġ-> Ġ" Event . Buffer ing Ġ$ buffer ing " ĊĠĠĠ ĠMedia Player . Event . Playing Ġ-> Ġ" Event . Playing " ĊĠĠĠ ĠMedia Player . Event . Paused Ġ-> Ġ" Event . Paused " ĊĠĠĠ ĠMedia Player . Event . Stopped Ġ-> Ġ" Event . Stopped " ĊĠĠĠ ĠMedia Player . Event . End Reached Ġ-> Ġ" Event . End Reached " ĊĠĠĠ ĠMedia Player . Event . Encounter ed Error Ġ-> Ġ" Event . Encounter ed Error " ĊĠĠĠ ĠMedia Player . Event . Time Changed Ġ-> Ġ" Event . Time Changed Ġ$ time Changed " ĊĠĠĠ ĠMedia Player . Event . Position Changed Ġ-> Ġ" Event . Position Changed Ġ$ position Changed " ĊĠĠĠ ĠMedia Player . Event . Seek able Changed Ġ-> Ġ" Event . Seek able Changed Ġ$ seek able " ĊĠĠĠ ĠMedia Player . Event . Pa usable Changed Ġ-> Ġ" Event . Pa usable Changed Ġ$ pa usable " ĊĠĠĠ ĠMedia Player . Event . Length Changed Ġ-> Ġ" Event . Length Changed Ġ$ length Changed " ĊĠĠĠ ĠMedia Player . Event . V out Ġ-> Ġ" Event . V out Ġ$ v out Count " ĊĠĠĠ ĠMedia Player . Event . ES Added Ġ-> Ġ" Event . ES Added " ĊĠĠĠ ĠMedia Player . Event . ES Deleted Ġ-> Ġ" Event . ES Deleted " ĊĠĠĠ ĠMedia Player . Event . ES Selected Ġ-> Ġ" Event . ES Selected " ĊĠĠĠ ĠMedia Player . Event . Record Changed Ġ-> Ġ" Event . Record Changed " ĊĠĠĠ Ġelse Ġ-> Ġ" Event . UNKNOWN " ĊĠ Ġ} Ċ } Ċ