sig
  type t
  type driver_kind_t = [ `FILE | `LIVE | `UNKNOWN ]
  type byte_format_t = [ `BIG_ENDIAN | `LITTLE_ENDIAN | `NATIVE | `UNKNOWN ]
  type driver_t = private {
    id : int;
    kind : Ao.driver_kind_t;
    short_name : string;
    name : string;
    comment : string;
    author : string;
    priority : int;
    preferred_byte_format : Ao.byte_format_t;
    options : string list;
  }
  exception Closed
  exception Invalid_value
  val get_default_driver : unit -> Ao.driver_t
  val drivers : Ao.driver_t list
  val open_live :
    ?bits:int ->
    ?rate:int ->
    ?channels:int ->
    ?channels_matrix:string ->
    ?byte_format:Ao.byte_format_t ->
    ?options:(string * string) list -> ?driver:Ao.driver_t -> unit -> Ao.t
  val open_file :
    ?bits:int ->
    ?rate:int ->
    ?channels:int ->
    ?channels_matrix:string ->
    ?byte_format:Ao.byte_format_t ->
    ?options:(string * string) list ->
    ?driver:Ao.driver_t -> ?overwrite:bool -> string -> Ao.t
  val find_driver : string -> Ao.driver_t
  val play : Ao.t -> string -> unit
  val close : Ao.t -> unit
  val driver_kind : Ao.driver_t -> Ao.driver_kind_t
  val driver_name : Ao.driver_t -> string
  val driver_short_name : Ao.driver_t -> string
  val driver_comment : Ao.driver_t -> string
  val driver_author : Ao.driver_t -> string
  val driver_priority : Ao.driver_t -> int
  val driver_preferred_byte_format : Ao.driver_t -> Ao.byte_format_t
  val driver_options : Ao.driver_t -> string list
end