package Ġcom . de mon . change voice Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . de mon . change voice . databinding . Activity Sound Touch Binding Ċ import Ġcom . de mon . change voice . record . Play Dialog Fragment Ċ import Ġcom . de mon . sound coding . A mr To W av Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġnet . sur ina . sound touch . Sound Touch Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠSound Touch åıĺ å£° åıª æĶ¯æĮģ . W AV Ċ Ġ*/ Ċ class ĠSound Touch Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Sound Touch Activity " ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Sound Touch Binding ĊĊĠĠĠ Ġprivate Ġvar Ġpitch Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġtempo Ġ= Ġ 1 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġspeed Ġ= Ġ 1 . 0 f ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Sound Touch Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġvar Ġpath Ġ= Ġintent . getString Extra (" path ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" onCreate : Ġ$ path ") ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( path ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" å½ķ éŁ³ æĸĩä»¶ ä¸įåŃĺåľ¨ ï¼Į è¯· éĩįæĸ° å½ķ åĪ¶ ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . endsWith (". am r ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= ĠA mr To W av . make A mr To W av ( path , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Path . text Ġ= Ġ" éŁ³ é¢ĳ æĸĩä»¶ :$ path " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . seek Pitch . setOn Seek Bar ChangeListener ( object Ġ: ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpitch Ġ= Ġ( progress Ġ- Ġ 1 2 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Pitch . text Ġ= Ġ" éŁ³ è°ĥ (- 1 2 ~ 1 2 ) --- å½ĵåīį :$ pitch " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . seek Temp o . setOn Seek Bar ChangeListener ( object Ġ: ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtempo Ġ= Ġprogress . toFloat () Ġ/ Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Temp o . text Ġ= Ġ" éĢŁåº¦ ( 0 ~ 1 0 ) --- å½ĵåīį :$ temp o " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . seek Speed . setOn Seek Bar ChangeListener ( object Ġ: ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Ġ= Ġprogress . toFloat () Ġ/ Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Speed . text Ġ= Ġ" éŁ³ è°ĥ & éĢŁåº¦ ( 0 ~ 1 0 ) --- å½ĵåīį :$ speed " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . button Process . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch IO Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess ( path , Ġget Record FilePath ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæī§è¡Į åıĺ å£° ï¼Į èĢĹ æĹ¶ ï¼Į éľĢè¦ģ åľ¨ åŃĲ çº¿ç¨ĭ ä¸Ń æī§è¡Į ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpath Ġ éŁ³ é¢ĳ æĸĩä»¶ ĊĠĠĠĠ Ġ* Ġ@ param Ġsave Path Ġ åıĺ å£° åĲİ æĸĩä»¶ ä¿ĿåŃĺ è·¯å¾Ħ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġprocess ( path : ĠString , Ġsave Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġst Ġ= ĠSound Touch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġst . set Temp o ( temp o ) Ġ// éĢŁåº¦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġst . set Speed ( speed ) Ġ// éĢŁåº¦ & éŁ³ è°ĥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġst . set Pitch Sem iT ones ( pitch ) Ġ// éŁ³ è°ĥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġst . process File ( path , Ġsave Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch UI Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Change . text Ġ= Ġ" åıĺ å£° è¾ĵåĩº æĸĩä»¶ è·¯å¾Ħ :$ save Path " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlay Dialog Fragment . newInstance ( save Path ). show Allow ing State Loss ( support FragmentManager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( Sound Touch . getError String ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }