///|
/// Decode and filter a closed timestamp range. This is a full sequential decode.
pub fn decode_range(
  data : Bytes,
  start : Int64,
  end : Int64,
) -> Array[Sample] raise CodecError {
  if start < 0L || end < start {
    raise Invalid("invalid time range")
  }
  let decoder = Decoder::new(data)
  let out = []
  while decoder.next() is Some(sample) {
    if sample.timestamp >= start && sample.timestamp <= end {
      out.push(sample)
    }
  }
  out
}