sig
  val init : unit -> unit
  type event =
      Event_system of int * int
    | Event_result of int * int
    | Event_note_on of int * int * int
    | Event_note_off of int * int * int
  module Plugin :
    sig
      type t
      exception Not_a_plugin
      val load : string -> Dssi.Plugin.t
      val unload : Dssi.Plugin.t -> unit
    end
  module Descriptor :
    sig
      type t
      exception Not_implemented
      val descriptor : Dssi.Plugin.t -> int -> Dssi.Descriptor.t
      val descriptors : Dssi.Plugin.t -> Dssi.Descriptor.t array
      val api_version : Dssi.Descriptor.t -> int
      val ladspa : Dssi.Descriptor.t -> Ladspa.Descriptor.t
      val configure :
        Dssi.Descriptor.t ->
        Ladspa.Descriptor.instance -> string -> string -> string
      val get_program :
        Dssi.Descriptor.t ->
        Ladspa.Descriptor.instance -> int -> int * int * string
      val select_program :
        Dssi.Descriptor.t -> Ladspa.Descriptor.instance -> int -> int -> unit
      val get_midi_controller :
        Dssi.Descriptor.t -> Ladspa.Descriptor.instance -> int -> int
      val can_run_synth : Dssi.Descriptor.t -> bool
      val can_run_synth_adding : Dssi.Descriptor.t -> bool
      val can_run_multiple_synths : Dssi.Descriptor.t -> bool
      val can_run_multiple_synths_adding : Dssi.Descriptor.t -> bool
      val run_multiple_synths :
        Dssi.Descriptor.t ->
        ?adding:bool ->
        Ladspa.Descriptor.instance array ->
        int -> (int * Dssi.event) array array -> unit
      val run_synth :
        Dssi.Descriptor.t ->
        ?adding:bool ->
        Ladspa.Descriptor.instance -> int -> (int * Dssi.event) array -> unit
    end
end