VJ Master 1.0
Real-time audio analysis and visualisation.
Loading...
Searching...
No Matches
ST_MIDIManager.h
1// Copyright (c) 2025 Aaron Trotter (ShaderTech). All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Main/Base/ST_AudioControlManagerBase.h"
7#include "MIDI/ST_MIDIControlInterface.h"
8#include "Main/ST_AudioControlSettings.h"
9#include "MIDIDeviceController.h"
10#include "MIDIDeviceInputController.h"
11#include "MIDIDeviceOutputController.h"
12#include "MIDIDeviceControllerBase.h"
13#include "ST_MIDIManager.generated.h"
14
25UCLASS()
27{
28 GENERATED_BODY()
29
30public:
33
36
37 virtual void OnMIDINoteOn_Implementation(int32 Timestamp, int32 Channel, int32 Note, int32 Velocity) override;
39 virtual void OnMIDINoteOff_Implementation(int32 Timestamp, int32 Channel, int32 Note, int32 Velocity) override;
41 virtual void OnMIDIPitchBend_Implementation(FIntPoint PitchBendRange, int32 Timestamp, int32 Channel, int32 Pitch) override;
43 virtual void OnMIDIAftertouch_Implementation(int32 Timestamp, int32 Channel, int32 Note, int32 Amount) override;
45 virtual void OnMIDIControlChange_Implementation(FIntPoint ControlChangeRange, int32 Timestamp, int32 Channel, int32 Type, int32 Value) override;
47 virtual void OnMIDIProgramChange_Implementation(int32 Timestamp, int32 Channel, int32 ControlID, int32 Velocity) override;
49 virtual void OnMIDIChannelAftertouch_Implementation(int32 Timestamp, int32 Channel, int32 Amount) override;
51
53 UFUNCTION()
54 void OnMIDIEventHandler(UMIDIDeviceController* HandledMIDIDeviceController, int32 Timestamp, EMIDIEventType EventType, int32 Channel, int32 ControlID, int32 Velocity, int32 RawEventType);
55
58 UFUNCTION(Category = "ShaderTech|AudioControl|MIDI|Receive")
59 void OnMIDINoteOnHandler(UMIDIDeviceInputController* MIDIDeviceController, int32 Timestamp, int32 Channel, int32 Note, int32 Velocity);
60
61 UFUNCTION(Category = "ShaderTech|AudioControl|MIDI|Receive")
62 void OnMIDINoteOffHandler(UMIDIDeviceInputController* MIDIDeviceController, int32 Timestamp, int32 Channel, int32 Note, int32 Velocity);
63
64 UFUNCTION(Category = "ShaderTech|AudioControl|MIDI|Receive")
65 void OnMIDIPitchBendHandler(UMIDIDeviceInputController* MIDIDeviceController, int32 Timestamp, int32 Channel, int32 Pitch);
66
67 UFUNCTION(Category = "ShaderTech|AudioControl|MIDI|Receive")
68 void OnMIDIAftertouchHandler(UMIDIDeviceInputController* MIDIDeviceController, int32 Timestamp, int32 Channel, int32 Note, int32 Amount);
69
70 UFUNCTION(Category = "ShaderTech|AudioControl|MIDI|Receive")
71 void OnMIDIControlChangeHandler(UMIDIDeviceInputController* MIDIDeviceController, int32 Timestamp, int32 Channel, int32 Type, int32 Value);
72
73 UFUNCTION(Category = "ShaderTech|AudioControl|MIDI|Receive")
74 void OnMIDIProgramChangeHandler(UMIDIDeviceInputController* MIDIDeviceController, int32 Timestamp, int32 Channel, int32 ControlID, int32 Velocity);
75
76 UFUNCTION(Category = "ShaderTech|AudioControl|MIDI|Receive")
77 void OnMIDIChannelAftertouchHandler(UMIDIDeviceInputController* MIDIDeviceController, int32 Timestamp, int32 Channel, int32 Amount);
78
79 UFUNCTION(Category = "ShaderTech|AudioControl|MIDI|Receive")
80 void OnMIDIRawEventHandler(UMIDIDeviceInputController* MIDIDeviceController, int32 Timestamp, int32 Type, int32 Channel, int32 MessageData1, int32 MessageData2);
82
85 UFUNCTION(BlueprintCallable, Category = "ShaderTech|AudioControl|MIDI|Send")
86 void SendMIDIEvent(EMIDIEventType EventType, int32 Channel, int32 data1, int32 data2);
87
88 UFUNCTION(BlueprintCallable, Category = "ShaderTech|AudioControl|MIDI|Send")
89 void SendMIDINoteOn(int32 Channel, int32 Note, int32 Velocity);
90
91 UFUNCTION(BlueprintCallable, Category = "ShaderTech|AudioControl|MIDI|Send")
92 void SendMIDINoteOff(int32 Channel, int32 Note, int32 Velocity);
93
94 UFUNCTION(BlueprintCallable, Category = "ShaderTech|AudioControl|MIDI|Send")
95 void SendMIDIPitchBend(int32 Channel, int32 Pitch);
96
97 UFUNCTION(BlueprintCallable, Category = "ShaderTech|AudioControl|MIDI|Send")
98 void SendMIDINoteAftertouch(int32 Channel, int32 Note, float Amount);
99
100 UFUNCTION(BlueprintCallable, Category = "ShaderTech|AudioControl|MIDI|Send")
101 void SendMIDIControlChange(int32 Channel, int32 Type, int32 Value);
102
103 UFUNCTION(BlueprintCallable, Category = "ShaderTech|AudioControl|MIDI|Send")
104 void SendMIDIProgramChange(int32 Channel, int32 ProgramNumber);
105
106 UFUNCTION(BlueprintCallable, Category = "ShaderTech|AudioControl|MIDI|Send")
107 void SendMIDIChannelAftertouch(int32 Channel, float Amount);
109
115 bool ManageMIDIDeviceController(FName NewDeviceName);
116
122 bool UnmanageMIDIDeviceController(FName NewDeviceName);
123
126
127protected:
132 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|AudioControl|MIDI")
134
135public:
141 UFUNCTION(BlueprintCallable, Category = "ShaderTech|AudioControl|MIDI")
142 static UST_MIDIManager* GetInstance(const UObject* context);
143
148 UFUNCTION(BlueprintCallable, Category = "ShaderTech|AudioControl|MIDI")
149 void SetControlChangeValue(FIntPoint NewRange);
150
155 UFUNCTION(BlueprintCallable, Category = "ShaderTech|AudioControl|MIDI")
156 void SetPitchBendValue(FIntPoint NewRange);
157
158protected:
166 virtual void OnManagedItemRegistered(UObject* ManagedItem, bool bFirstManagedItemRegistered) override;
167
175 virtual void OnManagedItemDeregistered(UObject* ManagedItem, bool bAllManagedItemDeregistered) override;
176
184 virtual void OnControllerRegistered(FST_AudioController Controller, bool bFirstControllerRegistered) override;
185
193 virtual void OnControllerDeregistered(FST_AudioController Controller, bool bAllControllersDeregistered) override;
194};
195
197{
198 return MIDIRanges;
199}
200
201inline void UST_MIDIManager::SetControlChangeValue(FIntPoint NewRange)
202{
203 MIDIRanges.ControlChangeRange = NewRange;
204}
205
206inline void UST_MIDIManager::SetPitchBendValue(FIntPoint NewRange)
207{
208 MIDIRanges.PitchBendRange = NewRange;
209}
Interface for MIDI control event handling.
Definition ST_MIDIControlInterface.h:26
UST_AudioControlManagerBase()
Constructor for UST_AudioControlManagerBase.
Definition ST_AudioControlManagerBase.cpp:8
virtual void OnMIDIChannelAftertouch_Implementation(int32 Timestamp, int32 Channel, int32 Amount) override
Definition ST_MIDIManager.cpp:80
virtual void OnMIDIPitchBend_Implementation(FIntPoint PitchBendRange, int32 Timestamp, int32 Channel, int32 Pitch) override
Definition ST_MIDIManager.cpp:112
virtual void OnMIDIProgramChange_Implementation(int32 Timestamp, int32 Channel, int32 ControlID, int32 Velocity) override
Definition ST_MIDIManager.cpp:88
UST_MIDIManager()
Definition ST_MIDIManager.cpp:12
bool ManageMIDIDeviceController(FName NewDeviceName)
Definition ST_MIDIManager.cpp:398
FMIDIRanges MIDIRanges
Definition ST_MIDIManager.h:133
static UST_MIDIManager * GetInstance(const UObject *context)
Definition ST_MIDIManager.cpp:244
virtual void OnManagedItemDeregistered(UObject *ManagedItem, bool bAllManagedItemDeregistered) override
Definition ST_MIDIManager.cpp:146
void SetPitchBendValue(FIntPoint NewRange)
Definition ST_MIDIManager.h:206
virtual void OnMIDIControlChange_Implementation(FIntPoint ControlChangeRange, int32 Timestamp, int32 Channel, int32 Type, int32 Value) override
Definition ST_MIDIManager.cpp:96
virtual void OnManagedItemRegistered(UObject *ManagedItem, bool bFirstManagedItemRegistered) override
Definition ST_MIDIManager.cpp:137
void SetControlChangeValue(FIntPoint NewRange)
Definition ST_MIDIManager.h:201
virtual void OnControllerDeregistered(FST_AudioController Controller, bool bAllControllersDeregistered) override
Definition ST_MIDIManager.cpp:163
virtual void OnControllerRegistered(FST_AudioController Controller, bool bFirstControllerRegistered) override
Definition ST_MIDIManager.cpp:155
FMIDIRanges GetMIDIRanges() const
Definition ST_MIDIManager.h:196
virtual void OnMIDINoteOff_Implementation(int32 Timestamp, int32 Channel, int32 Note, int32 Velocity) override
Definition ST_MIDIManager.cpp:120
virtual void OnMIDIAftertouch_Implementation(int32 Timestamp, int32 Channel, int32 Note, int32 Amount) override
Definition ST_MIDIManager.cpp:104
virtual void OnMIDINoteOn_Implementation(int32 Timestamp, int32 Channel, int32 Note, int32 Velocity) override
Definition ST_MIDIManager.cpp:128
bool UnmanageMIDIDeviceController(FName NewDeviceName)
Definition ST_MIDIManager.cpp:492
void OnMIDIEventHandler(UMIDIDeviceController *HandledMIDIDeviceController, int32 Timestamp, EMIDIEventType EventType, int32 Channel, int32 ControlID, int32 Velocity, int32 RawEventType)
Definition ST_MIDIManager.cpp:16
Defines MIDI input value ranges.
Definition ST_AudioControlSettings.h:57
Represents a basic audio controller reference.
Definition ST_AudioControlSettings.h:73