package Ġcom . so y wiz . kor au . format . mp 3 Ċ Ċ import Ġcom . so y wiz . k mem .* Ċ import Ġcom . so y wiz . kor au . internal .* Ċ import Ġcom . so y wiz . kor io . lang .* Ċ import Ġcom . so y wiz . kor io . stream .* Ċ import Ġkotlin . math .* Ċ Ċ /* Ċ https :// github . com / ke v inst ad ler / Java MP 3 Ċ his Ġis Ġa Ġfork Ġof Ġdel th as ' ĠJava ĠMP 3 Ġdecoding Ġlibrary , Ġincorpor ating Ġfixes Ġby Ġj ose ph x 8 6 , ĠG la DOS ik Ġas Ġwell Ġas Ġmyself . Ċ The Ġbuild Ġfrom Ġthis Ġrepository Ġis Ġthe Ġbasis Ġfor Ġthe ĠMP 3 Ġdecoding Ġdependency Ġthat Ġis Ġsh ipped Ġwith Ġthe ĠProcessing ĠSound Ġlibrary . Ċ Currently Ġsupports ĠM PEG - 1 ĠLayer ĠI / II / III Ġ( that Ġis , Ġmost ĠMP 1 , ĠMP 2 , Ġand ĠMP 3 Ġfiles ) Ċ Ġ*/ Ċ Ċ object ĠJava Mp 3 Decoder Ġ{ ĊĠĠĠ Ġconst Ġval ĠL 3 _ NS AMPLES Ġ= ĠJava Mp 3 Decoder Tables . L 3 _ NS AMPLES ĊĠĠĠ Ġinternal Ġval ĠIN V _ S QUARE _ 2 Ġ= ĠJava Mp 3 Decoder Tables . INV _ S QUARE _ 2 ĊĠĠĠ Ġinternal Ġval ĠBIT RATE _ LAYER _ I Ġ= ĠJava Mp 3 Decoder Tables . BIT RATE _ LAYER _ I ĊĠĠĠ Ġinternal Ġval ĠBIT RATE _ LAYER _ II Ġ= ĠJava Mp 3 Decoder Tables . BIT RATE _ LAYER _ II ĊĠĠĠ Ġinternal Ġval ĠBIT RATE _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . BIT RATE _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠS AMP LING _ FREQ UENCY Ġ= ĠJava Mp 3 Decoder Tables . SAMP LING _ FREQ UENCY ĊĠĠĠ Ġinternal Ġval ĠSC ALE FACT ORS Ġ= ĠJava Mp 3 Decoder Tables . SCALE FACT ORS ĊĠĠĠ Ġinternal Ġval ĠSC ALE FACTOR _ SIZ ES _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . SCALE FACTOR _ SIZ ES _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . SCALE FACTOR _ BAND _ IND ICES _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠCS _ ALIAS ING _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . CS _ ALIAS ING _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠCA _ ALIAS ING _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . CA _ ALIAS ING _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠPO WT AB _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . PO WT AB _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠIS _ RAT IOS _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . IS _ RAT IOS _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠI MD CT _ WINDOW _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . IM D CT _ WINDOW _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠPRE _ FR ACT OR _ LAYER _ I Ġ= ĠJava Mp 3 Decoder Tables . PRE _ FR ACT OR _ LAYER _ I ĊĠĠĠ Ġinternal Ġval ĠN IK _ CO EFF IC IENT S Ġ= ĠJava Mp 3 Decoder Tables . NI K _ CO EFF IC IENT S ĊĠĠĠ Ġinternal Ġval ĠSYN TH _ WINDOW _ TABLE _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . SYN TH _ WINDOW _ TABLE _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠDI _ CO EFF IC IENT S Ġ= ĠJava Mp 3 Decoder Tables . DI _ CO EFF IC IENT S ĊĠĠĠ Ġinternal Ġval ĠSHIFT _ ENDIAN ESS Ġ= ĠJava Mp 3 Decoder Tables . SHIFT _ ENDIAN ESS ĊĠĠĠ Ġinternal Ġval ĠSB _ LIMIT Ġ= ĠJava Mp 3 Decoder Tables . SB _ LIMIT ĊĠĠĠ Ġinternal Ġval ĠNB AL Ġ= ĠJava Mp 3 Decoder Tables . NB AL ĊĠĠĠ Ġinternal Ġval ĠQU ANTI Z ATION _ INDEX _ LAYER _ II Ġ= ĠJava Mp 3 Decoder Tables . QU ANTI Z ATION _ INDEX _ LAYER _ II ĊĠĠĠ Ġinternal Ġval ĠN LEVEL S Ġ= ĠJava Mp 3 Decoder Tables . N LEVEL S ĊĠĠĠ Ġinternal Ġval ĠC _ LAYER _ II Ġ= ĠJava Mp 3 Decoder Tables . C _ LAYER _ II ĊĠĠĠ Ġinternal Ġval ĠD _ LAYER _ II Ġ= ĠJava Mp 3 Decoder Tables . D _ LAYER _ II ĊĠĠĠ Ġinternal Ġval ĠGROUP ING _ LAYER _ II Ġ= ĠJava Mp 3 Decoder Tables . GROUP ING _ LAYER _ II ĊĠĠĠ Ġinternal Ġval ĠB ITS _ LAYER _ II Ġ= ĠJava Mp 3 Decoder Tables . BITS _ LAYER _ II ĊĠĠĠ Ġinternal Ġval ĠH UFF MAN _ TABLE _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . HU FF MAN _ TABLE _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠH UFF MAN _ TABLE _ OFFSET _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . HU FF MAN _ TABLE _ OFFSET _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠH UFF MAN _ TRE EL EN _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . HU FF MAN _ TRE EL EN _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠH UFF MAN _ LIN BITS _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . HU FF MAN _ LIN BITS _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠREQ U ANTI ZE _ LONG _ PRE TAB _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . REQ U ANTI ZE _ LONG _ PRE TAB _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠCOS _ 1 2 _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . COS _ 1 2 _ LAYER _ III ĊĠĠĠ Ġinternal Ġval ĠCOS _ 3 6 _ LAYER _ III Ġ= ĠJava Mp 3 Decoder Tables . COS _ 3 6 _ LAYER _ III ĊĊĠĠĠ Ġfun Ġinit ( inp : ĠByteArray ): ĠSound Data ? Ġ= Ġinit ( inp . open Sync ()) ĊĊĠĠĠ Ġfun ĠSync InputStream . read Sync Safe S 2 8 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv 0 Ġ= Ġread U 8 () ĊĠĠĠĠĠĠĠ Ġval Ġv 1 Ġ= Ġread U 8 () ĊĠĠĠĠĠĠĠ Ġval Ġv 2 Ġ= Ġread U 8 () ĊĠĠĠĠĠĠĠ Ġval Ġv 3 Ġ= Ġread U 8 () ĊĠĠĠĠĠĠĠ Ġreturn Ġ( v 3 Ġand Ġ 0 x 7 F ) Ġor Ġ(( v 2 Ġand Ġ 0 x 7 F ) Ġshl Ġ 7 ) Ġor Ġ(( v 1 Ġand Ġ 0 x 7 F ) Ġshl Ġ 1 4 ) Ġor Ġ(( v 0 Ġand Ġ 0 x 7 F ) Ġshl Ġ 2 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit ( inp : ĠMark able Sync InputStream ): ĠSound Data ? Ġ{ ĊĠĠĠĠĠĠĠ Ġinp . mark ( 3 ) ĊĠĠĠĠĠĠĠ Ġ// ĠSk ips ĠID 3 v 2 ĊĠĠĠĠĠĠĠ Ġif Ġ( inp . readString z ( 3 , ĠChar sets . LAT IN 1 ) Ġ== Ġ" ID 3 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmajor Ġ= Ġinp . read U 8 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrevision Ġ= Ġinp . read U 8 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= Ġinp . read U 8 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġinp . read Sync Safe S 2 8 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinp . skip ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" SIZE : Ġ$ size ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinp . reset () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠBuffer ( inp ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( buffer . last Byte Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsound Data Ġ= ĠSound Data ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Status Ġ= Ġdecode Frame ( sound Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" FRAME !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( frame Status Ġ== ĠDecode Status . OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequire Ġdirectly Ġadjacent Ġsecond Ġframe Ġ( act ually Ġallow Ġup Ġto Ġtwo Ġbytes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġaway Ġbecause Ġof Ġsome Ġqu ir ks Ġwith ĠLayer ĠIII Ġdecoding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadjacent Header : ĠFrame Header ? Ġ= Ġfind Next Header ( sound Data , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adjacent Header Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadjacent Header . un Read ( sound Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsound Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġfind Next Header ( sound Data : ĠSound Data ): ĠFrame Header ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Next Header ( sound Data , ĠInt . MAX _ VALUE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġfind Next Header ( sound Data : ĠSound Data , Ġmax Bytes Skipped : ĠInt ): ĠFrame Header ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġread Ġheader ĊĠĠĠĠĠĠĠ Ġ// try Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= ĠFrame Header ( sound Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġskipped Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! header . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sound Data . buffer . last Byte Ġ== Ġ- 1 Ġ|| Ġskipped Ġ>= Ġmax Bytes Skipped ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskipped ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . buffer . reset () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġskip Ġto Ġnext Ġbyte ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . buffer . last Byte Ġ= Ġsound Data . buffer . inp . read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sound Data . buffer . last Byte Ġ== Ġ- 1 ) Ġerror (" EOF ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . set ( sound Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġheader ĊĠĠĠĠĠĠĠ Ġ//} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġ// Ġread Ġerror Ġor ĠEOF ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ//} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠDecode Status Ġ{ ĠOK , ĠERROR , ĠCOMP LETED Ġ} ĊĊĠĠĠ Ġfun Ġdecode Frame ( sound Data : ĠSound Data ): ĠDecode Status Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sound Data . buffer . last Byte Ġ== Ġ- 1 ) Ġreturn ĠDecode Status . COMPLETED ĊĠĠĠĠĠĠĠ Ġval Ġheader : ĠFrame Header Ġ= Ġfind Next Header ( sound Data ) Ġ?: Ġreturn ĠDecode Status . COMPLETED ĊĊĠĠĠĠĠĠĠ Ġ// if Ġ( header . bit rate Index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠSystem . err . println (" MP 3 Ġdecoder Ġwarning : Ġfiles Ġwith Ġfree Ġbit rate Ġnot Ġsupported "); ĊĠĠĠĠĠĠĠ Ġ//} ĊĠĠĠĠĠĠĠ Ġif Ġ( sound Data . frequency Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . frequency Ġ= ĠS AMP LING _ FREQ UENCY [ header . sampling Frequency ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( sound Data . stere o Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġsingle _ channel Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . stere o Ġ= Ġif Ġ( header . mode Ġ== Ġ 3 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( header . layer Ġ== Ġ 1 Ġ/* Ġlayer ĠIII Ġ*/) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// sound Data . main Data Ġ= ĠByteArray ( header . n channels Ġ* Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// sound Data . store Ġ= ĠFloat Array ( header . n channels Ġ* Ġ 3 2 Ġ* Ġ 1 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// sound Data . v Ġ= ĠFloat Array ( header . n channels Ġ* Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// sound Data . main DataReader Ġ= ĠMain DataReader ( sound Data . main Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// sound Data . syn th Offset Ġ= ĠInt Array ( header . n channels ) Ġ{ Ġ 6 4 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// sound Data . syn th Buffer Ġ= ĠFloat Array ( header . n channels Ġ* Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbound : ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( header . mode Extension Ġ== Ġ 0 ) Ġ 4 Ġelse Ġif Ġ( header . mode Extension Ġ== Ġ 1 ) Ġ 8 Ġelse Ġif Ġ( header . mode Extension Ġ== Ġ 2 ) Ġ 1 2 Ġelse Ġif Ġ( header . mode Extension Ġ== Ġ 3 ) Ġ 1 6 Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( header . protection Bit Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO ĠCRC ĠCHECK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread ( sound Data . buffer , Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( header . layer Ġ== Ġ 3 Ġ/* Ġlayer ĠI Ġ*/) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Decoded Ġ= Ġwhen Ġ( header . mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ/* Ġsingle _ channel Ġ*/ Ġ-> Ġsamples _ I ( sound Data . buffer , Ġ 1 , Ġ- 1 , Ġsound Data . s 1 d ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ/* Ġst ereo Ġ*/, Ġ 2 Ġ/* Ġdual _ channel Ġ*/ Ġ-> Ġsamples _ I ( sound Data . buffer , Ġ 2 , Ġ- 1 , Ġsound Data . s 1 d ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ/* Ġintensity _ stere o Ġ*/ Ġ-> Ġsamples _ I ( sound Data . buffer , Ġ 2 , Ġbound , Ġsound Data . s 1 d ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn ĠDecode Status . ERROR ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsyn th ( sound Data , Ġsample Decoded , Ġsound Data . syn th Offset , Ġsound Data . syn th Buffer , Ġif Ġ( header . mode Ġ== Ġ 3 Ġ/* Ġsingle _ channel Ġ*/) Ġ 1 Ġelse Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( header . layer Ġ== Ġ 2 Ġ/* Ġlayer ĠII Ġ*/) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit rate : ĠInt Ġ= ĠBIT RATE _ LAYER _ II [ header . bit rate Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Decoded : ĠFloat Array Ġ= Ġ/* Ġsingle _ channel Ġ*/ when Ġ( header . mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ/* Ġsingle _ channel Ġ*/ Ġ-> Ġsamples _ II ( sound Data . buffer , Ġ 1 , Ġ- 1 , Ġbit rate , Ġsound Data . frequency , Ġsound Data . s 2 d ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ/* Ġst ereo Ġ*/, Ġ 2 Ġ/* Ġdual _ channel Ġ*/ Ġ-> Ġsamples _ II ( sound Data . buffer , Ġ 2 , Ġ- 1 , Ġbit rate , Ġsound Data . frequency , Ġsound Data . s 2 d ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ/* Ġintensity _ stere o Ġ*/ Ġ-> Ġsamples _ II ( sound Data . buffer , Ġ 2 , Ġbound , Ġbit rate , Ġsound Data . frequency , Ġsound Data . s 2 d ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Invalid Ġheader . mode ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsyn th ( sound Data , Ġsample Decoded , Ġsound Data . syn th Offset , Ġsound Data . syn th Buffer , Ġif Ġ( header . mode Ġ== Ġ 3 Ġ/* Ġsingle _ channel Ġ*/) Ġ 1 Ġelse Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( header . layer Ġ== Ġ 1 Ġ/* Ġlayer ĠIII Ġ*/) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Size : ĠInt Ġ= Ġ( 1 4 4 Ġ* ĠBIT RATE _ LAYER _ III [ header . bit rate Index ]) Ġ/ ĠS AMP LING _ FREQ UENCY [ header . sampling Frequency ] Ġ+ Ġheader . padding Bit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( frame Size Ġ> Ġ 2 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Frame Ġtoo Ġlarge ! Ġ$ frame Size ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsamples _ III ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . buffer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sound Data . stere o Ġ== Ġ 1 ) Ġ 2 Ġelse Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . main DataReader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . sampling Frequency , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . mode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . mode Extension , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . store , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . v , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIndex OutOfBoundsException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ@ TODO : ĠThis Ġshouldn 't Ġbe Ġnecessary ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( sound Data . buffer . current Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread ( sound Data . buffer , Ġ 8 Ġ- Ġsound Data . buffer . current ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠDecode Status . OK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġsamples _ III ( ĊĠĠĠĠĠĠĠ Ġbuffer : ĠBuffer , ĊĠĠĠĠĠĠĠ Ġst ereo : ĠInt , ĊĠĠĠĠĠĠĠ Ġmain DataReader : ĠMain DataReader , ĊĠĠĠĠĠĠĠ Ġframe Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġsampling Frequency : ĠInt , ĊĠĠĠĠĠĠĠ Ġmode : ĠInt , ĊĠĠĠĠĠĠĠ Ġmode Extension : ĠInt , ĊĠĠĠĠĠĠĠ Ġstore : ĠFloat Array , ĊĠĠĠĠĠĠĠ Ġv : ĠFloat Array , ĊĠĠĠĠĠĠĠ Ġsound Data : ĠSound Data ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs 3 d Ġ= Ġsound Data . s 3 d ĊĠĠĠĠĠĠĠ Ġs 3 d . reset () ĊĠĠĠĠĠĠĠ Ġval Ġs cf si Ġ= Ġs 3 d . sc fs i ĊĠĠĠĠĠĠĠ Ġval Ġpart 2 _ 3 _ length Ġ= Ġs 3 d . part 2 _ 3 _ length ĊĠĠĠĠĠĠĠ Ġval Ġbig _ values Ġ= Ġs 3 d . big _ values ĊĠĠĠĠĠĠĠ Ġval Ġglobal _ gain Ġ= Ġs 3 d . global _ gain ĊĠĠĠĠĠĠĠ Ġval Ġscale fac _ compress Ġ= Ġs 3 d . scale fac _ compress ĊĠĠĠĠĠĠĠ Ġval Ġwin _ switch _ flag Ġ= Ġs 3 d . win _ switch _ flag ĊĠĠĠĠĠĠĠ Ġval Ġblock _ type Ġ= Ġs 3 d . block _ type ĊĠĠĠĠĠĠĠ Ġval Ġmixed _ block _ flag Ġ= Ġs 3 d . mixed _ block _ flag ĊĠĠĠĠĠĠĠ Ġval Ġtable _ select Ġ= Ġs 3 d . table _ select ĊĠĠĠĠĠĠĠ Ġval Ġsub block _ gain Ġ= Ġs 3 d . sub block _ gain ĊĠĠĠĠĠĠĠ Ġval Ġregion 0 _ count Ġ= Ġs 3 d . region 0 _ count ĊĠĠĠĠĠĠĠ Ġval Ġregion 1 _ count Ġ= Ġs 3 d . region 1 _ count ĊĠĠĠĠĠĠĠ Ġval Ġpref lag Ġ= Ġs 3 d . pref lag ĊĠĠĠĠĠĠĠ Ġval Ġscale fac _ scale Ġ= Ġs 3 d . scale fac _ scale ĊĠĠĠĠĠĠĠ Ġval Ġcount 1 table _ select Ġ= Ġs 3 d . count 1 table _ select ĊĠĠĠĠĠĠĠ Ġval Ġcount 1 Ġ= Ġs 3 d . count 1 ĊĠĠĠĠĠĠĠ Ġval Ġscale fac _ l Ġ= Ġs 3 d . scale fac _ l ĊĠĠĠĠĠĠĠ Ġval Ġscale fac _ s Ġ= Ġs 3 d . scale fac _ s ĊĠĠĠĠĠĠĠ Ġval Ġiss Ġ= Ġs 3 d .` is ` ĊĊĠĠĠĠĠĠĠ Ġval Ġmain Data Begin : ĠInt Ġ= Ġread ( buffer , Ġ 9 ) ĊĠĠĠĠĠĠĠ Ġread ( buffer , Ġif Ġ( stere o Ġ== Ġ 1 ) Ġ 5 Ġelse Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( scale band Ġin Ġ 0 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs cf si [ ch Ġ* Ġ 4 Ġ+ Ġscale band ] Ġ= Ġread ( buffer , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( gr Ġin Ġ 0 .. 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart 2 _ 3 _ length [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbig _ values [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal _ gain [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ compress [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwin _ switch _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( win _ switch _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock _ type [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmixed _ block _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( region Ġin Ġ 0 .. 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable _ select [( ch Ġ* Ġ 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 3 ) Ġ+ Ġregion ] Ġ= Ġread ( buffer , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( window Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub block _ gain [( ch Ġ* Ġ 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 3 ) Ġ+ Ġwindow ] Ġ= Ġread ( buffer , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( block _ type [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 2 ) Ġ&& Ġ( mixed _ block _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion 0 _ count [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion 0 _ count [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion 1 _ count [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġ 2 0 Ġ- Ġregion 0 _ count [ ch Ġ* Ġ 2 Ġ+ Ġgr ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( region Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable _ select [( ch Ġ* Ġ 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 3 ) Ġ+ Ġregion ] Ġ= Ġread ( buffer , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion 0 _ count [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion 1 _ count [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock _ type [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpref lag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ scale [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount 1 table _ select [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġread ( buffer , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġarray copy ( main DataReader . array , Ġmain DataReader . top Ġ- Ġmain Data Begin , Ġmain DataReader . array , Ġ 0 , Ġmain Data Begin ) ĊĠĠĠĠĠĠĠ Ġval Ġmain DataSize : ĠInt Ġ= Ġframe Size Ġ- Ġ( if Ġ( stere o Ġ== Ġ 2 ) Ġ 3 2 Ġelse Ġ 1 7 ) Ġ- Ġ 4 ĊĠĠĠĠĠĠĠ Ġread Into ( buffer , Ġmain DataReader . array , Ġmain Data Begin , Ġmain DataSize ) ĊĠĠĠĠĠĠĠ Ġmain DataReader . index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmain DataReader . current Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmain DataReader . top Ġ= Ġmain Data Begin Ġ+ Ġmain DataSize ĊĠĠĠĠĠĠĠ Ġfor Ġ( gr Ġin Ġ 0 .. 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr sample Ġ= Ġ( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpart _ 2 _ start : ĠInt Ġ= Ġmain DataReader . index Ġ* Ġ 8 Ġ+ Ġmain DataReader . current ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠNumber Ġof Ġbits Ġin Ġthe Ġbit stream Ġfor Ġthe Ġbands Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs len 1 : ĠInt Ġ= ĠSC ALE FACTOR _ SIZ ES _ LAYER _ III [ scale fac _ compress [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ* Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs len 2 : ĠInt Ġ= ĠSC ALE FACTOR _ SIZ ES _ LAYER _ III [ scale fac _ compress [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ* Ġ 2 Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( win _ switch _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ!= Ġ 0 ) Ġ&& Ġ( block _ type [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mixed _ block _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 0 .. 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( gr Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] Ġ= Ġread ( main DataReader , Ġs len 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 3 .. 1 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġs len 1 Ġis Ġfor Ġbands Ġ 3 - 5 , Ġs len 2 Ġfor Ġ 6 - 1 1 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn bits Ġ= Ġif Ġ( s fb Ġ< Ġ 6 ) Ġs len 1 Ġelse Ġs len 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( win Ġin Ġ 0 .. 2 ) Ġscale fac _ s [( ch Ġ* Ġ 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ( s fb Ġ* Ġ 3 ) Ġ+ Ġwin ] Ġ= Ġread ( main DataReader , Ġn bits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 0 .. 1 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġs len 1 Ġis Ġfor Ġbands Ġ 3 - 5 , Ġs len 2 Ġfor Ġ 6 - 1 1 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn bits Ġ= Ġif Ġ( s fb Ġ< Ġ 6 ) Ġs len 1 Ġelse Ġs len 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( win Ġin Ġ 0 .. 2 ) Ġscale fac _ s [( ch Ġ* Ġ 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ( s fb Ġ* Ġ 3 ) Ġ+ Ġwin ] Ġ= Ġread ( main DataReader , Ġn bits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ/* Ġblock _ type Ġ== Ġ 0 Ġif Ġwin switch Ġ== Ġ 0 Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠScale Ġfactor Ġbands Ġ 0 - 5 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( sc fs i [ ch Ġ* Ġ 4 Ġ+ Ġ 0 ] Ġ== Ġ 0 ) Ġ|| Ġ( gr Ġ== Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 0 .. 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( gr Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] Ġ= Ġread ( main DataReader , Ġs len 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( sc fs i [ ch Ġ* Ġ 4 Ġ+ Ġ 0 ] Ġ== Ġ 1 ) Ġ&& Ġ( gr Ġ== Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCopy Ġscale factors Ġfrom Ġgran ule Ġ 0 Ġto Ġgran ule Ġ 1 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 0 .. 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( 1 Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] Ġ= Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( 0 Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠScale Ġfactor Ġbands Ġ 6 - 1 0 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( sc fs i [ ch Ġ* Ġ 4 Ġ+ Ġ 1 ] Ġ== Ġ 0 ) Ġ|| Ġ( gr Ġ== Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 6 .. 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( gr Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] Ġ= Ġread ( main DataReader , Ġs len 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( sc fs i [ ch Ġ* Ġ 4 Ġ+ Ġ 1 ] Ġ== Ġ 1 ) Ġ&& Ġ( gr Ġ== Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCopy Ġscale factors Ġfrom Ġgran ule Ġ 0 Ġto Ġgran ule Ġ 1 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 6 .. 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( 1 Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] Ġ= Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( 0 Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠScale Ġfactor Ġbands Ġ 1 1 - 1 5 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( sc fs i [ ch Ġ* Ġ 4 Ġ+ Ġ 2 ] Ġ== Ġ 0 ) Ġ|| Ġ( gr Ġ== Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 1 1 .. 1 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( gr Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] Ġ= Ġread ( main DataReader , Ġs len 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( sc fs i [ ch Ġ* Ġ 4 Ġ+ Ġ 2 ] Ġ== Ġ 1 ) Ġ&& Ġ( gr Ġ== Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCopy Ġscale factors Ġfrom Ġgran ule Ġ 0 Ġto Ġgran ule Ġ 1 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 1 1 .. 1 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( 1 Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] Ġ= Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( 0 Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠScale Ġfactor Ġbands Ġ 1 6 - 2 0 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( sc fs i [ ch Ġ* Ġ 4 Ġ+ Ġ 3 ] Ġ== Ġ 0 ) Ġ|| Ġ( gr Ġ== Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 1 6 .. 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( gr Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] Ġ= Ġread ( main DataReader , Ġs len 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( sc fs i [ ch Ġ* Ġ 4 Ġ+ Ġ 3 ] Ġ== Ġ 1 ) Ġ&& Ġ( gr Ġ== Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCopy Ġscale factors Ġfrom Ġgran ule Ġ 0 Ġto Ġgran ule Ġ 1 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 1 6 .. 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( 1 Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] Ġ= Ġscale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( 0 Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthere Ġis Ġany Ġdata Ġto Ġdecode . ĠIf Ġnot , Ġzero Ġthe Ġarray . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( part 2 _ 3 _ length [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ!= Ġ 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCalculate Ġbit _ pos _ end Ġwhich Ġis Ġthe Ġindex Ġof Ġthe Ġlast Ġbit Ġfor Ġthis Ġpart . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit _ pos _ end : ĠInt Ġ= Ġpart _ 2 _ start Ġ+ Ġpart 2 _ 3 _ length [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġregion _ 1 _ start : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġregion _ 2 _ start : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtable _ num : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis _ pos : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh uff man : ĠInt Array Ġ= Ġs 3 d . h uff man Temp ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġregion Ġboundaries ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( win _ switch _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 1 ) Ġ&& Ġ( block _ type [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion _ 1 _ start Ġ= Ġ 3 6 Ġ/* Ġs fb [ 9 / 3 ]* 3 = 3 6 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion _ 2 _ start Ġ= ĠL 3 _ NS AMPLES Ġ/* ĠNo ĠRegion 2 Ġfor Ġshort Ġblock Ġcase . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion _ 1 _ start Ġ= ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 0 Ġ+ Ġregion 0 _ count [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion _ 2 _ start Ġ= ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 0 Ġ+ Ġregion 0 _ count [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ+ Ġregion 1 _ count [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ+ Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠRead Ġbig _ values Ġusing Ġtables Ġaccording Ġto Ġregion _ x _ start Ġ*/ is _ pos Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( is _ pos Ġ< Ġbig _ values [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ* Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable _ num Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ pos Ġ< Ġregion _ 1 _ start Ġ-> Ġtable _ select [( ch Ġ* Ġ 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 3 ) Ġ+ Ġ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ pos Ġ< Ġregion _ 2 _ start Ġ-> Ġtable _ select [( ch Ġ* Ġ 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 3 ) Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtable _ select [( ch Ġ* Ġ 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 3 ) Ġ+ Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġnext ĠH uff man Ġcoded Ġwords ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh uff man _ III ( main DataReader , Ġtable _ num , Ġh uff man ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġthe Ġbig _ values Ġarea Ġthere Ġare Ġtwo Ġfreq Ġlines Ġper ĠH uff man Ġword ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is _ pos Ġ>= ĠL 3 _ NS AMPLES ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [ r sample Ġ+ Ġis _ pos ++] Ġ= Ġh uff man [ 0 ]. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is _ pos Ġ>= ĠL 3 _ NS AMPLES ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [ r sample Ġ+ Ġis _ pos ++] Ġ= Ġh uff man [ 1 ]. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠRead Ġsmall Ġvalues Ġuntil Ġis _ pos Ġ= Ġ 5 7 6 Ġor Ġwe Ġrun Ġout Ġof Ġh uff man Ġdata Ġ*/ table _ num Ġ= Ġcount 1 table _ select [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ+ Ġ 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ pos Ġ= Ġbig _ values [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(( is _ pos Ġ<= ĠL 3 _ NS AMPLES Ġ- Ġ 4 ) Ġ&& Ġ( main DataReader . index Ġ* Ġ 8 Ġ+ Ġmain DataReader . current Ġ<= Ġbit _ pos _ end )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġnext ĠH uff man Ġcoded Ġwords ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh uff man _ III ( main DataReader , Ġtable _ num , Ġh uff man ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [ r sample Ġ+ Ġis _ pos ++] Ġ= Ġh uff man [ 2 ]. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is _ pos Ġ>= ĠL 3 _ NS AMPLES ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [ r sample Ġ+ Ġis _ pos ++] Ġ= Ġh uff man [ 3 ]. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is _ pos Ġ>= ĠL 3 _ NS AMPLES ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [ r sample Ġ+ Ġis _ pos ++] Ġ= Ġh uff man [ 0 ]. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is _ pos Ġ>= ĠL 3 _ NS AMPLES ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [ r sample Ġ+ Ġis _ pos ] Ġ= Ġh uff man [ 1 ]. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ pos ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġwe Ġdidn 't Ġread Ġpast Ġthe Ġend Ġof Ġthis Ġsection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( main DataReader . index Ġ* Ġ 8 Ġ+ Ġmain DataReader . current Ġ> Ġ( bit _ pos _ end Ġ+ Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġlast Ġwords Ġread ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ pos Ġ-= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠSetup Ġcount 1 Ġwhich Ġis Ġthe Ġindex Ġof Ġthe Ġfirst Ġsample Ġin Ġthe Ġr zero Ġreg . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount 1 [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ= Ġis _ pos ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠZero Ġout Ġthe Ġlast Ġpart Ġif Ġnecessary Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġis _ pos Ġcomes Ġfrom Ġlast Ġfor - loop Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( is _ pos Ġ< ĠL 3 _ NS AMPLES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [ r sample Ġ+ Ġis _ pos ++] Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠSet Ġthe Ġbit pos Ġto Ġpoint Ġto Ġthe Ġnext Ġpart Ġto Ġread Ġ*/ main DataReader . index Ġ= Ġ( bit _ pos _ end Ġ+ Ġ 1 ) Ġ/ Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain DataReader . current Ġ= Ġ( bit _ pos _ end Ġ+ Ġ 1 ) Ġ% Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( gr ... Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsamples Buffer Ġ= Ġsound Data . get Samples Buffer ( 1 8 Ġ* Ġ 3 2 Ġ* Ġ 2 Ġ* Ġst ereo Ġ* Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( gr Ġin Ġ 0 .. 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġre quant ize Ġ================================================= == ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠDetermine Ġtype Ġof Ġblock Ġto Ġprocess Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( win _ switch _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 1 ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( block _ type [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ/* ĠShort Ġblocks Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġthe Ġfirst Ġtwo Ġsub bands Ġ* Ġ(= 2 * 1 8 Ġsamples Ġ= Ġ 8 Ġlong Ġor Ġ 3 Ġshort Ġs fb 's ) Ġuses Ġlong Ġblocks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mixed _ block _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ!= Ġ 0 ) Ġ{ Ġ/* Ġ 2 Ġlong bl . Ġsb Ġ Ġfirst Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFirst Ġprocess Ġthe Ġ 2 Ġlong Ġblock Ġsub bands Ġat Ġthe Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs fb : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext _ s fb : ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 0 Ġ+ Ġs fb Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġnext _ s fb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs fb ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext _ s fb Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 0 Ġ+ Ġs fb Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġif Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre quant ize _ long _ III ( gr , Ġch , Ġscale fac _ scale , Ġpref lag , Ġglobal _ gain , Ġscale fac _ l , Ġiss , Ġi , Ġs fb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠAnd Ġnext Ġthe Ġremaining , Ġnon - zero , Ġbands Ġwhich Ġuses Ġshort Ġblocks */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs fb Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext _ s fb Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwin _ len : ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi : ĠInt Ġ= Ġ 3 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġcount 1 [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ/* Ġi ++ Ġdone Ġbelow ! Ġ*/) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġif Ġwe 're Ġinto Ġthe Ġnext Ġscale fac Ġband Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġnext _ s fb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠYes Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs fb ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext _ s fb Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwin _ len Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġif Ġ( next _ s fb ) Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( win Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġwin _ len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre quant ize _ short _ III ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgr , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ scale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub block _ gain , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal _ gain , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs fb , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( win ... Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( j ... Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠOnly Ġshort Ġblocks Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs fb : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext _ s fb : ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwin _ len : ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġcount 1 [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ/* Ġi ++ Ġdone Ġbelow ! Ġ*/) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġif Ġwe 're Ġinto Ġthe Ġnext Ġscale fac Ġband Ġ*/ if Ġ( i Ġ== Ġnext _ s fb ) Ġ{ ĠĠĠ Ġ/* ĠYes Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs fb ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext _ s fb Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwin _ len Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġif Ġ( next _ s fb ) Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( win Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġwin _ len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre quant ize _ short _ III ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgr , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ scale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub block _ gain , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal _ gain , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs fb , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( win ... Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( j ... Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġelse Ġ( only Ġshort Ġblocks ) Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠOnly Ġlong Ġblocks Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs fb : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext _ s fb : ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 0 Ġ+ Ġs fb Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount 1 [ ch Ġ* Ġ 2 Ġ+ Ġgr ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġnext _ s fb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs fb ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext _ s fb Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 0 Ġ+ Ġs fb Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġif Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre quant ize _ long _ III ( gr , Ġch , Ġscale fac _ scale , Ġpref lag , Ġglobal _ gain , Ġscale fac _ l , Ġiss , Ġi , Ġs fb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġelse Ġ( only Ġlong Ġblocks ) Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreorder Ġ================================= =============== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġouter @ Ġwhile Ġ( true ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠOnly Ġreorder Ġshort Ġblocks Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( win _ switch _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 1 ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( block _ type [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ/* ĠShort Ġblocks Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre : ĠFloat Array Ġ= Ġs 3 d . temp Float L 3 NS ample s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs fb : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext _ s fb : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwin _ len : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġif Ġthe Ġfirst Ġtwo Ġsub bands * Ġ(= 2 * 1 8 Ġsamples Ġ= Ġ 8 Ġlong Ġor Ġ 3 Ġshort Ġs fb 's ) Ġuses Ġlong Ġblocks Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mixed _ block _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ!= Ġ 0 ) Ġ{ Ġ/* Ġ 2 Ġlong bl . Ġsb Ġ Ġfirst Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs fb Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġ 3 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext _ s fb Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwin _ len Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< ĠL 3 _ NS AMPLES Ġ/* Ġi ++ Ġdone Ġbelow ! Ġ*/) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġif Ġwe 're Ġinto Ġthe Ġnext Ġscale fac Ġband Ġ*/ if Ġ( i Ġ== Ġnext _ s fb ) Ġ{ ĠĠĠ Ġ/* ĠYes Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCopy Ġreordered Ġdata Ġback Ġto Ġthe Ġoriginal Ġvector Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġ 3 Ġ* Ġwin _ len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġ( 3 Ġ* Ġ( SCALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb ])) Ġ+ Ġj ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ] Ġ= Ġre [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġif Ġthis Ġband Ġis Ġabove Ġthe Ġr zero Ġregion , Ġif Ġso Ġwe 're Ġdone Ġ*/ if Ġ( i Ġ>= Ġcount 1 [ ch Ġ* Ġ 2 Ġ+ Ġgr ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠDone Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak @ outer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs fb ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext _ s fb Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwin _ len Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġif Ġ( next _ s fb ) Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠDo Ġthe Ġactual Ġre ordering Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( win Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġwin _ len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre [ j Ġ* Ġ 3 Ġ+ Ġwin ] Ġ= Ġiss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġi ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( j ... Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( win ... Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCopy Ġreordered Ġdata Ġof Ġthe Ġlast Ġband Ġback Ġto Ġthe Ġoriginal Ġvector Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġ 3 Ġ* Ġwin _ len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġ( 3 Ġ* Ġ( SCALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġ 1 2 ])) Ġ+ Ġj ] Ġ= Ġre [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġst ereo Ġ================================= ============= ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing Ġif Ġjoint Ġst ereo Ġis Ġnot Ġenabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( mode Ġ== Ġ 1 ) Ġ&& Ġ( mode Extension Ġ!= Ġ 0 )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo ĠMiddle / Side Ġ(" normal ") Ġst ereo Ġprocessing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( mode Extension Ġand Ġ 0 x 2 ) Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġhow Ġmany Ġfrequency Ġlines Ġto Ġtransform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax _ pos Ġ= Ġ( if Ġ( count 1 [ 0 Ġ* Ġ 2 Ġ+ Ġgr ] Ġ> Ġcount 1 [ 1 Ġ* Ġ 2 Ġ+ Ġgr ]) Ġcount 1 [ 0 Ġ* Ġ 2 Ġ+ Ġgr ] Ġelse Ġcount 1 [ 1 Ġ* Ġ 2 Ġ+ Ġgr ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġthe Ġactual Ġprocessing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmax _ pos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft : ĠFloat Ġ= Ġ(( iss [( 0 Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġi ] Ġ+ Ġiss [( 1 Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġi ]) Ġ* Ġ( INV _ S QUARE _ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright : ĠFloat Ġ= Ġ(( iss [( 0 Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġi ] Ġ- Ġiss [( 1 Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġi ]) Ġ* Ġ( INV _ S QUARE _ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [( 0 Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġi ] Ġ= Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [( 1 Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġi ] Ġ= Ġright ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ// Ġend Ġfor Ġ( i ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ// Ġend Ġif Ġ( ms _ stere o ... ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠDo Ġintensity Ġst ereo Ġprocessing Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( mode Extension Ġand Ġ 0 x 1 ) Ġ!= Ġ 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠThe Ġfirst Ġband Ġthat Ġis Ġintensity Ġst ereo Ġencoded Ġis Ġthe Ġfirst Ġband ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġscale Ġfactor Ġband Ġon Ġor Ġabove Ġthe Ġcount 1 Ġfrequency Ġline . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠN . B .: ĠInt ensity Ġst ereo Ġcoding Ġis Ġonly Ġdone Ġfor Ġthe Ġhigher Ġsub bands , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġbut Ġthe Ġlogic Ġis Ġstill Ġincluded Ġto Ġprocess Ġlower Ġsub bands . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠDetermine Ġtype Ġof Ġblock Ġto Ġprocess Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( win _ switch _ flag [ 0 Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 1 ) Ġ&& Ġ( block _ type [ 0 Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 2 )) Ġ{ Ġ/* ĠShort Ġblocks Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġif Ġthe Ġfirst Ġtwo Ġsub bands * Ġ(= 2 * 1 8 Ġsamples Ġ= Ġ 8 Ġlong Ġor Ġ 3 Ġshort Ġs fb 's ) Ġuses Ġlong Ġblocks Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mixed _ block _ flag [ 0 Ġ* Ġ 2 Ġ+ Ġgr ] Ġ!= Ġ 0 ) Ġ{ Ġ/* Ġ 2 Ġlong bl . Ġsb Ġ Ġfirst Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠFirst Ġprocess Ġthe Ġ 8 Ġs fb 's Ġat Ġthe Ġstart */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 0 .. 7 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠIs Ġthis Ġscale Ġfactor Ġband Ġabove Ġcount 1 Ġfor Ġthe Ġright Ġchannel ? Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( SCALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 0 Ġ+ Ġs fb ] Ġ>= Ġcount 1 [ 1 Ġ* Ġ 2 Ġ+ Ġgr ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst ereo _ long _ III ( iss , Ġscale fac _ l , Ġgr , Ġs fb , Ġsampling Frequency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġif Ġ( s fb ... Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠAnd Ġnext Ġthe Ġremaining Ġbands Ġwhich Ġuses Ġshort Ġblocks */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 3 .. 1 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIs Ġthis Ġscale Ġfactor Ġband Ġabove Ġcount 1 Ġfor Ġthe Ġright Ġchannel ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( SCALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb ] Ġ* Ġ 3 Ġ>= Ġcount 1 [ 1 Ġ* Ġ 2 Ġ+ Ġgr ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPerform Ġthe Ġintensity Ġst ereo Ġprocessing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst ereo _ short _ III ( iss , Ġscale fac _ s , Ġgr , Ġs fb , Ġsampling Frequency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġshort Ġblocks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 0 .. 1 1 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠIs Ġthis Ġscale Ġfactor Ġband Ġabove Ġcount 1 Ġfor Ġthe Ġright Ġchannel ? Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( SCALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb ] Ġ* Ġ 3 Ġ>= Ġcount 1 [ 1 Ġ* Ġ 2 Ġ+ Ġgr ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠPerform Ġthe Ġintensity Ġst ereo Ġprocessing Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst ereo _ short _ III ( iss , Ġscale fac _ s , Ġgr , Ġs fb , Ġsampling Frequency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġelse Ġ( only Ġshort Ġblocks ) Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠOnly Ġlong Ġblocks Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s fb Ġin Ġ 0 .. 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠIs Ġthis Ġscale Ġfactor Ġband Ġabove Ġcount 1 Ġfor Ġthe Ġright Ġchannel ? Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( SCALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 0 Ġ+ Ġs fb ] Ġ>= Ġcount 1 [ 1 Ġ* Ġ 2 Ġ+ Ġgr ]) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠPerform Ġthe Ġintensity Ġst ereo Ġprocessing Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst ereo _ long _ III ( iss , Ġscale fac _ l , Ġgr , Ġs fb , Ġsampling Frequency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġelse Ġ( only Ġlong Ġblocks ) Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġif Ġ( intensity _ stere o Ġprocessing ) Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġant ialias ing Ġ================================= ============= ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠNo Ġant ialias ing Ġis Ġdone Ġfor Ġshort Ġblocks Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ((( win _ switch _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 1 ) Ġ&& Ġ( block _ type [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 2 ) Ġ&& Ġ(( mixed _ block _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ]) Ġ== Ġ 0 )))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSetup Ġthe Ġlimit Ġfor Ġhow Ġmany Ġsub bands Ġto Ġtransform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb lim Ġ= Ġif Ġ((( win _ switch _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 1 ) Ġ&& Ġ( block _ type [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 2 ) Ġ&& Ġ(( mixed _ block _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ]) Ġ== Ġ 1 ))) Ġ 2 Ġelse Ġ 3 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠDo Ġthe Ġactual Ġant ialias ing Ġ*/ for Ġ( sb Ġin Ġ 1 Ġuntil Ġsb lim ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġli : ĠInt Ġ= Ġ( 1 8 Ġ* Ġsb ) Ġ- Ġ 1 Ġ- Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġui : ĠInt Ġ= Ġ 1 8 Ġ* Ġsb Ġ+ Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlb : ĠFloat Ġ= Ġiss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġli ] Ġ* ĠCS _ ALIAS ING _ LAYER _ III [ i ] Ġ- Ġiss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġui ] Ġ* ĠCA _ ALIAS ING _ LAYER _ III [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġub : ĠFloat Ġ= Ġiss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġui ] Ġ* ĠCS _ ALIAS ING _ LAYER _ III [ i ] Ġ+ Ġiss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġli ] Ġ* ĠCA _ ALIAS ING _ LAYER _ III [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġli ] Ġ= Ġlb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġui ] Ġ= Ġub ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhybrid Ġsynt hesis Ġ================================= ========== ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoop Ġthrough Ġall Ġ 3 2 Ġsub bands ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġ 0 .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġblock type Ġfor Ġthis Ġsub band ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLong Ġblocks Ġin Ġfirst Ġ 2 Ġsub bands ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbt Ġ= Ġ( if Ġ((( win _ switch _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 1 ) Ġ&& Ġ( mixed _ block _ flag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ== Ġ 1 ) Ġ&& Ġ( sb Ġ< Ġ 2 ))) Ġ 0 Ġelse Ġblock _ type [ ch Ġ* Ġ 2 Ġ+ Ġgr ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw out : ĠFloat Array Ġ= Ġs 3 d . temp Float Array 3 6 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ---- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠDo Ġthe Ġinverse Ġmodified ĠD CT Ġand Ġwindow ing Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠM PG _ IM D CT _ Win (& Ġ( is [ ch Ġ* Ġ 2 Ġ+ Ġgr ][ sb Ġ* Ġ 1 8 ]), Ġraw out , Ġbt ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset : ĠInt Ġ= Ġ( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġ( sb Ġ* Ġ 1 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bt Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġ 0 .. 1 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( m Ġin Ġ 0 .. 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġiss [ offset Ġ+ Ġj Ġ+ Ġ( 3 Ġ* Ġm )] Ġ* ĠCOS _ 1 2 _ LAYER _ III [ m Ġ* Ġ 1 2 Ġ+ Ġp ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw out [( 6 Ġ* Ġj ) Ġ+ Ġp Ġ+ Ġ 6 ] Ġ+= Ġsum Ġ* ĠI MD CT _ WINDOW _ LAYER _ III [ bt Ġ* Ġ 3 6 Ġ+ Ġp ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġ 0 .. 3 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( m Ġin Ġ 0 .. 1 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġiss [ offset Ġ+ Ġm ] Ġ* ĠCOS _ 3 6 _ LAYER _ III [ m Ġ* Ġ 3 6 Ġ+ Ġp ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw out [ p ] Ġ= Ġsum Ġ* ĠI MD CT _ WINDOW _ LAYER _ III [ bt Ġ* Ġ 3 6 Ġ+ Ġp ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠOver l app Ġadd Ġwith Ġstored Ġvector Ġinto Ġmain _ data Ġvector Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 1 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġ( sb Ġ* Ġ 1 8 ) Ġ+ Ġi ] Ġ= Ġraw out [ i ] Ġ+ Ġstore [( ch Ġ* Ġ 3 2 Ġ* Ġ 1 8 ) Ġ+ Ġ( sb Ġ* Ġ 1 8 ) Ġ+ Ġi ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore [( ch Ġ* Ġ 3 2 Ġ* Ġ 1 8 ) Ġ+ Ġ( sb Ġ* Ġ 1 8 ) Ġ+ Ġi ] Ġ= Ġraw out [ i Ġ+ Ġ 1 8 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( i ... Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( sb ... Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfrequency Ġin version Ġ================================= =============== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsb Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( sb Ġ< Ġ 3 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġ 1 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġ( sb Ġ* Ġ 1 8 ) Ġ+ Ġi ] Ġ= Ġ- iss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġ( sb Ġ* Ġ 1 8 ) Ġ+ Ġi ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpoly phase Ġsub band Ġsynt hesis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Ġ= Ġs 3 d . temp Float Array 5 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġs 3 d . temp Float Array 3 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠLoop Ġthrough Ġthe Ġ 1 8 Ġsamples Ġin Ġeach Ġof Ġthe Ġ 3 2 Ġsub bands Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ss Ġin Ġ 0 .. 1 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 0 2 3 Ġdown To Ġ 6 4 ) Ġ Ġ/* ĠShift Ġup Ġthe ĠV Ġvector Ġ*/ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv [ ch Ġ* Ġ 1 0 2 4 Ġ+ Ġi ] Ġ= Ġv [ ch Ġ* Ġ 1 0 2 4 Ġ+ Ġi Ġ- Ġ 6 4 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCopy Ġthe Ġnext Ġ 3 2 Ġtime Ġsamples Ġto Ġa Ġtemp Ġvector Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs [ i ] Ġ= Ġiss [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġ( i Ġ* Ġ 1 8 ) Ġ+ Ġss ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 6 3 ) Ġ{ Ġ/* ĠMatrix Ġmultiply Ġinput Ġwith Ġn _ win [][] Ġmatrix Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum : ĠFloat Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= ĠSYN TH _ WINDOW _ TABLE _ LAYER _ III [ i Ġ* Ġ 3 2 Ġ+ Ġj ] Ġ* Ġs [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv [ ch Ġ* Ġ 1 0 2 4 Ġ+ Ġi ] Ġ= Ġsum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor ( i ... Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠBuild Ġthe ĠU Ġvector Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu [ i Ġ* Ġ 6 4 Ġ+ Ġj ] Ġ= Ġv [( ch Ġ* Ġ 1 0 2 4 ) Ġ+ Ġ( i Ġ* Ġ 1 2 8 ) Ġ+ Ġj ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu [( i Ġ* Ġ 6 4 ) Ġ+ Ġj Ġ+ Ġ 3 2 ] Ġ= Ġv [( ch Ġ* Ġ 1 0 2 4 ) Ġ+ Ġ( i Ġ* Ġ 1 2 8 ) Ġ+ Ġj Ġ+ Ġ 9 6 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( i ... Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠWindow Ġby Ġu _ vec [ i ] Ġwith Ġg _ syn th _ dt bl [ i ] Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 5 1 1 ) Ġu [ i ] Ġ*= ĠDI _ CO EFF IC IENT S [ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCalculate Ġ 3 2 Ġsamples Ġand Ġstore Ġthem Ġin Ġthe Ġout data Ġvector Ġ*/ for Ġ( i Ġin Ġ 0 .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum : ĠFloat Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. 1 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġu [ j Ġ* Ġ 3 2 Ġ+ Ġi ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġsum Ġnow Ġcontains Ġtime Ġsample Ġ 3 2 * ss + i . ĠConvert Ġto Ġ 1 6 - bit Ġsigned Ġint Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsamp : ĠInt Ġ= Ġ( sum Ġ* Ġ 3 2 7 6 7 . 0 f ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( samp Ġ> Ġ 3 2 7 6 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsamp Ġ= Ġ 3 2 7 6 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( samp Ġ< Ġ- 3 2 7 6 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsamp Ġ= Ġ- 3 2 7 6 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsamp Ġ= Ġsamp Ġand Ġ 0 xffff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stere o Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsamples Buffer [( gr Ġ* Ġ 1 8 Ġ* Ġ 3 2 Ġ* Ġ 2 Ġ* Ġ 2 ) Ġ+ Ġ( ss Ġ* Ġ 3 2 Ġ* Ġ 2 Ġ* Ġ 2 ) Ġ+ Ġ( i Ġ* Ġ 2 Ġ* Ġ 2 ) Ġ+ Ġ( ch Ġ* Ġ 2 )] Ġ= Ġsamp . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsamples Buffer [( gr Ġ* Ġ 1 8 Ġ* Ġ 3 2 Ġ* Ġ 2 Ġ* Ġ 2 ) Ġ+ Ġ( ss Ġ* Ġ 3 2 Ġ* Ġ 2 Ġ* Ġ 2 ) Ġ+ Ġ( i Ġ* Ġ 2 Ġ* Ġ 2 ) Ġ+ Ġ( ch Ġ* Ġ 2 ) Ġ+ Ġ 1 ] Ġ= Ġ( samp Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsamples Buffer [( gr Ġ* Ġ 1 8 Ġ* Ġ 3 2 Ġ* Ġ 2 ) Ġ+ Ġ( ss Ġ* Ġ 3 2 Ġ* Ġ 2 ) Ġ+ Ġ( i Ġ* Ġ 2 )] Ġ= Ġsamp . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsamples Buffer [( gr Ġ* Ġ 1 8 Ġ* Ġ 3 2 Ġ* Ġ 2 ) Ġ+ Ġ( ss Ġ* Ġ 3 2 Ġ* Ġ 2 ) Ġ+ Ġ( i Ġ* Ġ 2 ) Ġ+ Ġ 1 ] Ġ= Ġ( samp Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( i ... Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( ss ... Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġst ereo _ short _ III (` is `: ĠFloat Array , Ġscale fac _ s : ĠInt Array , Ġgr : ĠInt , Ġs fb : ĠInt , Ġsampling Frequency : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġwindow Ġlength ĊĠĠĠĠĠĠĠ Ġval Ġwin _ len : ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb Ġ+ Ġ 1 ] Ġ- ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb ] ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġthree Ġwindows Ġwithin Ġthe Ġband Ġhas Ġdifferent Ġscale factors ĊĠĠĠĠĠĠĠ Ġfor Ġ( win Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis _ pos : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġ(( is _ pos [ s fb ]= scale fac ) Ġ!= Ġ 7 ) Ġ=> Ġno Ġintensity Ġst ereo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( scale fac _ s [( 0 Ġ* Ġ 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ( s fb Ġ* Ġ 3 ) Ġ+ Ġwin ]. also Ġ{ Ġis _ pos Ġ= Ġit Ġ}) Ġ!= Ġ 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs fb _ start : ĠInt Ġ= ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 2 3 Ġ+ Ġs fb ] Ġ* Ġ 3 Ġ+ Ġwin _ len Ġ* Ġwin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs fb _ stop : ĠInt Ġ= Ġs fb _ start Ġ+ Ġwin _ len ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtan (( 6 * PI )/ 1 2 Ġ= ĠPI / 2 ) Ġneeds Ġspecial Ġtreatment ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis _ ratio _ l Ġ= Ġif Ġ( is _ pos Ġ== Ġ 6 ) Ġ 1 f Ġelse ĠIS _ RAT IOS _ LAYER _ III [ is _ pos ] Ġ/ Ġ( 1 . 0 f Ġ+ ĠIS _ RAT IOS _ LAYER _ III [ is _ pos ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis _ ratio _ r Ġ= Ġif Ġ( is _ pos Ġ== Ġ 6 ) Ġ 0 f Ġelse Ġ 1 . 0 f Ġ/ Ġ( 1 . 0 f Ġ+ ĠIS _ RAT IOS _ LAYER _ III [ is _ pos ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow Ġdecode Ġall Ġsamples Ġin Ġthis Ġscale Ġfactor Ġband ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġs fb _ start Ġuntil Ġs fb _ stop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` is ` [( 0 Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġi ] Ġ*= Ġis _ ratio _ l ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` is ` [( 1 Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġi ] Ġ*= Ġis _ ratio _ r ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġif Ġ( not Ġillegal Ġis _ pos ) Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} Ġ/* Ġend Ġfor Ġ( win ... Ġ*/ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġst ereo _ long _ III (` is `: ĠFloat Array , Ġscale fac _ l : ĠInt Array , Ġgr : ĠInt , Ġs fb : ĠInt , Ġsampling Frequency : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis _ pos : ĠInt ĊĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġthat Ġ(( is _ pos [ s fb ]= scale fac ) Ġ!= Ġ 7 ) Ġ=> Ġno Ġintensity Ġst ereo Ġ*/ if Ġ(( scale fac _ l [( 0 Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( gr Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġis _ pos Ġ= Ġit Ġ}) Ġ!= Ġ 7 ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs fb _ start : ĠInt Ġ= ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 0 Ġ+ Ġs fb ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs fb _ stop : ĠInt Ġ= ĠSC ALE FACTOR _ BAND _ IND ICES _ LAYER _ III [( sampling Frequency Ġ* Ġ( 2 3 Ġ+ Ġ 1 4 )) Ġ+ Ġ 0 Ġ+ Ġs fb Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis _ ratio _ l : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis _ ratio _ r : ĠFloat ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġtan (( 6 * PI )/ 1 2 Ġ= ĠPI / 2 ) Ġneeds Ġspecial Ġtreatment ! Ġ*/ if Ġ( is _ pos Ġ== Ġ 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ ratio _ l Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ ratio _ r Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ ratio _ l Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIS _ RAT IOS _ LAYER _ III [ is _ pos ] Ġ/ Ġ( 1 . 0 f Ġ+ ĠIS _ RAT IOS _ LAYER _ III [ is _ pos ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ ratio _ r Ġ= Ġ 1 . 0 f Ġ/ Ġ( 1 . 0 f Ġ+ ĠIS _ RAT IOS _ LAYER _ III [ is _ pos ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠNow Ġdecode Ġall Ġsamples Ġin Ġthis Ġscale Ġfactor Ġband Ġ*/ for Ġ( i Ġin Ġs fb _ start Ġuntil Ġs fb _ stop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` is ` [( 0 Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġi ] Ġ*= Ġis _ ratio _ l ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` is ` [( 1 Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġi ] Ġ*= Ġis _ ratio _ r ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġre quant ize _ short _ III ( ĊĠĠĠĠĠĠĠ Ġgr : ĠInt , ĊĠĠĠĠĠĠĠ Ġch : ĠInt , ĊĠĠĠĠĠĠĠ Ġscale fac _ scale : ĠInt Array , ĊĠĠĠĠĠĠĠ Ġsub block _ gain : ĠInt Array , ĊĠĠĠĠĠĠĠ Ġglobal _ gain : ĠInt Array , ĊĠĠĠĠĠĠĠ Ġscale fac _ s : ĠInt Array , ĊĠĠĠĠĠĠĠ Ġ` is `: ĠFloat Array , ĊĠĠĠĠĠĠĠ Ġis _ pos : ĠInt , ĊĠĠĠĠĠĠĠ Ġs fb : ĠInt , ĊĠĠĠĠĠĠĠ Ġwin : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsf _ mult : ĠFloat Ġ= Ġif Ġ( scale fac _ scale [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ!= Ġ 0 ) Ġ 1 . 0 f Ġelse Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġval Ġtmp 1 Ġ= Ġif Ġ( s fb Ġ< Ġ 1 2 ) Ġpow ( 2 . 0 , Ġ-( sf _ mult Ġ* Ġscale fac _ s [( ch Ġ* Ġ 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ( s fb Ġ* Ġ 3 ) Ġ+ Ġwin ]). toDouble ()). toFloat () Ġelse Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġval Ġtmp 2 : ĠFloat Ġ= Ġpow ( 2 . 0 , Ġ 0 . 2 5 f Ġ* Ġ( global _ gain [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ- Ġ 2 1 0 . 0 f Ġ- Ġ( 8 . 0 f Ġ* Ġ( sub block _ gain [( ch Ġ* Ġ 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 3 ) Ġ+ Ġwin ])) ). toDouble ()). toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġtmp 3 : ĠFloat Ġ= Ġif Ġ(` is ` [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġis _ pos ] Ġ< Ġ 0 . 0 ) Ġ- PO WT AB _ LAYER _ III [ (- ` is ` [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġis _ pos ]). toInt ()] Ġelse ĠPO WT AB _ LAYER _ III [` is ` [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġis _ pos ]. toInt ()] ĊĠĠĠĠĠĠĠ Ġ` is ` [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġis _ pos ] Ġ= Ġtmp 1 Ġ* Ġtmp 2 Ġ* Ġtmp 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġre quant ize _ long _ III ( ĊĠĠĠĠĠĠĠ Ġgr : ĠInt , ĊĠĠĠĠĠĠĠ Ġch : ĠInt , ĊĠĠĠĠĠĠĠ Ġscale fac _ scale : ĠInt Array , ĊĠĠĠĠĠĠĠ Ġpref lag : ĠInt Array , ĊĠĠĠĠĠĠĠ Ġglobal _ gain : ĠInt Array , ĊĠĠĠĠĠĠĠ Ġscale fac _ l : ĠInt Array , ĊĠĠĠĠĠĠĠ Ġ` is `: ĠFloat Array , ĊĠĠĠĠĠĠĠ Ġis _ pos : ĠInt , ĊĠĠĠĠĠĠĠ Ġs fb : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsf _ mult : ĠFloat Ġ= Ġif Ġ( scale fac _ scale [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ!= Ġ 0 ) Ġ 1 . 0 f Ġelse Ġ 0 . 5 f ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġtable Ġcache ĠMath . pow Ġ 2 Ġ? Ġfaster Ġalternative ? ĊĠĠĠĠĠĠĠ Ġval Ġtmp 1 Ġ= Ġif Ġ( s fb Ġ< Ġ 2 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpf _ x _ pt : ĠFloat Ġ= Ġpref lag [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ* ĠREQ U ANTI ZE _ LONG _ PRE TAB _ LAYER _ III [ s fb ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpow ( 2 . 0 , Ġ-( sf _ mult Ġ* Ġ( scale fac _ l [( ch Ġ* Ġ 2 Ġ* Ġ 2 1 ) Ġ+ Ġ( gr Ġ* Ġ 2 1 ) Ġ+ Ġs fb ] Ġ+ Ġpf _ x _ pt )). toDouble ()). toFloat () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtmp 2 : ĠFloat Ġ= Ġpow ( 2 . 0 , Ġ 0 . 2 5 f Ġ* Ġ( global _ gain [ ch Ġ* Ġ 2 Ġ+ Ġgr ] Ġ- Ġ 2 1 0 ). toDouble ()). toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġtmp 3 Ġ= Ġif Ġ(` is ` [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġis _ pos ] Ġ< Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- PO WT AB _ LAYER _ III [ (- ` is ` [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġis _ pos ]). toInt ()] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPO WT AB _ LAYER _ III [` is ` [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġis _ pos ]. toInt ()] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ` is ` [( ch Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) Ġ+ Ġ( gr Ġ* Ġ 5 7 6 ) Ġ+ Ġis _ pos ] Ġ= Ġtmp 1 Ġ* Ġtmp 2 Ġ* Ġtmp 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġh uff man _ III ( main DataReader : ĠMain DataReader , Ġtable _ num : ĠInt , Ġarray : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠTable Ġentries Ġare Ġ 1 6 Ġbits Ġeach : ĊĠĠĠĠĠĠĠ Ġ* ĠBit ( s ) ĊĠĠĠĠĠĠĠ Ġ* Ġ 1 5 ĠĠĠĠ Ġhit / miss Ġ( 1 / 0 ) ĊĠĠĠĠĠĠĠ Ġ* Ġ 1 4 - 1 3 Ġ Ġcode word Ġsize Ġ( 1 - 4 Ġbits ) ĊĠĠĠĠĠĠĠ Ġ* Ġ 7 - 0 ĠĠĠ Ġcode word Ġ( bits Ġ 4 - 7 = x , Ġ 0 - 3 = y ) Ġif Ġhit ĊĠĠĠĠĠĠĠ Ġ* Ġ 1 2 - 0 ĠĠ Ġstart Ġoffset Ġof Ġnext Ġtable Ġif Ġmiss ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġpoint : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcurr pos : ĠInt ĊĊĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġfor Ġempty Ġtables Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( HU FF MAN _ TRE EL EN _ LAYER _ III [ table _ num ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 3 ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 2 ] Ġ= Ġarray [ 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 1 ] Ġ= Ġarray [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 0 ] Ġ= Ġarray [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtre elen : ĠInt Ġ= ĠH UFF MAN _ TRE EL EN _ LAYER _ III [ table _ num ] ĊĠĠĠĠĠĠĠ Ġval Ġlin bits : ĠInt Ġ= ĠH UFF MAN _ LIN BITS _ LAYER _ III [ table _ num ] ĊĠĠĠĠĠĠĠ Ġval Ġoffset : ĠInt Ġ= ĠH UFF MAN _ TABLE _ OFFSET _ LAYER _ III [ table _ num ] ĊĠĠĠĠĠĠĠ Ġvar Ġerror : ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġbits left : ĠInt Ġ= Ġ 3 2 ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĠĠ Ġ/* ĠStart Ġreading Ġthe ĠH uff man Ġcode Ġword , bit Ġby Ġbit Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġif Ġwe 've Ġmatched Ġa Ġcode Ġword Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( HU FF MAN _ TABLE _ LAYER _ III [ offset Ġ+ Ġpoint ] Ġand Ġ 0 xff 0 0 ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 0 ] Ġ= Ġ( HU FF MAN _ TABLE _ LAYER _ III [ offset Ġ+ Ġpoint ] Ġshr Ġ 4 ) Ġand Ġ 0 xf ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 1 ] Ġ= ĠH UFF MAN _ TABLE _ LAYER _ III [ offset Ġ+ Ġpoint ] Ġand Ġ 0 xf ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read ( main DataReader , Ġ 1 ) Ġ!= Ġ 0 ) Ġ{ Ġ/* ĠGo Ġright Ġin Ġtree Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(( HU FF MAN _ TABLE _ LAYER _ III [ offset Ġ+ Ġpoint ] Ġand Ġ 0 xff ) Ġ>= Ġ 2 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ+= ĠH UFF MAN _ TABLE _ LAYER _ III [ offset Ġ+ Ġpoint ] Ġand Ġ 0 xff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ+= ĠH UFF MAN _ TABLE _ LAYER _ III [ offset Ġ+ Ġpoint ] Ġand Ġ 0 xff ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ/* ĠGo Ġleft Ġin Ġtree Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(( HU FF MAN _ TABLE _ LAYER _ III [ offset Ġ+ Ġpoint ] Ġshr Ġ 8 ) Ġ>= Ġ 2 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ+= ĠH UFF MAN _ TABLE _ LAYER _ III [ offset Ġ+ Ġpoint ] Ġshr Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ+= ĠH UFF MAN _ TABLE _ LAYER _ III [ offset Ġ+ Ġpoint ] Ġshr Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ(( -- bits left Ġ> Ġ 0 ) Ġ&& Ġ( point Ġ< Ġtre elen )) ĊĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġ 0 ) Ġ{ Ġ Ġ/* ĠCheck Ġfor Ġerror . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 1 ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 0 ] Ġ= Ġarray [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(" Illegal ĠH uff Ġcode Ġin Ġdata . Ġb left Ġ= Ġ% d , point Ġ= Ġ% d . Ġtab Ġ= Ġ% d ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbits left Ġ+ Ġ" Ġ" Ġ+ Ġpoint Ġ+ Ġ" Ġ" Ġ+ Ġtable _ num ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/* ĠProcess Ġsign Ġen codings Ġfor Ġquadr uples Ġtables . Ġ*/ if Ġ( table _ num Ġ> Ġ 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 2 ] Ġ= Ġ( array [ 1 ] Ġshr Ġ 3 ) Ġand Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 3 ] Ġ= Ġ( array [ 1 ] Ġshr Ġ 2 ) Ġand Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 0 ] Ġ= Ġ( array [ 1 ] Ġshr Ġ 1 ) Ġand Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 1 ] Ġ= Ġ( array [ 1 ] Ġshr Ġ 0 ) Ġand Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( array [ 2 ] Ġ> Ġ 0 ) Ġif Ġ( read ( main DataReader , Ġ 1 ) Ġ== Ġ 1 ) Ġarray [ 2 ] Ġ= Ġ- array [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( array [ 3 ] Ġ> Ġ 0 ) Ġif Ġ( read ( main DataReader , Ġ 1 ) Ġ== Ġ 1 ) Ġarray [ 3 ] Ġ= Ġ- array [ 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( array [ 0 ] Ġ> Ġ 0 ) Ġif Ġ( read ( main DataReader , Ġ 1 ) Ġ== Ġ 1 ) Ġarray [ 0 ] Ġ= Ġ- array [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( array [ 1 ] Ġ> Ġ 0 ) Ġif Ġ( read ( main DataReader , Ġ 1 ) Ġ== Ġ 1 ) Ġarray [ 1 ] Ġ= Ġ- array [ 1 ] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠGet Ġlin bits Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( lin bits Ġ> Ġ 0 ) Ġ&& Ġ( array [ 0 ] Ġ== Ġ 1 5 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 0 ] Ġ+= Ġread ( main DataReader , Ġlin bits ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠGet Ġsign Ġbit Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( array [ 0 ] Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read ( main DataReader , Ġ 1 ) Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 0 ] Ġ= Ġ- array [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠGet Ġlin bits Ġ*/ if Ġ(( lin bits Ġ> Ġ 0 ) Ġ&& Ġ( array [ 1 ] Ġ== Ġ 1 5 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 1 ] Ġ+= Ġread ( main DataReader , Ġlin bits ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠGet Ġsign Ġbit Ġ*/ if Ġ( array [ 1 ] Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read ( main DataReader , Ġ 1 ) Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ 1 ] Ġ= Ġ- array [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġsamples _ I ( buffer : ĠBuffer , Ġst ereo : ĠInt , Ġbound : ĠInt , Ġs 1 d : ĠSamples IData ): ĠFloat Array ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbound : ĠInt Ġ= Ġbound ĊĠĠĠĠĠĠĠ Ġif Ġ( bound Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbound Ġ= Ġ 3 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġs 1 d . reset () ĊĠĠĠĠĠĠĠ Ġval Ġallocation Ġ= Ġs 1 d . allocation ĊĠĠĠĠĠĠĠ Ġval Ġallocation Channel Ġ= Ġs 1 d . allocation Channel ĊĠĠĠĠĠĠĠ Ġval Ġscale factor Channel Ġ= Ġs 1 d . scale factor Channel ĊĠĠĠĠĠĠĠ Ġval Ġsample Decoded Ġ= Ġs 1 d . sample Decoded ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġ 0 Ġuntil Ġbound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallocation Channel [ ch Ġ* Ġbound Ġ+ Ġsb ] Ġ= Ġread ( buffer , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġbound .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallocation [ sb Ġ- Ġbound ] Ġ= Ġread ( buffer , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġ 0 Ġuntil Ġbound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( allocation Channel [ ch Ġ* Ġbound Ġ+ Ġsb ] Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ ch Ġ* Ġ 3 2 Ġ+ Ġsb ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġbound .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( allocation [ sb Ġ- Ġbound ] Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ ch Ġ* Ġ 3 2 Ġ+ Ġsb ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġ 0 .. 1 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġ 0 Ġuntil Ġbound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn : ĠInt Ġ= Ġallocation Channel [ ch Ġ* Ġbound Ġ+ Ġsb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [( ch Ġ* Ġ 3 2 Ġ* Ġ 1 2 ) Ġ+ Ġ( sb Ġ* Ġ 1 2 ) Ġ+ Ġs ] Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread : ĠInt Ġ= Ġread ( buffer , Ġn Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfraction : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ((( read Ġshr Ġn ) Ġand Ġ 1 ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfraction Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfraction Ġ+= Ġ( read Ġand Ġ(( 1 Ġshl Ġn ) Ġ- Ġ 1 )). toFloat () Ġ/ Ġ( 1 Ġshl Ġn ) Ġ+ Ġ 1 f Ġ/ Ġ( 1 Ġshl Ġn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs fc Ġ= Ġscale factor Channel [ ch Ġ* Ġ 3 2 Ġ+ Ġsb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" s fc : Ġ$ s fc , Ġn + 1 : Ġ${ n Ġ+ Ġ 1 }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ+ Ġ 1 Ġ>= ĠPRE _ FR ACT OR _ LAYER _ I . size ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [( ch Ġ* Ġ 3 2 Ġ* Ġ 1 2 ) Ġ+ Ġ( sb Ġ* Ġ 1 2 ) Ġ+ Ġs ] Ġ= ĠSC ALE FACT ORS [ s fc ] Ġ* ĠPRE _ FR ACT OR _ LAYER _ I [ n Ġ+ Ġ 1 ] Ġ* Ġfraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġbound .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs bb Ġ= Ġsb Ġ- Ġbound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s bb Ġ< Ġ 0 Ġ|| Ġs bb Ġ>= Ġallocation Channel . size ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn : ĠInt Ġ= Ġallocation Channel [ s bb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [( 1 Ġ* Ġ 3 2 Ġ* Ġ 1 2 ) Ġ+ Ġ( sb Ġ* Ġ 1 2 ) Ġ+ Ġs ] Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [( 0 Ġ* Ġ 3 2 Ġ* Ġ 1 2 ) Ġ+ Ġ( sb Ġ* Ġ 1 2 ) Ġ+ Ġs ] Ġ= Ġsample Decoded [( 1 Ġ* Ġ 3 2 Ġ* Ġ 1 2 ) Ġ+ Ġ( sb Ġ* Ġ 1 2 ) Ġ+ Ġs ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread : ĠInt Ġ= Ġread ( buffer , Ġn Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfraction : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ((( read Ġshr Ġn ) Ġand Ġ 1 ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfraction Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfraction Ġ+= Ġ( read Ġand Ġ(( 1 Ġshl Ġn ) Ġ- Ġ 1 )). toFloat () Ġ/ Ġ( 1 Ġshl Ġn ) Ġ+ Ġ 1 f Ġ/ Ġ( 1 Ġshl Ġn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 .. 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ+ Ġ 1 Ġ>= ĠPRE _ FR ACT OR _ LAYER _ I . size ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [( ch Ġ* Ġ 3 2 Ġ* Ġ 1 2 ) Ġ+ Ġ( sb Ġ* Ġ 1 2 ) Ġ+ Ġs ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE FACT ORS [ scale factor Channel [ ch Ġ* Ġ 3 2 Ġ+ Ġsb ]] Ġ* ĠPRE _ FR ACT OR _ LAYER _ I [ n Ġ+ Ġ 1 ] Ġ* Ġfraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsample Decoded ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġsamples _ II ( buffer : ĠBuffer , Ġst ereo : ĠInt , Ġbound : ĠInt , Ġbit rate : ĠInt , Ġfrequency : ĠInt , Ġs 2 d : ĠSamples II Data ): ĠFloat Array Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbound : ĠInt Ġ= Ġbound ĊĠĠĠĠĠĠĠ Ġval Ġsb Index Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrequency Ġ!= Ġ 4 8 0 0 0 Ġ&& Ġ( bit rate Ġ>= Ġ 9 6 0 0 0 Ġ|| Ġbit rate Ġ== Ġ 0 ) Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrequency Ġ!= Ġ 3 2 0 0 0 Ġ&& Ġ( bit rate Ġin Ġ 1 .. 4 8 0 0 0 ) Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrequency Ġ== Ġ 3 2 0 0 0 Ġ&& Ġ( bit rate Ġin Ġ 1 .. 4 8 0 0 0 ) Ġ-> Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsb Limit : ĠInt Ġ= ĠSB _ LIMIT [ sb Index ] ĊĠĠĠĠĠĠĠ Ġif Ġ( bound Ġ< Ġ 0 ) Ġbound Ġ= Ġsb Limit ĊĊĠĠĠĠĠĠĠ Ġs 2 d . reset () ĊĠĠĠĠĠĠĠ Ġval Ġallocation Ġ= Ġs 2 d . allocation ĊĠĠĠĠĠĠĠ Ġval Ġallocation Channel Ġ= Ġs 2 d . allocation Channel ĊĠĠĠĠĠĠĠ Ġval Ġs cf si Ġ= Ġs 2 d . sc fs i ĊĠĠĠĠĠĠĠ Ġval Ġscale factor Channel Ġ= Ġs 2 d . scale factor Channel ĊĠĠĠĠĠĠĠ Ġval Ġsample Decoded Ġ= Ġs 2 d . sample Decoded ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġ 0 Ġuntil Ġbound ) Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġallocation Channel [ ch Ġ* Ġbound Ġ+ Ġsb ] Ġ= Ġread ( buffer , ĠNB AL [ sb Index ][ sb ]) ĊĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġbound Ġuntil Ġsb Limit ) Ġallocation [ sb Ġ- Ġbound ] Ġ= Ġread ( buffer , ĠNB AL [ sb Index ][ sb ]) ĊĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġ 0 Ġuntil Ġbound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( allocation Channel [ ch Ġ* Ġbound Ġ+ Ġsb ] Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs cf si [ ch Ġ* Ġsb Limit Ġ+ Ġsb ] Ġ= Ġread ( buffer , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġbound Ġuntil Ġsb Limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( allocation [ sb Ġ- Ġbound ] Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs cf si [ ch Ġ* Ġsb Limit Ġ+ Ġsb ] Ġ= Ġread ( buffer , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġ 0 Ġuntil Ġbound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( allocation Channel [ ch Ġ* Ġbound Ġ+ Ġsb ] Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset : ĠInt Ġ= Ġch Ġ* Ġsb Limit Ġ* Ġ 3 Ġ+ Ġsb Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( sc fs i [ ch Ġ* Ġsb Limit Ġ+ Ġsb ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 0 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 1 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 2 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 1 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 0 ] Ġ= Ġscale factor Channel [ offset Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 2 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 2 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 1 ] Ġ= Ġscale factor Channel [ offset Ġ+ Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 0 ] Ġ= Ġscale factor Channel [ offset Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 0 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 2 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 1 ] Ġ= Ġscale factor Channel [ offset Ġ+ Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġbound Ġuntil Ġsb Limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( allocation [ sb Ġ- Ġbound ] Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset : ĠInt Ġ= Ġch Ġ* Ġsb Limit Ġ* Ġ 3 Ġ+ Ġsb Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( sc fs i [ ch Ġ* Ġsb Limit Ġ+ Ġsb ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 0 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 1 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 2 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 1 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 0 ] Ġ= Ġscale factor Channel [ offset Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 2 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 2 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 1 ] Ġ= Ġscale factor Channel [ offset Ġ+ Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 0 ] Ġ= Ġscale factor Channel [ offset Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 0 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 2 ] Ġ= Ġread ( buffer , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel [ offset Ġ+ Ġ 1 ] Ġ= Ġscale factor Channel [ offset Ġ+ Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( gr Ġin Ġ 0 .. 1 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġ 0 Ġuntil Ġbound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn : ĠInt Ġ= Ġallocation Channel [ ch Ġ* Ġbound Ġ+ Ġsb ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset : ĠInt Ġ= Ġ( ch Ġ* Ġ 3 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ( sb Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ* Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [ offset Ġ+ Ġ 2 ] Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [ offset Ġ+ Ġ 1 ] Ġ= Ġsample Decoded [ offset Ġ+ Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [ offset ] Ġ= Ġsample Decoded [ offset Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt Ġ= ĠQU ANTI Z ATION _ INDEX _ LAYER _ II [ sb Index ][ sb ][ n Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Int : ĠInt Array Ġ= Ġs 2 d . temp Sample Int ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Bits : ĠInt Ġ= ĠB ITS _ LAYER _ II [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn levels : ĠInt Ġ= ĠN LEVEL S [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( GROUP ING _ LAYER _ II [ index ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsample code : ĠInt Ġ= Ġread ( buffer , Ġsample Bits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 0 ] Ġ= Ġsample code Ġ% Ġn levels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample code Ġ/= Ġn levels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 1 ] Ġ= Ġsample code Ġ% Ġn levels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample code Ġ/= Ġn levels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 2 ] Ġ= Ġsample code Ġ% Ġn levels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 0 ] Ġ= Ġread ( buffer , Ġsample Bits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 1 ] Ġ= Ġread ( buffer , Ġsample Bits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 2 ] Ġ= Ġread ( buffer , Ġsample Bits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġm sb : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(( 1 Ġshl Ġm sb ) Ġ<= Ġn levels ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm sb ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm sb -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsample : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ((( sample Int [ i ] Ġshr Ġm sb ) Ġand Ġ 1 ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Ġ+= Ġ( sample Int [ i ] Ġand Ġ(( 1 Ġshl Ġm sb ) Ġ- Ġ 1 )). toFloat () Ġ/ Ġ( 1 Ġshl Ġm sb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Ġ+= ĠD _ LAYER _ II [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Ġ*= ĠC _ LAYER _ II [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Ġ*= ĠSC ALE FACT ORS [ scale factor Channel [( ch Ġ* Ġsb Limit Ġ* Ġ 3 ) Ġ+ Ġ( sb Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ/ Ġ 4 )] ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [ offset Ġ+ Ġi ] Ġ= Ġsample ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sb Ġin Ġbound Ġuntil Ġsb Limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn : ĠInt Ġ= Ġallocation [ sb Ġ- Ġbound ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset : ĠInt Ġ= Ġsb Ġ* Ġ 1 2 Ġ* Ġ 3 Ġ+ Ġgr Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [ offset Ġ+ Ġ( ch Ġ* Ġ 3 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ 2 ] Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [ offset Ġ+ Ġ( ch Ġ* Ġ 3 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ 1 ] Ġ= Ġsample Decoded [ offset Ġ+ Ġ( ch Ġ* Ġ 3 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [ offset Ġ+ Ġch Ġ* Ġ 3 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ] Ġ= Ġsample Decoded [ offset Ġ+ Ġ( ch Ġ* Ġ 3 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt Ġ= ĠQU ANTI Z ATION _ INDEX _ LAYER _ II [ sb Index ][ sb ][ n Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Int : ĠInt Array Ġ= Ġs 2 d . temp Sample Int ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Bits : ĠInt Ġ= ĠB ITS _ LAYER _ II [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn levels : ĠInt Ġ= ĠN LEVEL S [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( GROUP ING _ LAYER _ II [ index ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsample code : ĠInt Ġ= Ġread ( buffer , Ġsample Bits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 0 ] Ġ= Ġsample code Ġ% Ġn levels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample code Ġ/= Ġn levels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 1 ] Ġ= Ġsample code Ġ% Ġn levels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample code Ġ/= Ġn levels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 2 ] Ġ= Ġsample code Ġ% Ġn levels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 0 ] Ġ= Ġread ( buffer , Ġsample Bits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 1 ] Ġ= Ġread ( buffer , Ġsample Bits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Int [ 2 ] Ġ= Ġread ( buffer , Ġsample Bits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġm sb : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(( 1 Ġshl Ġm sb ) Ġ<= Ġn levels ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm sb ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm sb -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsample : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ((( sample Int [ i ] Ġshr Ġm sb ) Ġand Ġ 1 ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Ġ+= Ġ( sample Int [ i ] Ġand Ġ(( 1 Ġshl Ġm sb ) Ġ- Ġ 1 )). toFloat () Ġ/ Ġ( 1 Ġshl Ġm sb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Ġ+= ĠD _ LAYER _ II [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Ġ*= ĠC _ LAYER _ II [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded [ offset Ġ+ Ġ( ch Ġ* Ġ 3 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ+ Ġi ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsample Ġ* ĠSC ALE FACT ORS [ scale factor Channel [( ch Ġ* Ġsb Limit Ġ* Ġ 3 ) Ġ+ Ġ( sb Ġ* Ġ 3 ) Ġ+ Ġ( gr Ġ/ Ġ 4 )] ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsample Decoded ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġsyn th ( sound Data : ĠSound Data , Ġsamples : ĠFloat Array , Ġsyn th Offset : ĠInt Array , Ġsyn th Buffer : ĠFloat Array , Ġst ereo : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize : ĠInt Ġ= Ġsamples . size Ġ/ Ġst ereo Ġ/ Ġ 3 2 ĊĠĠĠĠĠĠĠ Ġval Ġp cm : ĠFloat Array Ġ= Ġsound Data . pcm Temp ĊĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġ 0 Ġuntil Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsyn th Offset [ ch ] Ġ= Ġ( syn th Offset [ ch ] Ġ- Ġ 6 4 ) Ġand Ġ 0 x 3 ff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 6 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= ĠN IK _ CO EFF IC IENT S [ i Ġ* Ġ 3 2 Ġ+ Ġk ] Ġ* Ġsamples [( ch Ġ* Ġ 3 2 Ġ* Ġsize ) Ġ+ Ġ( k Ġ* Ġsize ) Ġ+ Ġs ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsyn th Buffer [( ch Ġ* Ġ 1 0 2 4 ) Ġ+ Ġsyn th Offset [ ch ] Ġ+ Ġi ] Ġ= Ġsum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 1 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk : ĠInt Ġ= Ġj Ġ+ Ġ( i Ġshl Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= ĠDI _ CO EFF IC IENT S [ k ] Ġ* Ġsyn th Buffer [ ch Ġ* Ġ 1 0 2 4 Ġ+ Ġ(( syn th Offset [ ch ] Ġ+ Ġ( k Ġ+ Ġ((( i Ġ+ Ġ 1 ) Ġshr Ġ 1 ) Ġshl Ġ 6 ))) Ġand Ġ 0 x 3 FF )] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp cm [( s Ġ* Ġ 3 2 Ġ* Ġst ereo ) Ġ+ Ġ( j Ġ* Ġst ereo ) Ġ+ Ġch ] Ġ= Ġsum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsamples Buffer Ġ= Ġsound Data . get Samples Buffer ( size Ġ* Ġ 3 2 Ġ* Ġst ereo Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize Ġ* Ġ 3 2 Ġ* Ġst ereo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Ġ= ĠSample Convert . float To Short ( pcm [ i ]). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsamples Buffer [ i Ġ* Ġ 2 Ġ+ Ġ 0 ] Ġ= Ġsample . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsamples Buffer [ i Ġ* Ġ 2 Ġ+ Ġ 1 ] Ġ= Ġ( sample Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpow ( b : ĠDouble , Ġe : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb . pow ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġread ( reader : ĠMain DataReader , Ġbits : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbits : ĠInt Ġ= Ġbits ĊĠĠĠĠĠĠĠ Ġvar Ġnumber : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( bits Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadvance : ĠInt Ġ= Ġmin ( bits , Ġ 8 Ġ- Ġreader . current ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbits Ġ-= Ġadvance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreader . current Ġ+= Ġadvance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ= Ġnumber Ġor Ġ( ((( reader . array [ reader . index ]. toInt () Ġand Ġ 0 xFF ) Ġ ush r Ġ( 8 Ġ- Ġreader . current )) Ġand Ġ( 0 xFF Ġ ush r Ġ( 8 Ġ- Ġadvance ))) Ġshl Ġbits ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reader . current Ġ== Ġ 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . current Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . index ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnumber ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġread ( buffer : ĠBuffer , Ġbits : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbits : ĠInt Ġ= Ġbits ĊĠĠĠĠĠĠĠ Ġvar Ġnumber : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( bits Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadvance : ĠInt Ġ= Ġmin ( bits , Ġ 8 Ġ- Ġbuffer . current ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbits Ġ-= Ġadvance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . current Ġ+= Ġadvance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bits Ġ!= Ġ 0 Ġ&& Ġbuffer . last Byte Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠEOF Exception (" Unexpected ĠEOF Ġreached Ġin ĠM PEG Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ= Ġnumber Ġor Ġ((( buffer . last Byte Ġ ush r Ġ( 8 Ġ- Ġbuffer . current )) Ġand Ġ( 0 xFF Ġ ush r Ġ( 8 Ġ- Ġadvance ))) Ġshl Ġbits ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buffer . current Ġ== Ġ 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . current Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . last Byte Ġ= Ġbuffer . inp . read () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnumber ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġread Into ( buffer : ĠBuffer , Ġarray : ĠByteArray , Ġoffset : ĠInt , Ġlength : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( buffer . current Ġ!= Ġ 0 ) Ġ// ĠTODO Ġremove ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" buffer Ġcurrent Ġis Ġ" Ġ+ Ġbuffer . current ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( buffer . last Byte Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠEOF Exception (" Unexpected ĠEOF Ġreached Ġin ĠM PEG Ġdata ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġarray [ offset ] Ġ= Ġbuffer . last Byte . to Byte () ĊĠĠĠĠĠĠĠ Ġvar Ġread : ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( read Ġ< Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Ġ+= Ġbuffer . inp . read ( array , Ġoffset Ġ+ Ġread , Ġlength Ġ- Ġread ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuffer . last Byte Ġ= Ġbuffer . inp . read () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass Ġ ĠFrame Header Ġinternal Ġconstructor ( sound Data : ĠSound Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsig Bytes : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġversion : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayer : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġprotection Bit : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġbit rate Index : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsampling Frequency : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġpadding Bit : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġprivate Bit : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmode : ĠInt Ġ= Ġ 0 Ġ// Ġ 0 = stere o , Ġ 1 = intensity _ stere o , Ġ 2 = dual _ channel , Ġ 3 = single _ channel ĊĠĠĠĠĠĠĠ Ġval Ġn channels Ġget () Ġ= Ġif Ġ( mode Ġ== Ġ 3 ) Ġ 1 Ġelse Ġ 2 ĊĠĠĠĠĠĠĠ Ġvar Ġmode Extension : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġset ( sound Data : ĠSound Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpreviously Ġaborted Ġdata Ġreads Ġmight Ġhave Ġleft Ġthe ĠBuffer Ġoff Ġa Ġbyte ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġboundary , Ġso Ġreset Ġback Ġto Ġreading Ġfrom Ġthe Ġbeginning Ġof Ġthe Ġbyte ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . buffer . current Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġread Ġ 4 Ġbyte Ġheader Ġwith Ġpossibility Ġof Ġrollback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . buffer . mark ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsig Bytes Ġ= Ġread ( sound Data . buffer , Ġ 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġread ( sound Data . buffer , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer Ġ= Ġread ( sound Data . buffer , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprotection Bit Ġ= Ġread ( sound Data . buffer , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit rate Index Ġ= Ġread ( sound Data . buffer , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsampling Frequency Ġ= Ġread ( sound Data . buffer , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding Bit Ġ= Ġread ( sound Data . buffer , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Bit Ġ= Ġread ( sound Data . buffer , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= Ġread ( sound Data . buffer , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode Extension Ġ= Ġread ( sound Data . buffer , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlast Ġ 4 Ġbits Ġignored ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread ( sound Data . buffer , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠEOF Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġenough Ġdata Ġfor Ġa Ġfull Ġheader , Ġso Ġjust Ġmark Ġheader Ġas Ġinvalid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsig Bytes Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġun Read ( sound Data : ĠSound Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . buffer . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsound Data . buffer . last Byte Ġ= Ġsig Bytes Ġ ush r Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġversion Ġcurrently Ġignored , Ġeven Ġthough Ġdecoder Ġonly Ġsupports ĠM PEG ĠV 1 Ġ( version Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠisValid : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( sig Bytes Ġ== Ġ 4 0 9 5 ) Ġ&& Ġ( Ġ// Ġversion Ġcurrently Ġignored , Ġeven Ġthough Ġdecoder Ġonly Ġsupports ĠM PEG ĠV 1 Ġ( version Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer Ġ!= Ġ 0 ) Ġ&& Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit rate Index Ġ!= Ġ 1 5 ) Ġ&& Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsampling Frequency Ġ!= Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set ( sound Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass Ġ ĠMain DataReader ( val Ġarray : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtop : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġindex : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠBuffer ( val Ġinp : ĠMark able Sync InputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinp With Pos Ġ= Ġinp Ġas ? ĠSync Position Stream ? ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlast Byte : ĠInt Ġ= Ġinp . read () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġmarked Pos Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġfun Ġmark ( count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinp . mark ( count ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinp . reset () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġseek ( pos : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinp With Pos ?. position Ġ= Ġpos ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarked Pos Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Byte Ġ= Ġinp . read () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSamples III Data Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMAX _ CHANNEL S Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġs cf si Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġpart 2 _ 3 _ length Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġbig _ values Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġglobal _ gain : ĠInt Array Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġscale fac _ compress : ĠInt Array Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġwin _ switch _ flag : ĠInt Array Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġblock _ type : ĠInt Array Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġmixed _ block _ flag : ĠInt Array Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġtable _ select : ĠInt Array Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 Ġ* Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġsub block _ gain : ĠInt Array Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 Ġ* Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġregion 0 _ count Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġregion 1 _ count Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġpref lag Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġscale fac _ scale Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġcount 1 table _ select Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġcount 1 Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġscale fac _ l Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 Ġ* Ġ 2 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġscale fac _ s Ġ= ĠInt Array ( MAX _ CHANNEL S Ġ* Ġ 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġ` is ` Ġ= ĠFloat Array ( MAX _ CHANNEL S Ġ* Ġ 2 Ġ* Ġ 5 7 6 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġh uff man Temp Ġ= ĠInt Array ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtemp Float L 3 NS ample s : ĠFloat Array Ġ= ĠFloat Array ( L 3 _ NS AMPLES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . fill ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtemp Float Array 3 6 : ĠFloat Array Ġ= ĠFloat Array ( 3 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . fill ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtemp Float Array 5 1 2 : ĠFloat Array Ġ= ĠFloat Array ( 5 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . fill ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtemp Float Array 3 2 : ĠFloat Array Ġ= ĠFloat Array ( 3 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . fill ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs cf si . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpart 2 _ 3 _ length . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbig _ values . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġglobal _ gain . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ compress . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwin _ switch _ flag . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock _ type . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmixed _ block _ flag . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtable _ select . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub block _ gain . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregion 0 _ count . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregion 1 _ count . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref lag . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ scale . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount 1 table _ select . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount 1 . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ l . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale fac _ s . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` is `. fill ( 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSamples II Data Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġst ereo Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsb Limit Ġ= Ġ 3 0 ĊĠĠĠĠĠĠĠ Ġval Ġallocation Ġ= ĠInt Array ( sb Limit ) ĊĠĠĠĠĠĠĠ Ġval Ġallocation Channel Ġ= ĠInt Array ( stere o Ġ* Ġsb Limit ) ĊĠĠĠĠĠĠĠ Ġval Ġs cf si Ġ= ĠInt Array ( stere o Ġ* Ġsb Limit ) ĊĠĠĠĠĠĠĠ Ġval Ġscale factor Channel Ġ= ĠInt Array ( stere o Ġ* Ġsb Limit Ġ* Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġsample Decoded Ġ= ĠFloat Array ( stere o Ġ* Ġ 3 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġtemp Sample Int : ĠInt Array Ġ= ĠInt Array ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// val Ġallocation Ġ= ĠInt Array ( sb Limit Ġ- Ġbound ) ĊĠĠĠĠĠĠĠ Ġ// val Ġallocation Channel Ġ= ĠInt Array ( stere o Ġ* Ġbound ) ĊĠĠĠĠĠĠĠ Ġ// val Ġs cf si Ġ= ĠInt Array ( stere o Ġ* Ġsb Limit ) ĊĠĠĠĠĠĠĠ Ġ// val Ġscale factor Channel Ġ= ĠInt Array ( stere o Ġ* Ġsb Limit Ġ* Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ// val Ġsample Decoded Ġ= ĠFloat Array ( stere o Ġ* Ġ 3 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallocation . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallocation Channel . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs cf si . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded . fill ( 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSamples IData Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġst ereo Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbound Ġ= Ġ 3 2 ĊĠĠĠĠĠĠĠ Ġval Ġallocation Ġ= ĠInt Array ( 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġallocation Channel Ġ= ĠInt Array ( stere o Ġ* Ġbound ) ĊĠĠĠĠĠĠĠ Ġval Ġscale factor Channel Ġ= ĠInt Array ( stere o Ġ* Ġ 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġsample Decoded Ġ= ĠFloat Array ( stere o Ġ* Ġ 3 2 Ġ* Ġ 1 2 ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallocation . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallocation Channel . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale factor Channel . fill ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsample Decoded . fill ( 0 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSound Data Ġinternal Ġconstructor ( internal Ġval Ġbuffer : ĠBuffer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs 3 d Ġby Ġlazy Ġ{ ĠSamples III Data () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġs 2 d Ġby Ġlazy Ġ{ ĠSamples II Data () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġs 1 d Ġby Ġlazy Ġ{ ĠSamples IData () Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġfrequency : ĠInt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġst ereo : ĠInt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġval Ġn channels Ġget () Ġ= Ġif Ġ( stere o Ġ== Ġ 1 ) Ġ 2 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġp cm Temp Ġ= ĠFloat Array ( 2 Ġ* Ġ 3 2 Ġ* Ġ 1 2 Ġ* Ġ 3 ) Ġ// Float Array ( size Ġ* Ġ 3 2 Ġ* Ġst ereo ) ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġsyn th Offset : ĠInt Array Ġ= Ġint ArrayOf ( 6 4 , Ġ 6 4 ) ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġsyn th Buffer : ĠFloat Array Ġ= ĠFloat Array ( 2 Ġ* Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġmain Data Ġ= ĠByteArray ( 2 Ġ* Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġstore Ġ= ĠFloat Array ( 2 Ġ* Ġ 3 2 Ġ* Ġ 1 8 ) ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġv Ġ= ĠFloat Array ( 2 Ġ* Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġmain DataReader Ġ= ĠMain DataReader ( main Data ) ĊĠĠĠĠĠĠĠ Ġ// internal Ġlateinit Ġvar Ġmain Data : ĠByteArray ĊĠĠĠĠĠĠĠ Ġ// internal Ġlateinit Ġvar Ġmain DataReader : ĠMain DataReader ĊĠĠĠĠĠĠĠ Ġ// internal Ġlateinit Ġvar Ġstore : ĠFloat Array ĊĠĠĠĠĠĠĠ Ġ// internal Ġlateinit Ġvar Ġv : ĠFloat Array ĊĠĠĠĠĠĠĠ Ġvar Ġ_ samples Buffer : ĠByteArray ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Samples Buffer ( size : ĠInt ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ samples Buffer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ samples Buffer Ġ= ĠByteArray ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ samples Buffer !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġseek ( pos : ĠLong ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// frequency Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// stere o Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// main DataReader . top Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġ( false ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain DataReader . index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain DataReader . current Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . seek ( pos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ