package Ġcom . m visual izer Ċ Ċ import Ġcontrol P 5 . Control P 5 Ċ import Ġd df . minim . Min im Ċ import Ġd df . minim . analysis . FFT Ċ import Ġorg . apache . commons . io . Filename Utils Ċ import Ġprocessing . core . P App let Ċ import Ġjava . awt . FileDialog Ċ import Ġjava . awt . Frame Ċ import Ġjava . awt . event . KeyEvent Ċ import Ġjava . lang . Math . sign um Ċ import Ġjavax . swing . JOptionPane Ċ import Ġjavax . swing . UI Manager Ċ import Ġjava . awt . EventQueue Ċ import Ġkotlin . collections . ArrayList Ċ import Ġjava . io . File Ċ import Ġcom . m visual izer . MS ong . F Type ĊĊ Ċ class ĠVisual izer Ġ: ĠP App let () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġsurface . setTitle (" M Visualizer Ġ: D ") ĊĠĠĠĠĠĠĠ Ġsurface . setResizable ( true ) ĊĠĠĠĠĠĠĠ Ġsurface . set Frame Rate ( 8 5 f ) ĊĠĠĠĠĠĠĠ Ġsurface . setIcon ( load Image ( icon File )) ĊĊĠĠĠĠĠĠĠ Ġstroke Cap ( S QUARE ) ĊĠĠĠĠĠĠĠ Ġnoise Detail ( 1 , Ġ 0 . 9 5 f ) ĊĊĠĠĠĠĠĠĠ Ġcp 5 Ġ= ĠControl P 5 ( this ) ĊĠĠĠĠĠĠĠ ĠControls . setup Controls () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsettings () Ġ{ ĊĠĠĠĠĠĠĠ Ġminim Ġ= ĠMin im ( this ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( MV _ DEBUG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminim . debug On () ĊĊĠĠĠĠĠĠĠ ĠControls . visual izer Ref Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġsize ( 9 0 0 , Ġ 8 4 0 , ĠJAVA 2 D ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminim . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . stop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( initial Song Loaded ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Loop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwelcome () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ){ E Exception . set ( e )} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġnum Bars Ġ= Ġ 1 0 ĊĠĠĠ Ġvar Ġt Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġfun Ġwelcome () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġamplitude Ġ= Ġheight Ġ/ Ġ 1 2 ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġheight Ġ/ Ġ 1 0 ĊĊĠĠĠĠĠĠĠ Ġbackground ( 0 ) ĊĠĠĠĠĠĠĠ Ġstroke ( 2 5 5 ) ĊĊĠĠĠĠĠĠĠ Ġtext Size ( 2 6 f ) ĊĠĠĠĠĠĠĠ ĠtextAlign ( CENTER ) ĊĠĠĠĠĠĠĠ Ġfill ( 2 5 5 ) ĊĠĠĠĠĠĠĠ Ġtext (" M Visualizer ĠWave , ĠListen ĠOn !", Ġwidth / 2 f , Ġheight - 5 0 f ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġnum Bars ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġi Ġ* Ġ( width Ġ/ Ġnum Bars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 1 Ġ= Ġheight Ġ/ Ġ 2 Ġ- Ġ( offset Ġ+ Ġamplitude Ġ* Ġsin ( t Ġ+ Ġi )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 2 Ġ= Ġheight Ġ/ Ġ 2 Ġ+ Ġ( offset Ġ+ Ġamplitude Ġ* Ġcos ( t Ġ+ Ġi )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Weight ( 9 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline ( x . toFloat (), Ġy 1 , Ġx . toFloat (), Ġy 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġt Ġ+= Ġ 0 . 0 4 f ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġmain Loop () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġwhen Ġthese Ġtwo Ġvalues Ġboth Ġequal Ġfalse , Ġthen Ġthe Ġsong Ġhas Ġfinished ĊĠĠĠĠĠĠĠĠ Ġ* Ġif Ġthe Ġplayer Ġwas Ġpaused Ġthen Ġplayer . is Playing Ġ= Ġfalse Ġand Ġis Paused Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠ Ġ* Ġif Ġthe Ġuser Ġun - pause s Ġthe Ġsong Ġthen Ġplayer . is Playing Ġ= Ġtrue Ġand Ġis Paused Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠ Ġ* Ġso Ġif Ġthe Ġsong Ġisn 't Ġpaused Ġand Ġthe Ġposition Ġof Ġthe Ġplayer 's Ġaudio Ġbuffer Ġhits Ġits Ġlimit , ĊĠĠĠĠĠĠĠĠ Ġ* Ġplayer . is Playing Ġwill Ġbe Ġset Ġto Ġfalse Ġand Ġthen Ġboth Ġvalues Ġwill Ġbe Ġfalse ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġsong Finished : ĠBoolean Ġ= Ġplayer . is Playing Ġ== Ġis Paused ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Music List . vis ListModel . isEmpty Ġ&& Ġsong Finished ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Song : ĠMS ong Ġ= ĠMusic List . vis ListModel . poll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Song ( next Song ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( Music List . vis ListModel . isEmpty Ġ&& Ġsong Finished Ġ&& Ġplayer Not Closed ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Not Closed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Closed ĠPlayer : Ġ${ ! player Not Closed }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfft . forward ( player . mix ) ĊĊĠĠĠĠĠĠĠ Ġbackground ( 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( draw Background ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ( 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Back Ground ( background Step ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshow Song Time () ĊĠĠĠĠĠĠĠ Ġsmooth Pulse () ĊĠĠĠĠĠĠĠ Ġvisualize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvisualize () Ġ{ ĊĠĠĠĠĠĠĠ Ġc Amp litude Ġ= Ġl erp ( c Amp litude , Ġsmoothing Ġ* Ġfft . calc Avg ( 1 0 f , Ġ 1 2 0 f ), Ġ. 1 f ) ĊĠĠĠĠĠĠĠ Ġel lipse R Ġ= Ġconstr ain ( c Amp litude Ġ* Ġb ass Kick , Ġ 0 . 1 f , Ġcircle Radius Ġ* Ġ 6 5 . 0 f ) ĊĠĠĠĠĠĠĠ Ġmax Draw Height Ġ= Ġ( height Ġ/ Ġ 2 ) Ġ* Ġ 0 . 2 5 f ĊĠĠĠĠĠĠĠ Ġspectrum Scale Factor Ġ= Ġmax Val Ġ- Ġmin Val Ġ+ Ġ 0 . 0 0 0 0 1 f ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( visual Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġcircular Pulse () ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġsignal () ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġinverse () ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġfunction Music () ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġdot Wave () ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġb ass N ation Pulse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsmooth Pulse () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġfft . spec Size ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġavg Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSm ooth Ġusing Ġexponential Ġmoving Ġaverage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfft Smooth [ i ] Ġ= Ġsmoothing Ġ* Ġfft Smooth [ i ] Ġ+ Ġ( 1 Ġ- Ġsmoothing ) Ġ* Ġfft . get Avg ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFind Ġmax Ġand Ġmin Ġvalues Ġever Ġdisplayed Ġacross Ġwhole Ġspectrum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fft Smooth [ i ] Ġ> Ġmax Val ) Ġmax Val Ġ= Ġfft Smooth [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fft Smooth [ i ] Ġ< Ġmin Val ) Ġmin Val Ġ= Ġfft Smooth [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcircular Pulse () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* no Fill () ĊĠĠĠĠĠĠĠ Ġstroke ( 0 f , 0 f , 2 5 5 f ) ĊĠĠĠĠĠĠĠ Ġstroke Weight ( stroke Weight ) ĊĠĠĠĠĠĠĠ Ġstroke Join ( ROUND ) ĊĊĠĠĠĠĠĠĠ Ġbegin Shape () ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġavg Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġi . toFloat () Ġ* Ġang Offset Ġ* Ġ 2 f Ġ* ĠPI Ġ/ Ġavg Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamp Ġ= Ġmax Draw Height Ġ* Ġ(( amplitude Ġ* Ġfft Smooth [ i ] Ġ- Ġmin Val ) Ġ/ Ġspectrum Scale Factor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrad Ġ= Ġcircle Radius Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( rad Ġ+ Ġamp ) Ġ* Ġcos ( angle ) Ġ+ Ġ. 8 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġ( rad Ġ+ Ġamp ) Ġ* Ġsin ( angle ) Ġ+ Ġ. 8 5 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertex ( x Ġ+ Ġwidth Ġ/ Ġ 2 , Ġy Ġ+ Ġheight Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġbar Step ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġend Shape ( CLOSE ) */ ĊĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġavg Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġi . toFloat () Ġ* Ġang Offset Ġ* Ġ 2 f Ġ* ĠPI Ġ/ Ġavg Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfft Smooth Display Ġ= Ġmax Draw Height Ġ* Ġ(( amplitude Ġ* Ġfft Smooth [ i ] Ġ- Ġmin Val ) Ġ/ Ġspectrum Scale Factor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrad Ġ= Ġcircle Radius Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġrad Ġ* Ġcos ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġrad Ġ* Ġsin ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 2 Ġ= Ġ( rad Ġ+ Ġfft Smooth Display ) Ġ* Ġcos ( angle ) Ġ+ Ġ. 8 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 2 Ġ= Ġ( rad Ġ+ Ġfft Smooth Display ) Ġ* Ġsin ( angle ) Ġ+ Ġ. 8 5 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// int Ġc Ġ= Ġ( int ) Ġmap ( i , Ġ 0 , Ġfft . spec Size (), Ġ 0 , Ġ 4 7 0 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġmap ( i . toFloat (), Ġ 0 f , Ġfft . spec Size (). toFloat (), Ġ 0 f , Ġ 2 7 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Mode ( H SB ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ( c , Ġ 2 5 5 f , Ġ 2 5 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Weight ( stroke Weight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline ( x Ġ+ Ġwidth Ġ/ Ġ 2 , Ġy Ġ+ Ġheight Ġ/ Ġ 2 , Ġx 2 Ġ+ Ġwidth Ġ/ Ġ 2 , Ġy 2 Ġ+ Ġheight Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġbar Step ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġno Stroke () ĊĠĠĠĠĠĠĠ Ġfill ( lerp ( 0 f , Ġmap ( ellipse R , Ġ 0 f , Ġcircle Radius Ġ* Ġ 3 Ġ- Ġ 5 0 , Ġ 0 f , Ġ 2 5 5 f ), Ġ. 2 3 f ), Ġ 2 5 5 f , Ġ 2 5 5 f ) ĊĠĠĠĠĠĠĠ Ġel lipse ( width Ġ/ Ġ 2 f , Ġheight Ġ/ Ġ 2 f , Ġel lipse R , Ġel lipse R ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsignal () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġavg Size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 1 Ġ= Ġmap ( i . toFloat (), Ġ 0 f , Ġavg Size . toFloat (), Ġ 0 f , Ġwidth . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 2 Ġ= Ġmap (( i Ġ+ Ġ 1 ). toFloat (), Ġ 0 f , Ġavg Size . toFloat (), Ġ 0 f , Ġwidth . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamp Ġ= Ġmax Draw Height Ġ* Ġ(( amplitude Ġ* Ġfft Smooth [ i ] Ġ- Ġmin Val ) Ġ/ Ġspectrum Scale Factor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġheight Ġ/ Ġ 2 f Ġ- Ġ 2 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġmap ( i . toFloat (), Ġ 0 f , Ġfft . spec Size (). toFloat (), Ġ 0 f , Ġ 2 8 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ( c , Ġ 2 5 5 f , Ġ 2 5 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Weight ( stroke Weight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline ( x 1 , Ġy Ġ+ Ġamp , Ġx 2 , Ġy Ġ- Ġamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġbar Step ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinverse () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġavg Size Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 1 Ġ= Ġmap ( i . toFloat (), Ġ 0 f , Ġsize . toFloat (), Ġ 0 f , Ġwidth . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 2 Ġ= Ġmap (( i Ġ+ Ġ 1 ). toFloat (), Ġ 0 f , Ġsize . toFloat (), Ġ 0 f , Ġwidth . toFloat ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 3 Ġ= Ġmap ( i . toFloat (), Ġ 0 f , Ġsize . toFloat (), Ġwidth . toFloat (), Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 4 Ġ= Ġmap (( i Ġ+ Ġ 1 ). toFloat (), Ġ 0 f , Ġsize . toFloat (), Ġwidth . toFloat (), Ġ 0 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamp Ġ= Ġmax Draw Height Ġ* Ġ(( amplitude Ġ* Ġfft Smooth [ i ] Ġ- Ġmin Val ) Ġ/ Ġspectrum Scale Factor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġheight Ġ/ Ġ 2 f Ġ- Ġ 2 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġmap ( i . toFloat (), Ġ 0 f , Ġfft . spec Size (). toFloat (), Ġ 0 f , Ġ 2 7 5 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ( c , Ġ 2 5 5 f , Ġ 2 5 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Weight ( stroke Weight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline ( x 1 , Ġy , Ġx 2 , Ġy Ġ+ Ġamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline ( x 3 , Ġy , Ġx 4 , Ġy Ġ- Ġamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġbar Step ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfunction Music () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġavg Size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamp Ġ= Ġmax Draw Height Ġ* Ġ(( amplitude Ġ* Ġfft Smooth [ i ] Ġ- Ġmin Val ) Ġ/ Ġspectrum Scale Factor ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 1 Ġ= Ġmap ( i . toFloat (), Ġ 0 f , Ġavg Size . toFloat (), Ġ 0 f , Ġwidth . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 2 Ġ= Ġmap (( i Ġ+ Ġ 1 ). toFloat (), Ġ 0 f , Ġavg Size . toFloat (), Ġ 0 f , Ġwidth . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 1 Ġ= Ġ- music Transform ( x 1 ) Ġ+ Ġheight Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 2 Ġ= Ġ- music Transform ( x 2 ) Ġ+ Ġheight Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= Ġmap ( i . toFloat (), Ġ 0 f , Ġfft . spec Size (). toFloat (), Ġ 0 f , Ġ 2 7 5 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ( c 1 , Ġ 2 5 5 f , Ġ 2 5 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Weight ( stroke Weight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline ( 1 . 7 f Ġ* Ġx 1 , Ġy 1 Ġ+ Ġamp , Ġ 1 . 7 f Ġ* Ġx 2 , Ġy 2 Ġ- Ġamp ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġbar Step ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġangle Ġ+= Ġ 0 . 0 1 5 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmusic Transform ( x : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( transform Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ 7 5 f Ġ* Ġsin (. 0 1 5 f Ġ* Ġx Ġ+ Ġangle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġ 3 2 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ġ* Ġ( x Ġ- Ġa ) Ġ* Ġsign um ( a Ġ- Ġx ) Ġ+ Ġm Ġ* Ġa Ġ- Ġheight Ġ/ Ġ 2 Ġ+ Ġ 6 0 Ġ* Ġsin (. 0 8 f Ġ* Ġx Ġ+ Ġangle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ 6 0 f Ġ* Ġsin ( 2 Ġ* Ġsin ( 2 Ġ* Ġsin ( 2 Ġ* Ġsin ( 2 Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsin ( 2 Ġ* Ġsin ( 2 Ġ* Ġsin ( 2 Ġ* Ġsin (. 0 3 2 f Ġ* Ġx )))) )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġpow (. 0 2 f Ġ* Ġx , Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 7 5 f Ġ* Ġsin (. 0 1 5 f Ġ* Ġx Ġ+ Ġangle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdot Wave (){ ĊĠĠĠĠĠĠĠ Ġval Ġspace Ġ= Ġbackground Step ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ- 2 Ġ* Ġspace ĊĊĠĠĠĠĠĠĠ Ġvar Ġrx : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġry : ĠFloat ĊĊĠĠĠĠĠĠĠ Ġval Ġrt Ġ= Ġ 4 0 0 f ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġ 1 f ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġwidth Ġ+ Ġspace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġj Ġ= Ġ- 2 Ġ* Ġspace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcx Ġ= Ġi . toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( j Ġ< Ġheight Ġ+ Ġspace ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcy Ġ= Ġj . toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġt Ġ= Ġmillis () Ġ/ Ġrt ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ+= Ġcos ( abs ( 1 Ġ- Ġcx Ġ/ Ġ( width Ġ/ Ġ 2 ))) Ġ* Ġ ĠTWO _ PI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ+= Ġcos ( abs ( 1 Ġ- Ġcy Ġ/ Ġ( height Ġ/ Ġ 2 ))) Ġ* ĠTWO _ PI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ+= Ġoffset ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrx Ġ= Ġsin ( t ) Ġ* Ġ( size Ġ+ Ġmap ( ellipse R , Ġ 0 f , Ġcircle Radius Ġ* Ġ 1 . 8 5 f Ġ- Ġ 3 0 , Ġ 0 f , Ġ 2 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// rx Ġ= Ġ( cos ( t ) Ġ+ Ġsin ( 4 * t )) Ġ* Ġ( size Ġ+ Ġmap ( ellipse R , Ġ 0 f , Ġcircle Radius Ġ* Ġ 1 . 8 5 f Ġ- Ġ 3 0 , Ġ 0 f , Ġ 2 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġry Ġ= Ġrx ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rx Ġ> Ġ 0 Ġ&& Ġry Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Stroke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill ( lerp ( 0 f , Ġdist ( cx , Ġcy , Ġwidth Ġ/ Ġ 2 f , Ġheight Ġ/ Ġ 2 f ), Ġ. 2 5 f ), Ġ 2 5 5 f , Ġ 2 5 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Style () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect Mode ( CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect ( cx , Ġcy , Ġrx , Ġry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Style () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ellipse ( cx , Ġcy , Ġrx , Ġry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj Ġ+= Ġspace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġspace ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġb ass N ation Pulse () Ġ{ ĊĠĠĠĠĠĠĠ Ġpush Matrix () ĊĠĠĠĠĠĠĠ Ġtranslate ( width Ġ/ Ġ 2 f , Ġheight Ġ/ Ġ 2 f ) ĊĊĠĠĠĠĠĠĠ Ġval Ġb ass Ġ= Ġb ass Kick Ġ* Ġfloor ( fft Smooth [ 1 ]) ĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġ 0 . 7 5 f Ġ* Ġ-( circle Radius Ġ* Ġ 2 Ġ+ Ġb ass Ġ* Ġ 0 . 2 5 f ) ĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġ 0 . 7 5 f Ġ* Ġamplitude ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ Ġavg Size ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamp Ġ= Ġfft Smooth [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġa Ġ= Ġ-( ang Offset Ġ/ Ġ 1 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġ-( 6 0 f Ġ/ Ġ 1 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠPI Ġ/ Ġ 1 8 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġa Ġ* Ġb ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Mode ( H SB ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġmap ( i . toFloat (), Ġ 0 f , Ġavg Size . toFloat (), Ġ 0 f , Ġ 2 7 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill ( c , Ġ 2 5 5 f , Ġ 2 5 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect ( 0 f , Ġradius , Ġ 2 f , Ġ- amp Ġ* Ġscale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ Ġavg Size ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamp Ġ= Ġfft Smooth [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġa Ġ= Ġang Offset Ġ/ Ġ 1 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġ 6 0 f Ġ/ Ġ 1 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠPI Ġ/ Ġ 1 8 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate ( a Ġ* Ġb ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Mode ( H SB ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġmap ( i . toFloat (), Ġavg Size . toFloat (), Ġ 0 f , Ġ 2 7 5 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill ( c , Ġ 2 5 5 f , Ġ 2 5 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect ( 0 f , Ġradius , Ġ 2 f , Ġ- amp Ġ* Ġscale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpop Matrix () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Song Time () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Sound Cloud Source ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmillis Ġ= Ġplayer . position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Ġ= Ġ( millis Ġ/ Ġ 1 0 0 0 ) Ġ% Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminute Ġ= Ġ( millis Ġ/ Ġ( 1 0 0 0 Ġ* Ġ 6 0 )) Ġ% Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour Ġ= Ġ( millis Ġ/ Ġ( 1 0 0 0 Ġ* Ġ 6 0 Ġ* Ġ 6 0 )) Ġ% Ġ 2 4 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"$ name Of Song Ġ- Ġ${ String . format ("% 0 2 d :% 0 2 d :% 0 2 d ", Ġhour , Ġminute , Ġsecond )}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface . setTitle ( title ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos x Ġ= Ġmap ( player . position (). toFloat (), Ġ 0 f , Ġplayer . length (). toFloat (), Ġ 0 f , Ġwidth . toFloat ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Style () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Stroke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Mode ( H SB ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill ( map ( player . position (). toFloat (), Ġ 0 f , Ġplayer . length (). toFloat (), Ġ 0 f , Ġ 2 5 5 f ), Ġ 2 5 5 f , Ġ 2 5 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect ( 0 f , Ġ 0 f , Ġpos x , Ġ 1 4 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpop Style () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Released () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mouse Y Ġin Ġ 0 .. 1 4 Ġ&& Ġ! is Sound Cloud Source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . cue ( map ( mouse X . toFloat (), Ġ 0 f , Ġwidth . toFloat (), Ġ 0 f , Ġplayer . length (). toFloat ()). toInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Back Ground ( step : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġstep ĊĠĠĠĠĠĠĠ Ġwhile Ġ( x Ġ< Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( y Ġ< Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġnoise ( x Ġ* Ġ 0 . 0 0 5 f , Ġy Ġ* Ġ 0 . 0 0 7 f , Ġframe Count Ġ* Ġ 0 . 0 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Matrix () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( x . toFloat (), Ġy . toFloat ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// rotate ( TWO _ PI Ġ* Ġn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale ( map ( ellipse R , Ġ 0 f , Ġcircle Radius Ġ* Ġ 1 . 8 5 f Ġ- Ġ 3 0 , Ġ 0 f , Ġ 1 5 f ) Ġ* Ġn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Weight (. 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill ( 2 5 5 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 1 Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 1 Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġ. 8 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġ. 8 f ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle ( x 1 , Ġy 1 , Ġx 1 Ġ+ Ġw Ġ/ Ġ 2 , Ġy 1 Ġ- Ġh , Ġx 1 Ġ+ Ġw , Ġy 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// triangle ( 0 f ,. 1 f , Ġ. 1 f ,) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// rect ( 0 f , Ġ 0 f , Ġ. 8 f , Ġ. 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Matrix () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġstep ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġto Ġload Ġin Ġsongs Ġto Ġthe Ġaudio Ġplayer . ĊĠĠĠĠ Ġ* ĠLoads Ġlocal Ġfiles Ġas Ġwell Ġas Ġsound cloud Ġtracks ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload Song ( music Obj : ĠMS ong , Ġis Setup : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis SC loud Src Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// make Ġsure Ġthat Ġboolean Ġvalues Ġdon 't Ġconflict Ġin Ġmain Loop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Paused ) Ġtoggle Play () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Setup Ġ&& Ġplayer Initialized ) Ġplayer . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( music Obj . type Ġ== ĠF Type . File ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Of Song Ġ= Ġmusic Obj . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= Ġminim . load File ( music Obj . path , ĠbufferSize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( music Obj . type Ġ== ĠF Type . SC Track ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis SC loud Src Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Of Song Ġ= Ġmusic Obj . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface . setTitle ( name Of Song ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= Ġminim . load File ( IS ound Cloud . getFull Stream Url ( music Obj . path ), ĠbufferSize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfft Ġ= ĠFFT ( player . buffer Size (), Ġplayer . sample Rate ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfft . log Average s ( min Bandwidth , Ġbands Per Oct ave ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfft . window ( FFT . G AU SS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġavg Size Ġ= Ġfft . avg Size () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfft Smooth Ġ= ĠFloat Array ( avg Size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Sound Cloud Source Ġ= Ġis SC loud Src ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Not Closed Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . gain Ġ= Ġmusic Gain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . play () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMusic List . set Now Playing ( name Of Song ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġwe 've Ġgotten Ġhere Ġthen Ġthe Ġsong Ġhas Ġloaded Ġsuccessfully ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// so Ġwe Ġshould Ġlet Ġthe Ġprogram Ġknow Ġthat Ġan Ġinitial Ġsong Ġis Ġplaying Ġso Ġrun Ġthe Ġawesome ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// graphics Ġinstead Ġof Ġa Ġblack Ġscreen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! initial Song Loaded ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Song Loaded Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// since Ġwe 're Ġplaying Ġa Ġsong Ġnow , Ġwhen Ġthe Ġsong Ġstops Ġand Ġit 's Ġtime Ġto Ġplay Ġanother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// it 's Ġnow Ġok Ġto Ġclose Ġthe Ġaudio Ġplayer Ġbecause Ġthe Ġvariable Ġhas Ġbeen Ġinitialized , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// otherwise Ġan Ġinitialization Ġexception Ġwill Ġbe Ġthrown ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! player Initialized ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Initialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ E Exception . append ( e )} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġkey Released () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . key Released () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ' q ') ĠEvent Queue . invoke Later Ġ{ ĠInstructions Window . getInstance ( null ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ' c ') Ġchange Transform () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ' n ') ĠMusic List . next Song () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ' m ') Ġtoggle Mute () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ' t ') ĠEvent Queue . invoke Later Ġ{ ĠMusic List . getInstance () Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ' s ') Ġtoggle Background () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ' x ') Ġchange Visual () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ' z ') ĠEvent Queue . invoke Later Ġ{ ĠE Exception . getInstance ( null ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . VK _ SPACE ) Ġtoggle Play () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ' v ') Ġadd S ongs ( file Chooser ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(( key Event . is Shift Down Ġ&& Ġkey Event . is Control Down ) Ġ&& ĠkeyCode Ġ== ĠKeyEvent . VK _ Q ) ĠSystem . exit ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġchange Visual () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Mode Ġ= Ġ++ visual Mode Ġ% Ġ 6 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġchange Transform () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransform Mode Ġ= Ġ++ transform Mode Ġ% Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtoggle Background (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Background Ġ= Ġ! draw Background ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtoggle Play () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player Initialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Paused Ġ= Ġif Ġ( player . is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . pause () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . play () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcp 5 . get Controller (" pause - song "). set Caption Label ( if Ġ( is Paused ) Ġ" play - song " Ġelse Ġ" pause - song ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMethod Ġto Ġeither Ġmute Ġor Ġun - mute Ġthe Ġaudio Ġplayer . ĊĠĠĠĠĠĠĠĠ Ġ* ĠToggle s Ġmute Ġand Ġalso Ġupdates Ġthe Ġgui Ġbuttons Ġcaption ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġtoggle Mute () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player Initialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Mute Ġ= Ġif Ġ( player . is Mut ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . un mute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . mute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcp 5 . get Controller (" mute - song "). set Caption Label ( if Ġ( is Mute ) Ġ" un - mute - song " Ġelse Ġ" mute - song ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd S ongs ( songs : ĠArrayList < MS ong > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( songs Ġ!= Ġnull Ġ&& Ġsongs . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s : ĠMS ong Ġin Ġsongs ) ĠMusic List . vis ListModel . addElement ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! initial Song Loaded ) ĠMusic List . next Song () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMusic List . j List . model Ġ= ĠMusic List . vis ListModel ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfile Chooser (): ĠArrayList < MS ong >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ UI Manager . set Look And Feel ( UI Manager . getSystem Look And Feel ClassName ()) } Ġcatch Ġ( x : ĠException ) Ġ{ E Exception . append ( x )} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile List : ĠArray < File > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠFile Dialog ( null Ġas ĠFrame ?, Ġ" Select Ġa ĠSong Ġ: D ", ĠFile Dialog . LOAD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . is Multiple Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . file Ġ= Ġfile Filter Str () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . isVisible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile List Ġ= Ġdialog . files ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* if Ġ( Utils . is Windows ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcho oser Ġ= ĠJ FileChooser ( Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcho oser . dialog Title Ġ= Ġ" Select Ġa Ġsong Ġ: D " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcho oser . dialog Type Ġ= ĠJ FileChooser . OPEN _ DIALOG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcho oser . is Multi Selection Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcho oser . file Filter Ġ= ĠFileName Extension Filter ( file Filter Str (), Ġ* audio Formats ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcho oser . show Open Dialog ( null ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile List Ġ= Ġcho oser . selected Files ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠFile Dialog ( null Ġas ĠFrame ?, Ġ" Select Ġa ĠSong Ġ: D ", ĠFile Dialog . LOAD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . is Multiple Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set Filename Filter Ġ{ Ġdir , Ġfile Ġ-> Ġis Song Correct Format ( file , Ġaudio Formats ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . file Ġ= Ġfile Filter Str () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . isVisible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile List Ġ= Ġdialog . files ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( file List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġms ong List : ĠArrayList < MS ong > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġfile List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġms ong List . add ( MS ong ( F Type . File , Ġfile . absolute Path , ĠFilename Utils . getBase Name ( file . name ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġms ong List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfile Filter Str (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( format Ġin Ġaudio Formats ) Ġs Ġ+= Ġ"* .$ format ; Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġs ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġis Song Correct Format ( file : ĠString , Ġextensions : ĠArray < String >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġextensions . any Ġ{ Ġfile . endsWith ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshow Error ( message : ĠString , Ġtitle : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJOptionPane . show Confirm Dialog ( null , Ġmessage , Ġtitle , ĠJOptionPane . DEFAULT _ OPTION , ĠJOptionPane . ERROR _ MESSAGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ