/* Ċ Ġ* Ġ ĠCopyright Ġ( c ) Ġ 2 0 1 9 - 2 0 2 0 ĠMagic ĠLe ap , ĠInc . ĠAll ĠRights ĠReserved Ċ Ġ* Ċ Ġ* Ġ Ġ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 . mag icle ap . magic script . scene . nodes . audio Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġcom . facebook . react . bridge . Readable Map Ċ import Ġcom . mag icle ap . magic script . scene . nodes . audio . model . Spatial Sound Distance Ċ import Ġcom . mag icle ap . magic script . scene . nodes . audio . model . Spatial Sound Position Ċ import Ġcom . mag icle ap . magic script . scene . nodes . base . Transform Node Ċ import Ġcom . mag icle ap . magic script . utils . File Provider Ċ import Ġcom . mag icle ap . magic script . utils . put Default Ċ import Ġcom . mag icle ap . magic script . utils . read Ċ import Ġcom . mag icle ap . magic script . utils . read FilePath Ċ Ċ open Ġclass ĠAudio Node ( ĊĠĠĠ Ġinit Props : ĠRead able Map , ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġvar Ġaudio Engine : ĠAudio Engine , ĊĠĠĠ Ġprivate Ġval Ġfile Provider : ĠFile Provider Ċ ) Ġ: ĠTransform Node ( init Props , Ġfalse ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROP _ FILE _ NAME Ġ= Ġ" fileName " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROP _ ACTION Ġ= Ġ" action " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROP _ SOUND _ LOOP ING Ġ= Ġ" sound Loop ing " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROP _ SOUND _ M UTE Ġ= Ġ" sound Mute " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROP _ SOUND _ VOLUME _ LINEAR Ġ= Ġ" sound Volume Linear " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROP _ SP AT IAL _ SOUND _ ENABLE Ġ= Ġ" spatial Sound Enable " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROP _ SP AT IAL _ SOUND _ DISTANCE Ġ= Ġ" spatial Sound Distance " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPROP _ SP AT IAL _ SOUND _ POSITION Ġ= Ġ" spatial Sound Position " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ SOUND _ LOOP ING Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ SOUND _ M UTE Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ SP AT IAL _ SOUND _ ENABLE Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġproperties . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Default ( PROP _ SOUND _ LOOP ING , ĠDEFAULT _ SOUND _ LOOP ING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Default ( PROP _ SOUND _ M UTE , ĠDEFAULT _ SOUND _ M UTE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Default ( PROP _ SP AT IAL _ SOUND _ ENABLE , ĠDEFAULT _ SP AT IAL _ SOUND _ ENABLE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġspatial Sound Enabled Ġ= ĠDEFAULT _ SP AT IAL _ SOUND _ ENABLE ĊĠĠĠ Ġprivate Ġvar Ġlast User Action : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun Ġapply Properties ( props : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . apply Properties ( props ) ĊĊĠĠĠĠĠĠĠ Ġapply Values ( props ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( spatial Sound Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Spatial Sound Properties ( props ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġapply Actions ( props ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġfile Provider . on Destroy () ĊĠĠĠĠĠĠĠ Ġaudio Engine . on Destroy () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Host Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Host Pause () ĊĠĠĠĠĠĠĠ Ġaudio Engine . pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Host Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Host Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ( last User Action Ġ== ĠAudio Action . START Ġ|| Ġlast User Action Ġ== ĠAudio Action . RE SU ME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Engine . resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Values ( props : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprops . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread < Boolean >( PROP _ SOUND _ LOOP ING )?. let Ġ{ Ġis Loop ing Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Engine . loop ing ( is Loop ing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġthis . read FilePath ( PROP _ FILE _ NAME , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filePath Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Provider . provide File ( filePath ) Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Engine . load ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġread < Boolean >( PROP _ SP AT IAL _ SOUND _ ENABLE )?. let Ġ{ Ġis Spatial Sound Enabled Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( spatial Sound Enabled Ġ!= Ġis Spatial Sound Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspatial Sound Enabled Ġ= Ġis Spatial Sound Enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Engine . spatial Sound Enabled ( spatial Sound Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġread < Double >( PROP _ SOUND _ VOLUME _ LINEAR )?. let Ġ{ Ġvolume Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Engine . set Sound Volume ( volume . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġread < Boolean >( PROP _ SOUND _ M UTE )?. let Ġ{ Ġis Mut ed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Engine . mute ( is Mut ed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Actions ( props : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġprops . read < String >( PROP _ ACTION ) ĊĠĠĠĠĠĠĠ Ġlast User Action Ġ= Ġaction Ġ?: Ġlast User Action ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Action . STOP Ġ-> Ġaudio Engine . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Action . PAUSE Ġ-> Ġaudio Engine . pause () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Action . RE SU ME Ġ-> Ġaudio Engine . resume () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Action . START Ġ-> Ġaudio Engine . play () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Spatial Sound Properties ( props : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprops . read < Spatial Sound Position >( PROP _ SP AT IAL _ SOUND _ POSITION )?. let Ġ{ Ġspatial Sound Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspatial Sound Position . channel Position ?. let Ġ{ Ġchannel Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Engine . set Sound Object Position ( channel Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprops . read < Spatial Sound Distance >( PROP _ SP AT IAL _ SOUND _ DISTANCE )?. let Ġ{ Ġspatial Sound Distance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Engine . set Sound Object Distance R ollo ff Model ( spatial Sound Distance ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ