package Ġcom . ky ant . pixel music . locals Ċ Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . runtime . snapshots . Snapshot State List Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġcom . ky ant . pixel music . util . normalize Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . client . engine . c io .* Ċ import Ġio . ktor . client . request .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġl inc . com . amp lit uda . Amp lit uda Ċ Ċ type alias ĠAmp litude s Ġ= ĠSnapshot State List < Double > Ċ Ċ val ĠLocal Amp litude s Ġ= ĊĠĠĠ Ġcomposition Local Of < Amp litude s > Ġ{ Ġerror (" Composition Local ĠLocal Amp litude s Ġnot Ġpresent ") Ġ} Ċ Ċ @ Composable Ċ fun ĠProvide Amp litude s ( ĊĠĠĠ Ġenabled : ĠBoolean , ĊĠĠĠ Ġcontent : Ġ@ Composable Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠĠĠ Ġval Ġamp lit uda Ġ= ĠAmp lit uda ( context ) ĊĠĠĠ Ġval Ġsong Ġ= ĠLocal Now Playing . current ĊĠĠĠ Ġval Ġamplitude s : ĠAmp litude s Ġ= Ġremember ( song . id ) Ġ{ Ġmutable State ListOf () Ġ} ĊĊĠĠĠ Ġif Ġ( enabled ) Ġ{ ĊĠĠĠĠĠĠĠ ĠProvide Cache DataStore (" songs ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Store Ġ= ĠLocal Cache DataStore . current ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLa unched Effect ( song . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . write While NotExist ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong . id . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttpClient ( C IO ). get < ByteArray >( song . media Url . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong . id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamp lit uda . from Path ( data Store . require Path ( it . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. amplitude s As List Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġposition Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccurate Step Ġ= Ġ 3 8 . 3 Ġ/ Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= Ġaccurate Step . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ( list . size Ġ/ Ġaccurate Step ). toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmean Ġ= Ġlist . slice ( position .. position Ġ+ Ġstep ). average () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamplitude s . plus Assign ( mean . normalize ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠComp osition Local Provider ( Local Amp litude s Ġprovides Ġamplitude s , Ġcontent Ġ= Ġcontent ) Ċ }