package Ġcom . mo ac . android . kol labor at one . player Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . mo ac . android . kol labor at one . R Ċ import Ġcom . mo ac . android . kol labor at one . model . Oct ave Note Ċ import Ġorg . pure data . android . io . Audio Parameters Ċ import Ġorg . pure data . android . io . Pd Audio Ċ import Ġorg . pure data . core . Pd Base Ċ import Ġorg . pure data . core . utils . Io Utils Ċ import Ġjava . io . File Ċ Ċ class ĠP d Note Player ( val Ġcontext : ĠContext ) Ġ: ĠNote Player Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠMIN _ SAMPLE _ RATE Ġ= Ġ 4 4 1 0 0 ; ĊĊĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Pd (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Audio () Ġ{ ĊĠĠĠĠĠĠĠ ĠP d Audio . start Audio ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop Audio () Ġ{ ĊĠĠĠĠĠĠĠ ĠP d Audio . stop Audio () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġcleanup () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġplay Notes ( note 1 : ĠOct ave Note , Ġnote 2 : ĠOct ave Note ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnote 1 Hz : ĠFloat Ġ= Ġshift For Oct ave ( note 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġnote 2 Hz : ĠFloat Ġ= Ġshift For Oct ave ( note 2 ) ĊĠĠĠĠĠĠĠ ĠP d Base . send Float (" freq 1 ", Ġnote 1 Hz ) ĊĠĠĠĠĠĠĠ ĠP d Base . send Float (" freq 2 ", Ġnote 2 Hz ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠ ĠP d Base . send Float (" on Off ", Ġ 1 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshift For Oct ave ( note : ĠOct ave Note ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( note . octave Multi pler Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnote . note . frequency . times ( 2 . times ( note . octave Multi pler )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( note . octave Multi pler Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnote . note . frequency . div ( 2 . times ( note . octave Multi pler )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnote . note . frequency ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsil ence () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠBetter Ġthan Ġturning Ġon Ġoff ĊĠĠĠĠĠĠĠ ĠP d Base . send Float (" freq 1 ", Ġ 0 f ) ĊĠĠĠĠĠĠĠ ĠP d Base . send Float (" freq 2 ", Ġ 0 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Pd () Ġ{ ĊĠĠĠĠĠĠĠ ĠAudio Parameters . init ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġs rate Ġ= ĠMath . max ( MIN _ SAMPLE _ RATE , ĠAudio Parameters . suggest Sample Rate ()) ĊĠĠĠĠĠĠĠ ĠP d Audio . init Audio ( s rate , Ġ 0 , Ġ 2 , Ġ 1 , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdir : ĠFile Ġ= Ġcontext . files Dir ĊĠĠĠĠĠĠĠ Ġval Ġpatch File : ĠFile Ġ= ĠFile ( dir , Ġ" very _ simple _ s ine . pd ") ĊĠĠĠĠĠĠĠ ĠIo Utils . extract Resource ( context . resources . open Raw Resource ( R . raw . very _ simple _ s ine ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatch File . name , Ġcontext . files Dir ) ĊĠĠĠĠĠĠĠ Ġ// context . resources . ra ĊĠĠĠĠĠĠĠ Ġ// Io Utils . extract Zip Resource ( context . resources . open Raw Resource ( R . raw . patch ), Ġdir , Ġtrue ); ĊĠĠĠĠĠĠĠ ĠP d Base . open Patch ( patch File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcleanup () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġsure Ġto Ġrelease Ġall Ġresources ĊĠĠĠĠĠĠĠ ĠP d Audio . release () ĊĠĠĠĠĠĠĠ ĠP d Base . release () ĊĠĠĠ Ġ} Ċ Ċ }