with Ada.Calendar; use Ada.Calendar; with Gmface.Gm_Common; use Gmface.Gm_Common; With Gmface.Gm_MIDI.Drivers; use Gmface.Gm_MIDI.Drivers; package Gmface.Gm_MIDI.Instruments is type MIDI_Instrument_Record; task type Tempo_Sync_Type(Instrument : access Device_Driver_Record'class) is entry Start(Start_Time : in Time; Tempo : in Tempo_Type; Signature : in Time_Signature_type); entry Stop; entry Halt; end Tempo_Sync_Type; -- -- ---------------------------------------------------- ---------------------------------------------------- -- Modulation sequencer : --  task type Mod_Sequencer_Type(Instrument : access Device_Driver_Record'class) is entry Start(Tempo : in Tempo_Type; Signature : in Time_Signature_type); entry Stop; entry Rec(In_Rec : in Boolean); entry Play(In_Play : in Boolean); entry Reset; entry Halt; end Mod_Sequencer_Type; type MIDI_Instrument_Record is new Device_Driver_Record with record Tempo_Sync : Tempo_Sync_Type(MIDI_Instrument_Record'Access); Mod_Seq : Mod_Sequencer_Type(MIDI_Instrument_Record'Access); Printed : Boolean := True; Mutted : Boolean := False; Have_Drums_Kit : Boolean := False; end record; type MIDI_Instrument_Access is access all MIDI_Instrument_Record'Class; type Instrument_Id is new Positive range 1..128; type Orchester_Array is array (Instrument_Id range <>) of MIDI_Instrument_Access; type Bandmaster_Record(Device_Max : Instrument_Id) is tagged record Orchester : Orchester_Array(1..Device_Max); Inst_Last : natural := 0; end record; procedure Initialize(Master : in out Bandmaster_Record); procedure Finalize(Master : in out Bandmaster_Record); end Gmface.Gm_MIDI.Instruments;