sig
  type t
  type converter =
      Best_quality
    | Medium_quality
    | Fastest
    | Zero_order_hold
    | Linear
  exception Open
  exception Bytes_per_output_frame_invalid
  exception Bytes_per_input_frame_invalid
  exception Too_many_output_channels
  exception Port_name_output_channel_mismatch
  exception Port_not_found
  exception Too_many_input_channels
  exception Port_name_input_channel_mismatch
  val set_conversion_function : Bjack.converter -> unit
  type port_flag = Input | Output | Physical | Monitor | Terminal
  val open_t :
    ?ringbuffer_size:int ->
    ?server_name:string ->
    rate:int ->
    bits_per_sample:int ->
    input_channels:int ->
    output_channels:int ->
    flags:Bjack.port_flag list -> client_name:string -> unit -> Bjack.t
  val close : Bjack.t -> unit
  val write : Bjack.t -> string -> int
  val read : Bjack.t -> int -> string
  val reset : Bjack.t -> unit
  type position_unit = Bytes | Milliseconds
  type position_type = Played | Written_to_jack | Written
  val get_position :
    position_unit:Bjack.position_unit ->
    position_type:Bjack.position_type -> Bjack.t -> int
  val set_position :
    position_unit:Bjack.position_unit -> Bjack.t -> int -> unit
  val get_output_latency : Bjack.t -> int
  val get_input_latency : Bjack.t -> int
  type playing_state = Playing | Paused | Stopped | Closed | Reset
  val set_state : Bjack.t -> Bjack.playing_state -> unit
  val get_state : Bjack.t -> Bjack.playing_state
  val get_max_output_buffered_bytes : Bjack.t -> int
  val get_max_input_buffered_bytes : Bjack.t -> int
  val get_jack_buffered_bytes : Bjack.t -> int
  type volume = Linear | Decibel
  val set_volume_effect_type : Bjack.t -> Bjack.volume -> Bjack.volume
  val set_all_volume : Bjack.t -> int -> unit
  val set_channel_volume : channel:int -> device:Bjack.t -> int -> unit
  val get_channel_volume : Bjack.t -> int -> int
  val get_output_bytes_per_second : Bjack.t -> int
  val get_input_bytes_per_second : Bjack.t -> int
  val get_bytes_stored : Bjack.t -> int
  val get_bytes_free_space : Bjack.t -> int
  val get_bytes_used_space : Bjack.t -> int
  val get_bytes_per_output_frame : Bjack.t -> int
  val get_bytes_per_input_frame : Bjack.t -> int
  val get_num_output_channels : Bjack.t -> int
  val get_num_input_channels : Bjack.t -> int
  val get_sample_rate : Bjack.t -> int
end