/* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . so y wiz . kor au . format . org . gr agr av arr . fl ac Ċ Ċ import Ġcom . so y wiz . k mem .* Ċ import Ġcom . so y wiz . kor au . format . org . gr agr av arr . ogg .* Ċ import Ġcom . so y wiz . kor au . format . org . gr agr av arr . ogg . audio .* Ċ import Ġcom . so y wiz . kor au . format . org . gr agr av arr . vor bis .* Ċ import Ġcom . so y wiz . kor io . stream .* Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġa Ġ[ Vor bis Comments ] Ġwith Ġa ĠFl ac Ġmetadata Ċ Ġ* Ġblock Ġheader , Ġrather Ġthan Ġthe Ġusual Ġvor bis Ġone . Ċ Ġ*/ Ċ class ĠFl ac Tags Ġ: ĠVor bis Style Comments , ĠO gg Audio Tags Header Ġ{ ĊĊ ĉ /** Ċĉ Ġ* ĠType Ġplus Ġthree Ġbyte Ġlength Ċĉ Ġ*/ Ċ ĉ override Ġval Ġheader Size : ĠInt Ċĉ ĉ get () Ġ= Ġ 4 ĊĊ ĉ constructor ( packet : ĠO gg Packet ) Ġ: Ġsuper ( packet , Ġ 4 ) Ġ{ ĊĊĉ ĉ // ĠVerify Ġthe Ġtype Ċĉ ĉ val Ġtype Ġ= Ġthis . data ! ![ 0 ] Ċĉ ĉ if Ġ( type Ġ!= ĠFl ac Metadata Block . V OR B IS _ COMMENT ) Ġ{ Ċĉĉ ĉ throw ĠIllegalArgumentException (" Invalid Ġtype Ġ$ type ") Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ constructor () Ġ: Ġsuper () Ġ{} ĊĊ ĉ /** Ċĉ Ġ* ĠFl ac Ġdoesn 't Ġdo Ġthe Ġfram ing Ġbit Ġif Ġthe Ġtags Ġare Ċĉ Ġ* Ġnull Ġpadded . Ċĉ Ġ*/ Ċ ĉ override Ġfun Ġhas F ram ing Bit (): ĠBoolean Ġ{ Ċĉ ĉ return Ġfalse Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠType Ġplus Ġthree Ġbyte Ġlength Ċĉ Ġ*/ Ċ ĉ override Ġfun Ġpopulate Metadata Header ( b : ĠByteArray , Ġdata Length : ĠInt ) Ġ{ Ċĉ ĉ b [ 0 ] Ġ= ĠFl ac Metadata Block . V OR B IS _ COMMENT Ċĉ ĉ IO Utils . put Int 3 BE ( b , Ġ 1 , Ġdata Length . to Long ()) Ċ ĉ } ĊĊ ĉ override Ġfun Ġpopulate Metadata Footer ( out : ĠSync OutputStream ) Ġ{ Ċĉ ĉ // ĠNo Ġfooter Ġneeded Ġon ĠFL AC ĠTag ĠPacket s Ċ ĉ } ĊĊ ĉ class ĠFl ac Tags As Metadata ( data : ĠByteArray ) Ġ: ĠFl ac Metadata Block ( Fl ac Metadata Block . V OR B IS _ COMMENT ) Ġ{ Ċĉ ĉ val Ġtags : ĠFl ac Tags ĊĊĉ ĉ override Ġval Ġdata : ĠByteArray Ċĉĉ ĉ get () Ġ= Ġtags . data !! ĊĊĉ ĉ init Ġ{ ĊĊĉĉ ĉ // ĠThis Ġis Ġthe Ġonly Ġmetadata Ġwhich Ġneeds Ġthe Ġtype Ċĉĉ ĉ // Ġ Ġand Ġlength Ġin Ġaddition Ġto Ġthe Ġmain Ġdata Ċĉĉ ĉ val Ġd Ġ= ĠByteArray ( data . size Ġ+ Ġ 4 ) Ċĉĉ ĉ d [ 0 ] Ġ= ĠFl ac Metadata Block . V OR B IS _ COMMENT Ċĉĉ ĉ arraycopy ( data , Ġ 0 , Ġd , Ġ 4 , Ġdata . size ) Ċĉĉ ĉ this . tags Ġ= ĠFl ac Tags ( O gg Packet ( d )) Ċĉ ĉ } ĊĊĉ ĉ protected Ġoverride Ġfun Ġwrite ( out : ĠSync OutputStream ) Ġ{ Ċĉĉ ĉ throw ĠIllegalStateException (" Must Ġnot Ġcall Ġdirectly ") Ċĉ ĉ } Ċ ĉ } Ċ } Ċ