with PragmARC.REM_NN_Wrapper;           use PragmARC.REM_NN_Wrapper;
with Libsens.Common;                    use Libsens.Common;
with Libsens.MIDI.Messages;             use Libsens.MIDI.Messages;
with Libsens.Virtual.Plugins;           use Libsens.Virtual.Plugins;
package Libsens.Virtual.Arp_Sequencer is
   

   type Type_Step is new T_Note with
      record         
         Set              : Boolean := True;
	 Length            : Value_Type := 6;
      end record;
   
   type Step_Access is access all Type_Step;

   type Type_Step_Table is array (Positive range <>) of Step_access;
   
   procedure Initialize
     (Step : in out Step_Access);
   
   type Arp_Seq_Plugin_Record is
     new Plugin_Class(Arp_seq) with
      record
	 Network               : access String := new String ' ("Accords.txt");
	 Reuse                 : Boolean := False;
	 Converged             : Real := 0.1;	
	 Max_Epoch             : Positive := 8000;
	 
	 Last_Step             : Positive     := 32;
	 Transpose             : value_type := 0;
	 Step_Table            : Type_Step_Table(1..32) := (others => new Type_Step);
	 Resolution            : T_Figure := simple;
	 
	 
	 Start_Chord           : Chord_Access := new T_Chord' (new T_Note' (48, 101, 64), new T_Note ' (50, 95, 64), new T_Note ' (52, 100, 64));
         Chord                 : T_Chord(1..3) := (others => new T_Note ' (64, 95, 64));
	 
      end record;
   
   procedure Print (Filename : in String; Plug : in Arp_Seq_Plugin_record);
   
end Libsens.Virtual.Arp_Sequencer;