with Libsens.MIDI.Instruments; use Libsens.MIDI.Instruments; with Libsens.Virtual; use Libsens.Virtual; with Libsens.Virtual.Work_Class; use Libsens.Virtual.Work_Class; with Libsens.Processing.Common; use Libsens.Processing.Common; with Libsens.Processing.Plugins; use Libsens.Processing.Plugins; package Libsens.Processing.Work_Processing is type Plugin_Processing_Access is access all Plugin_Processing'Class; function Initialize(Class : in Plugin_Enum; Plugin : in Abstract_Plugin_Access) return Plugin_Processing_Access; type Process_Array is array (Plugin_Num'Range) of Plugin_Processing_Access; type Work_Processing_Record; task type Work_Process(Processing : access Work_Processing_Record) is entry Initialize; entry Start; entry Stop; entry Mod_Rec(Status : in Boolean); entry Mod_Play(Status : in Boolean); entry Mod_Reset; entry End_Of_Process; entry Halt; end Work_Process; type Work_Processing_Record is tagged limited record Work : Work_Access; Box : aliased Messages_box; Process : Work_Process(Work_Processing_Record'Access); Processes : Process_Array; Instruments : access Bandmaster_Record; end record; procedure Initialize(Processing : in out Work_Processing_Record; Work : in Work_Access; Insts : access Bandmaster_record); end Libsens.Processing.Work_Processing;