5#include "CoreMinimal.h"
6#include "Subsystems/EngineSubsystem.h"
7#include "Main/ST_AudioProcessingSettings.h"
12#include "FFT/ST_FFTThread.h"
14#include "ST_AudioIOBase.generated.h"
19DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnAudioIOStatusChanged,
bool, bIsActive, FIntPoint, IOId);
21DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnRawMagnitudesReady,
const TArray<float>&, RawMagnitudes, FIntPoint, IOId);
23DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnFrequencyBandsReady,
const TArray<float>&, FrequencyBands, int32, NumFrequencyBands, FIntPoint, IOId);
25DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnAmplitudesReady,
const TArray<float>&, Amplitudes, FIntPoint, IOId);
27DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnPitchesReady,
const TArray<float>&, Pitches, FIntPoint, IOId);
29DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnBeatDetected,
const TArray<float>&, Beats,
const TArray<bool>&, BeatDetectedForChannel, FIntPoint, IOId);
36UCLASS(BlueprintType, Abstract)
50 virtual void Initialize(FSubsystemCollectionBase& Collection)
override;
51 virtual void Deinitialize()
override;
56 UFUNCTION(BlueprintCallable, Category =
"ShaderTech|AudioProcessing|IO")
60 UFUNCTION(BlueprintCallable, Category =
"ShaderTech|AudioProcessing|IO")
64 UFUNCTION(BlueprintPure, Category =
"ShaderTech|AudioProcessing|IO")
68 UFUNCTION(BlueprintPure, Category =
"ShaderTech|AudioProcessing|IO")
72 UFUNCTION(BlueprintPure, Category =
"ShaderTech|AudioProcessing|IO")
80 UFUNCTION(BlueprintCallable, Category =
"ShaderTech|AudioProcessing|IO")
88 UFUNCTION(BlueprintCallable, Category =
"ShaderTech|AudioProcessing|IO")
99 static void MA_DataOrganiser(
ma_device* pDevice,
void* pSamples, uint64 PeriodSizeInFrames, ma_format Format, uint32 Channels);
117 template<
typename InterfaceType>
127 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
131 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
135 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
139 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
143 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
147 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
151 UFUNCTION(BlueprintPure, Category =
"ShaderTech|AudioProcessing|IO")
158 UFUNCTION(BlueprintPure, Category =
"ShaderTech|AudioProcessing|IO")
184 void BuildFFTIOData(uint32 PeriodSizeInFrames, ma_format Format, uint32 SampleRate, uint32 Channels);
205 void GetDeviceInfo(EAudioIOType AudioIOType, FString FindDeviceName);
233 FIntPoint mIOId = FIntPoint::ZeroValue;
240 void LOCAL_OnAudioIOStatusChanged(
bool bIsActive, FIntPoint IOId);
244 void LOCAL_OnRawMagnitudesReady(const TArray<
float>& RawMagnitudes, FIntPoint IOId);
248 void LOCAL_OnFrequencyBandsReady(const TArray<
float>& FrequencyBands, int32 NumFrequencyBands, FIntPoint IOId);
252 void LOCAL_OnAmplitudesReady(const TArray<
float>& Amplitudes, FIntPoint IOId);
256 void LOCAL_OnPitchesReady(const TArray<
float>& Pitches, FIntPoint IOId);
260 void LOCAL_OnBeatDetected(const TArray<
float>& Beats, const TArray<
bool>& BeatDetectedForChannel, FIntPoint IOId);
265 return EAudioIOType::None;
288template<
typename InterfaceType>
293 if (Sampler && Sampler->Implements<InterfaceType>())
308 return EST_SampleFormat::Unknown;
FFT processing thread class that runs audio analysis in a background thread.
Definition ST_FFTThread.h:20
FFFTIOData CachedFFTIOData
Cached FFT IO data.
Definition ST_AudioIOBase.h:223
virtual void DeinitializeAudioIO()
Definition ST_AudioIOBase.cpp:92
TArray< UObject * > RegisteredSamplers
Definition ST_AudioIOBase.h:198
static void MA_DataOrganiser(ma_device *pDevice, void *pSamples, uint64 PeriodSizeInFrames, ma_format Format, uint32 Channels)
Definition ST_AudioIOBase.cpp:295
FCriticalSection AudioBufferLock
Definition ST_AudioIOBase.h:102
FFFTIOData GetFFTIOData() const
Definition ST_AudioIOBase.h:273
FIntPoint GetIOId() const
Definition ST_AudioIOBase.h:301
bool ContainsInterface() const
Definition ST_AudioIOBase.h:289
FOnAudioIOStatusChanged OnAudioIOStatusChanged
Definition ST_AudioIOBase.h:128
FOnAmplitudesReady OnAmplitudesReady
Definition ST_AudioIOBase.h:140
std::atomic< uint32 > WriteIndex
Definition ST_AudioIOBase.h:124
void BuildFFTIOData(uint32 PeriodSizeInFrames, ma_format Format, uint32 SampleRate, uint32 Channels)
Definition ST_AudioIOBase.cpp:97
void Deactivate()
Definition ST_AudioIOBase.cpp:71
void GetDeviceInfo(EAudioIOType AudioIOType, FString FindDeviceName)
Definition ST_AudioIOBase.cpp:446
bool bActivated
Definition ST_AudioIOBase.h:163
FOnPitchesReady OnPitchesReady
Definition ST_AudioIOBase.h:144
void DeregisterSampler(UObject *Sampler, bool bZeroSamplersDeactivates=false)
Definition ST_AudioIOBase.cpp:215
ma_uint32 captureDeviceCount
Number of capture devices found.
Definition ST_AudioIOBase.h:220
bool RegisterSampler(UObject *Sampler, bool bSamplerActivates=false)
Definition ST_AudioIOBase.cpp:172
virtual ma_encoder * GetCaptureEncoder() const
Definition ST_AudioIOBase.h:283
FAudioIOConfig GetAudioIOConfig() const
Definition ST_AudioIOBase.h:268
void * SampledAudioBuffers[BufferCount]
Definition ST_AudioIOBase.h:108
ma_device_id * pDeviceID
Pointer to the selected device ID.
Definition ST_AudioIOBase.h:208
static constexpr uint32 BufferCount
Definition ST_AudioIOBase.h:105
ma_uint32 playbackDeviceCount
Number of playback devices found.
Definition ST_AudioIOBase.h:217
virtual EAudioIOType GetAudioIOType() const
Definition ST_AudioIOBase.h:263
virtual bool InitializeAudioIO()
Definition ST_AudioIOBase.cpp:85
virtual EST_SampleFormat GetAudioFormat() const
Returns the current audio format.
Definition ST_AudioIOBase.h:306
FOnBeatDetected OnBeatDetected
Definition ST_AudioIOBase.h:148
void * CurrentAudioBuffer
Definition ST_AudioIOBase.h:111
ma_device_info * pCaptureDeviceInfos
Capture device information.
Definition ST_AudioIOBase.h:214
void DeinitializeFFT()
Definition ST_AudioIOBase.cpp:137
virtual ma_decoder * GetPlaybackDecoder() const
Definition ST_AudioIOBase.h:278
ma_device_info * pPlaybackDeviceInfos
Playback device information.
Definition ST_AudioIOBase.h:211
FCriticalSection SamplerRegistrationMutex
Definition ST_AudioIOBase.h:196
UST_AudioIOBase()
Definition ST_AudioIOBase.cpp:18
FAudioIOConfig CachedAudioIOConfig
Cached audio IO configuration.
Definition ST_AudioIOBase.h:226
FOnFrequencyBandsReady OnFrequencyBandsReady
Definition ST_AudioIOBase.h:136
bool Activate()
Definition ST_AudioIOBase.cpp:35
bool bIsProcessingFFT
Definition ST_AudioIOBase.h:166
std::atomic< uint32 > ReadIndex
Definition ST_AudioIOBase.h:121
FOnRawMagnitudesReady OnRawMagnitudesReady
Definition ST_AudioIOBase.h:132
Structure that holds the configuration for audio input/output.
Definition ST_AudioProcessingSettings.h:984
Structure that holds the miniaudio playback and capture settings.
Definition ST_AudioProcessingSettings.h:714
Definition miniaudio.h:9918
Definition miniaudio.h:7022
Definition miniaudio.h:7710
Definition miniaudio.h:10059
Definition miniaudio.h:6987