let vibrato_mono = fun (poussoir_vc:float) (cosinus:float) (sinus:float) (phase_vc:float array) (phase_finale_vc:float array) (precedent_echantillon:float array) (echantillon:float array) ->
 let facteur_s = ref 1.
 and facteur_v = ref 0.
 and difference = ref 0
 and alpha = ref 1.
 and beta = ref 0.
 and int_poussoir = int_of_float ( poussoir_vc )
 and sortie = Array.make Data.taille_d_echantillon 0. in
  for i = 0 to Data.pred_taille_d_echantillon do
   sortie.(i) <- echantillon.(i) ;
  done ;
  if poussoir_vc > 0. then
   begin
    let selecteur = int_poussoir mod 2
    and expression = 2e-5 *. ( float Data.frequence_d_echantillonnage ) *. ( Etat.int_pow ( ( succ int_poussoir ) / 2 ) 3. ) in
     if selecteur <> 0 then
      begin
       facteur_s := 0. ;
       facteur_v := 1. ;
      end
     else
      begin
       facteur_s := 0.5 +. 0.08 *. ( sqrt poussoir_vc ) ;
       facteur_v := !facteur_s ;
      end ;
     let x = ref phase_vc.(0)
     and y = ref phase_vc.(1)
     and xx = ref 0.
     and yy = ref 0.
     and indice = ref 0
     and pred_indice = ref 0
     and excursion = ref 0.
     and deviation = ref 0.
     and vibrato_i = Array.make Data.taille_d_echantillon 0.
     and vibrato_ii = Array.make Data.taille_d_echantillon 0. in
      for i = 0 to Data.pred_taille_d_echantillon do
       xx := cosinus *. !x -. sinus *. !y ;
       yy := sinus *. !x +. cosinus *. !y ;
       xx := tronque !xx ;
       yy := tronque !yy ;
       x := !xx ;
       y := !yy ;
       excursion := 0.759934207678533147 *. !xx -. 0.65 *. !yy ;
       deviation := max 0. ( min 2. ( 1. -. !excursion ) ) ;
       deviation := expression *. !deviation ;
       difference := int_of_float !deviation ;
       indice := i - !difference ;
       pred_indice := pred !indice ;
       alpha := !deviation -. float !difference ;
       beta := 1. -. !alpha ;
       vibrato_i.(i) <- if !indice < 0 then precedent_echantillon.( Data.taille_d_echantillon + !indice ) else echantillon.(!indice) ;
       vibrato_ii.(i) <- if !pred_indice < 0 then precedent_echantillon.( Data.taille_d_echantillon + !pred_indice ) else echantillon.(!pred_indice) ;
       vibrato_i.(i) <- !alpha *. vibrato_ii.(i) +. !beta *. vibrato_i.(i) ;
      done ;
      phase_finale_vc.(0) <- tronque ( cosinus *. !x -. sinus *. !y ) ;
      phase_finale_vc.(1) <- tronque ( sinus *. !x +. cosinus *. !y ) ;
      for i = 0 to Data.pred_taille_d_echantillon do
       sortie.(i) <- !facteur_s *. sortie.(i) +. !facteur_v *. vibrato_i.(i) ;
      done ;
   end ;
  sortie