package Ġme . s het j . player Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . media . Audio Attributes Ċ import Ġandroid . media . Audio Format Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . media . Audio Track Ċ import Ġandroid . os . Build Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Log Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠP CM éŁ³ é¢ĳ æĴŃæĶ¾ manager Ċ Ġ* Ġ å¿ħé¡» åħĪ è®¾ç½® set Context Ċ Ġ*/ Ċ @ Target Api ( Build . VERSION _ CODES . LO L LI POP ) Ċ object ĠAudio Track Manager Ġ{ ĊĠĠĠ Ġprivate Ġvar ĠPATH : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Audio Track : ĠAudio Track ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠbufferSize : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Audio Manager : ĠAudio Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfile InputStream : ĠFileInputStream ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġis Start Play Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġfun Ġset Context ( context : ĠContext , Ġpath : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Audio Manager Ġ= Ġcontext . getSystem Service ( Context . AUDIO _ SERVICE ) Ġas ĠAudio Manager ĊĠĠĠĠĠĠĠ Ġthis . PATH Ġ= Ġpath ĊĠĠĠĠĠĠĠ ĠLog . i (" Audio Track Manager ", Ġ" set Context : Ġpath Ġ= Ġ$ path ") ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaudio Format Encode Ġ= ĠAudio Format . ENCODING _ PCM _ 1 6 BIT ĊĠĠĠĠĠĠĠ Ġval Ġchannel Config Ġ= ĠAudio Format . CHANNEL _ IN _ STER EO ĊĠĠĠĠĠĠĠ Ġval Ġm Sample Rate Ġ= Ġ 4 4 1 0 0 ĊĊĠĠĠĠĠĠĠ ĠbufferSize Ġ= ĠAudio Track . getMin BufferSize ( m Sample Rate , Ġchannel Config , Ġaudio Format Encode ) ĊĠĠĠĠĠĠĠ Ġval ĠsessionId Ġ= Ġm Audio Manager !!. generate Audio SessionId () ĊĠĠĠĠĠĠĠ Ġval Ġaudio Attributes Ġ= ĠAudio Attributes . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Usage ( Audio Attributes . USAGE _ MEDIA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ContentType ( Audio Attributes . CONTENT _ TYPE _ M US IC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġaudio Format Ġ= ĠAudio Format . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Sample Rate ( m Sample Rate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Encoding ( audio Format Encode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Channel Mask ( channel Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġm Audio Track Ġ= ĠAudio Track ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Attributes , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Format , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbufferSize Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudio Track . MODE _ STREAM , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsessionId ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile InputStream Ġ= ĠFileInputStream ( PATH !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Audio Track Manager ", Ġ" init : Ġ$ e ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Thread () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( PATH )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Start Play Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Thread (). start () ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" PATH Ġnot Ġbe Ġnull , please Ġset Context ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Thread () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Start Play ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Start Play Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Audio Track ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Audio Track ?. release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠPlay Thread Ġ: ĠThread () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Start Play ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( buffer Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Audio Track !!. play () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( file InputStream !!. read ( buffer ) Ġ> Ġ 0 Ġ&& Ġis Start Play ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Audio Track !!. write ( buffer , Ġ 0 , Ġbuffer . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Thread () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Audio Track Manager ", Ġ" IOException Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }