with Libsens.Virtual.Plugins;           use Libsens.Virtual.Plugins;
package Libsens.Virtual.Gen_Plugin is
   
   
   type Genetic_Context_Type is
      record
	 Population_Size           :      Positive := 100;
	 Max_Generations           :      Positive := 1000;
	 Num_No_Change_Generations :      Positive := 10;
	 Mutation_Probability      :      Float    := 0.13;
	 Num_Elite_Saved           :      Natural  := 10;
      end record;
   
   
   
   type Gen_Bass_Plugin_Record is
     new Plugin_Class(Gen_Bass) with
      record
	 Max_B_Inf : Positive := 1;
	 Max_B_Sup : Positive := 2;
	 Min_Class_Id : Positive := 24;
	 Min_Value_Id : Positive := 48;
	 Min_Data_Id  : Positive := 2;
	 Max_Class_Id : Positive := 48;
	 Max_Value_Id : Positive := 127;
	 Max_Data_Id  : Positive := 127;
	 
	 Context : Genetic_Context_Type;	 	 	 
				    
      end record;
   procedure Print (Filename : in String; Plug : in Gen_Bass_Plugin_Record);
   
   type Gen_Synth_Plugin_Record is
     new Plugin_Class(Gen_Synth) with
      record
	 Max_B_Inf : Positive := 1;
	 Max_B_Sup : Positive := 4;
	 Min_Class_Id : Positive := 36;
	 Min_Value_Id : Positive := 48;
	 Min_Data_Id  : Positive := 2;
	 Max_Class_Id : Positive := 76;
	 Max_Value_Id : Positive := 127;
	 Max_Data_Id  : Positive := 127;
	 
	 Context : Genetic_Context_Type;
	 
      end record;
   procedure Print (Filename : in String; Plug : in Gen_Synth_Plugin_Record);
   
   type Gen_Drums_Plugin_Record is
     new Plugin_Class(Gen_Drums) with
      record
	 Max_B_Inf : Positive := 1;
	 Max_B_Sup : Positive := 4;
	 Min_Class_Id : Positive := 36;
	 Min_Value_Id : Positive := 48;
	 Min_Data_Id  : Positive := 2;
	 Max_Class_Id : Positive := 48;
	 Max_Value_Id : Positive := 64;
	 Max_Data_Id  : Positive := 127;
	 
	 Context : Genetic_Context_Type;
	 
      end record;
   procedure Print (Filename : in String; Plug : in Gen_Drums_Plugin_Record);
end Libsens.Virtual.Gen_Plugin;