let pianel = function () ->
 let date = ref 0.
 and compte = ref 0
 and echeance = ref 0.
 and x = ref 0.
 and y = ref 0.
 and ages = Array.make_matrix 128 9 0
 and anciennes_amplitudes = Array.make_matrix 128 9 0.
 and cos_bf = Array.make 128 0.
 and sin_bf = Array.make 128 0.
 and phase_bf_grave = Array.make 2 0.
 and phase_finale_bf_grave = Array.make 2 0.
 and phase_bf_1_grave = Array.make 2 0.
 and phase_finale_bf_1_grave = Array.make 2 0.
 and phase_bf_aigu = Array.make 2 0.
 and phase_finale_bf_aigu = Array.make 2 0.
 and phase_bf_1_aigu = Array.make 2 0.
 and phase_finale_bf_1_aigu = Array.make 2 0.
 and phase_vc = Array.make 2 0.
 and phase_finale_vc = Array.make 2 0.
 and phase_generateurs = Array.make_matrix 128 3 0.
 and precedent_signal = Array.make Data.taille_d_echantillon 0.
 and penultieme_echantillon = Array.make Data.taille_d_echantillon 0.
 and precedent_echantillon = Array.make Data.taille_d_echantillon 0.
 and tampon = Buffer.create ( 4 * Data.taille_d_echantillon )
 and ic0 = open_in_gen [Open_binary ; Open_rdonly] 0o400 Data.adresse_forme in
  let forme = ( input_value ic0 : float array ) in
   close_in_noerr ic0 ;
   date := Unix.gettimeofday () ;
   echeance := !date ;
   phase_bf_grave.(0) <- 1. ;
   phase_bf_1_grave.(0) <- 1. ;
   phase_bf_aigu.(0) <- 1. ;
   phase_bf_1_aigu.(0) <- 1. ;
   phase_vc.(0) <- 1. ;
   phase_finale_bf_grave.(0) <- 1. ;
   phase_finale_bf_1_grave.(0) <- 1. ;
   phase_finale_bf_aigu.(0) <- 1. ;
   phase_finale_bf_1_aigu.(0) <- 1. ;
   phase_finale_vc.(0) <- 1. ;
   for i = 0 to 127 do
    x := Random.float ( float i ) ;
    y := cos !x ;
    let ligne_de_phases = phase_generateurs.(i) in
     ligne_de_phases.(0) <- !y ;
     ligne_de_phases.(1) <- sin !x ;
     ligne_de_phases.(2) <- asin !y ;
   done ;
   let ic = open_in_gen [Open_binary ; Open_rdonly] 0o400 Data.adresse_rotation_bf in
    for i = 0 to  127 do
     cos_bf.(i) <- float_of_string ( input_line ic ) ;
     sin_bf.(i) <- float_of_string ( input_line ic ) ;
    done ;
    close_in_noerr ic ;
    while true do
     date := Unix.gettimeofday () ;
     if !date > !echeance then
      begin
       Manivelle.manivelle forme cos_bf sin_bf  phase_bf_grave phase_finale_bf_grave phase_bf_1_grave phase_finale_bf_1_grave phase_bf_aigu phase_finale_bf_aigu phase_bf_1_aigu phase_finale_bf_1_aigu phase_vc phase_finale_vc phase_generateurs precedent_signal penultieme_echantillon precedent_echantillon ages anciennes_amplitudes tampon stdout ;
       echeance := !echeance +. Data.duree_d_echantillon ;

(** Rattrapage en cas de panique *)


       if !date > !echeance then
        begin
         echeance := !date ;
         prerr_string "Saturation du calcul " ;
         prerr_int !compte ;
         prerr_newline () ;
         incr compte ;
        end ;
      end
     else

(** Pour faire passer le temps *)


      Data.passe_temps () ;
    done