私はScodecを使ってFlacメタデータをデコードしています。仕様の1つは、ヘッダーとブロックが一緒に何回も繰り返すことができるということです。ヘッダーには、現在のヘッダー/ブロックコンボが最後かどうかを示すフラグがあります。ベクトル[N]のコーデック。ここでNはベクトルの終わりを指定します。
私はHeaderとBlockをデコードできましたが、この仕様でVectorベースを作成するにはどうすればいいですか?ここで
は//isLastBlock determines if this is the last Header/Block combo to decode.
case class Header(isLastBlock: Boolean)
//Some example data.
case class Block(someData: Int)
object Codec {
//Codec for Header
val headerCodec : Codec[Header] = bool.as[Header]
//Coded for Block
val blockCodec: Codec[Block] = int32.as[Block]
//We are guaranteed at least one Header/Block Combo, but how can we do this?
val headerBlock: Codec[(Header, Block, Vector[(Header, Block)])] = ???
}
scodecがこの機能を提供する場合わからない壊れたコードです。 2つのメソッドvectorOfNとsizedVectorは、デコードする前にアイテムの数を知る必要があるため動作しません。
メタデータとフレームCRCを解析できました。私がしようとしていることが実証できなかったので、そこに止まった。あなたが見たいと思うなら私のレポはここにあります。 https://github.com/OleTraveler/scodec-flac-decoder/blob/master/src/main/scala/com/ot/flac/decoder/ – OleTraveler