package Ġorg . dom aint bn . som md . core . mus ical Ċ Ċ class ĠScale ( private Ġval Ġp itches : ĠList < Int >) Ġ{ ĊĊĠĠĠ Ġconstructor () Ġ: Ġthis (( 1 2 Ġ* Ġ 5 .. ( 1 2 Ġ* Ġ 5 Ġ+ Ġ 1 1 )). toList ()) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp itches . size Ġ! in Ġ 0 .. 1 6 Ġ-> Ġerror (" Me h ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// pit ches . any Ġ{ Ġit Ġ! in Ġ 0 .. 1 6 Ġ} Ġ-> Ġerror (" me h ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Scale ( idx : ĠInt ): ĠP itch Abs Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoct Offset : ĠInt Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidx Ġ< Ġ 0 Ġ-> ĠP itch Rel . Companion . std Oct ave Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠP itch Rel . Companion . std Oct ave ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġscale Size Ġ= Ġthis . pit ches . size ĊĊĠĠĠĠĠĠĠ Ġval Ġidx Wrapped Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidx Ġ< Ġ 0 Ġ-> Ġ( idx Ġ% Ġscale Size ) Ġ+ Ġscale Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ( idx Ġ% Ġscale Size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠP itch Abs ( this . pit ches [ idx Wrapped ] Ġ+ Ġoct Offset Ġ* Ġ 1 2 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġapply Scale ( pr : ĠP itch Rel , Ġshift : ĠInt , Ġtranspose Ġ: ĠInt ): ĠP itch Abs Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshifted Pitch Ġ= ĠP itch Rel ( pr . oct , Ġpr . idx Ġ+ Ġshift ) ĊĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= Ġapply Scale ( shift ed Pitch ) ĊĠĠĠĠĠĠĠ Ġreturn ĠP itch Abs ( out . value + transpose ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġapply Scale ( pr : ĠP itch Rel ): ĠP itch Abs Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġpr . idx ĊĠĠĠĠĠĠĠ Ġval Ġscale Size Ġ= Ġthis . pit ches . size ĊĊĊĊĠĠĠĠĠĠĠ Ġval Ġoct : ĠInt Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidx Ġ< Ġ 0 Ġ&& Ġ( idx Ġ% Ġscale Size ) Ġ== Ġ 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( pr . oct Ġ- ĠP itch Rel . Companion . std Oct ave ) Ġ+ Ġ( idx Ġ/ Ġscale Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidx Ġ< Ġ 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( pr . oct Ġ- ĠP itch Rel . Companion . std Oct ave ) Ġ+ Ġ( idx Ġ/ Ġscale Size ) Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( pr . oct Ġ- ĠP itch Rel . Companion . std Oct ave ) Ġ+ Ġ( idx Ġ/ Ġscale Size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġidx Wrapped Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidx Ġ% Ġscale Size Ġ== Ġ 0 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidx Ġ< Ġ 0 Ġ-> Ġ( idx Ġ% Ġscale Size ) Ġ+ Ġscale Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ( idx Ġ% Ġscale Size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// return ĠP itch Abs ( this . pit ches [ idx Wrapped ] Ġ+ Ġ( Pitch Rel . std Oct ave Ġ+ Ġoct ) Ġ* Ġ 1 2 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠP itch Abs ( this . pit ches [ idx Wrapped ] Ġ+ Ġoct Ġ* Ġ 1 2 ) ĊĠĠĠ Ġ} Ċ }