sig
  type t
  val length : Generator.S_Asio.t -> int
  val audio_length : Generator.S_Asio.t -> int
  val video_length : Generator.S_Asio.t -> int
  val remaining : Generator.S_Asio.t -> int
  val clear : Generator.S_Asio.t -> unit
  val fill : Generator.S_Asio.t -> Frame.t -> unit
  val add_metadata : Generator.S_Asio.t -> Frame.metadata -> unit
  val add_break :
    ?sync:[ `Drop | `Ignore | `Strict ] -> Generator.S_Asio.t -> unit
  val put_audio :
    Generator.S_Asio.t -> Frame.audio_t array -> int -> int -> unit
  val put_video :
    Generator.S_Asio.t -> Frame.video_t array -> int -> int -> unit
  val set_mode :
    Generator.S_Asio.t -> [ `Audio | `Both | `Undefined | `Video ] -> unit
end