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"
17PRAGMA_DISABLE_DEPRECATION_WARNINGS
20DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnAudioIOStatusChanged,
const bool, bIsActive,
const FIntPoint, IOId);
22DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnRawMagnitudesReady,
const TArray<float>&, RawMagnitudes,
const FIntPoint, IOId);
24DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnFrequencyBandsReady,
const TArray<float>&, FrequencyBands,
const int32, NumFrequencyBands,
const FIntPoint, IOId);
26DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnAmplitudesReady,
const TArray<float>&, Amplitudes,
const FIntPoint, IOId);
28DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnPitchesReady,
const TArray<float>&, Pitches,
const FIntPoint, IOId);
30DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnBeatDetected,
const TArray<float>&, Beats,
const TArray<FChannelBeatDetection>&, BeatDetectionForChannel,
const FIntPoint, IOId);
31PRAGMA_ENABLE_DEPRECATION_WARNINGS
38UCLASS(BlueprintType, Abstract)
52 virtual void Initialize(FSubsystemCollectionBase& Collection)
override;
53 virtual void Deinitialize()
override;
58 UFUNCTION(BlueprintCallable, Category =
"ShaderTech|AudioProcessing|IO")
62 UFUNCTION(BlueprintCallable, Category =
"ShaderTech|AudioProcessing|IO")
66 UFUNCTION(BlueprintPure, Category =
"ShaderTech|AudioProcessing|IO")
70 UFUNCTION(BlueprintPure, Category =
"ShaderTech|AudioProcessing|IO")
74 UFUNCTION(BlueprintPure, Category =
"ShaderTech|AudioProcessing|IO")
82 UFUNCTION(BlueprintCallable, Category =
"ShaderTech|AudioProcessing|IO")
90 UFUNCTION(BlueprintCallable, Category =
"ShaderTech|AudioProcessing|IO")
120 void MA_DataOrganiser(
void* pSamples, uint64 PeriodSizeInFrames, ma_format Format, uint32 Channels);
138 template<
typename InterfaceType>
148 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
152 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
156 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
160 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
164 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
168 UPROPERTY(BlueprintAssignable, Category =
"ShaderTech|AudioProcessing|IO")
172 UFUNCTION(BlueprintPure, Category =
"ShaderTech|AudioProcessing|IO")
179 UFUNCTION(BlueprintPure, Category =
"ShaderTech|AudioProcessing|IO")
205 void BuildFFTIOData(uint32 PeriodSizeInFrames, ma_format Format, uint32 SampleRate, uint32 Channels);
226 void GetDeviceInfo(EAudioIOType AudioIOType, FString FindDeviceName);
263 FIntPoint mIOId = FIntPoint::ZeroValue;
270 void LOCAL_OnAudioIOStatusChanged(const
bool bIsActive, const FIntPoint IOId);
274 void LOCAL_OnRawMagnitudesReady(const TArray<
float>& RawMagnitudes, const FIntPoint IOId);
278 void LOCAL_OnFrequencyBandsReady(const TArray<
float>& FrequencyBands, const int32 NumFrequencyBands, const FIntPoint IOId);
282 void LOCAL_OnAmplitudesReady(const TArray<
float>& Amplitudes, const FIntPoint IOId);
286 void LOCAL_OnPitchesReady(const TArray<
float>& Pitches, const FIntPoint IOId);
290 void LOCAL_OnBeatDetected(const TArray<
float>& Beats, const TArray<
FChannelBeatDetection>& BeatDetectionForChannel, const FIntPoint IOId);
295 return EAudioIOType::None;
318template<
typename InterfaceType>
323 if (Sampler && Sampler->Implements<InterfaceType>())
338 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:244
virtual void DeinitializeAudioIO()
Definition ST_AudioIOBase.cpp:98
TArray< UObject * > RegisteredSamplers
Definition ST_AudioIOBase.h:219
FCriticalSection AudioBufferLock
Definition ST_AudioIOBase.h:123
FFFTIOData GetFFTIOData() const
Definition ST_AudioIOBase.h:303
TArray< uint8 > RealtimePcmRBBackingMemory
Preallocated backing memory used by the ring buffer (no runtime allocations).
Definition ST_AudioIOBase.h:256
void MA_ReadRealtimePcmRB(uint64 PeriodSizeInFrames, ma_format Format, uint32 Channels)
Definition ST_AudioIOBase.cpp:313
FIntPoint GetIOId() const
Definition ST_AudioIOBase.h:331
ma_pcm_rb RealtimePcmRingBuffer
Lock-free PCM ring buffer for passing audio from the realtime callback to the FFT worker thread.
Definition ST_AudioIOBase.h:250
void MA_DataOrganiser(void *pSamples, uint64 PeriodSizeInFrames, ma_format Format, uint32 Channels)
Definition ST_AudioIOBase.cpp:360
bool ContainsInterface() const
Definition ST_AudioIOBase.h:319
FOnAudioIOStatusChanged OnAudioIOStatusChanged
Definition ST_AudioIOBase.h:149
FOnAmplitudesReady OnAmplitudesReady
Definition ST_AudioIOBase.h:161
std::atomic< uint32 > WriteIndex
Definition ST_AudioIOBase.h:145
void BuildFFTIOData(uint32 PeriodSizeInFrames, ma_format Format, uint32 SampleRate, uint32 Channels)
Definition ST_AudioIOBase.cpp:110
void Deactivate()
Definition ST_AudioIOBase.cpp:71
void GetDeviceInfo(EAudioIOType AudioIOType, FString FindDeviceName)
Definition ST_AudioIOBase.cpp:511
bool bActivated
Definition ST_AudioIOBase.h:184
FOnPitchesReady OnPitchesReady
Definition ST_AudioIOBase.h:165
void DeregisterSampler(UObject *Sampler, bool bZeroSamplersDeactivates=false)
Definition ST_AudioIOBase.cpp:228
ma_uint32 captureDeviceCount
Number of capture devices found.
Definition ST_AudioIOBase.h:241
ma_uint32 RealtimePcmRBFrameCapacity
Fixed maximum number of audio frames the ring buffer can hold.
Definition ST_AudioIOBase.h:253
bool RegisterSampler(UObject *Sampler, bool bSamplerActivates=false)
Definition ST_AudioIOBase.cpp:185
virtual ma_encoder * GetCaptureEncoder() const
Definition ST_AudioIOBase.h:313
FAudioIOConfig GetAudioIOConfig() const
Definition ST_AudioIOBase.h:298
void * SampledAudioBuffers[BufferCount]
Definition ST_AudioIOBase.h:129
ma_device_id * pDeviceID
Pointer to the selected device ID.
Definition ST_AudioIOBase.h:229
static constexpr uint32 BufferCount
Definition ST_AudioIOBase.h:126
ma_uint32 playbackDeviceCount
Number of playback devices found.
Definition ST_AudioIOBase.h:238
virtual EAudioIOType GetAudioIOType() const
Definition ST_AudioIOBase.h:293
virtual bool InitializeAudioIO()
Definition ST_AudioIOBase.cpp:85
virtual EST_SampleFormat GetAudioFormat() const
Returns the current audio format.
Definition ST_AudioIOBase.h:336
static void MA_DataAvailable(ma_device *pDevice)
Definition ST_AudioIOBase.cpp:344
FOnBeatDetected OnBeatDetected
Definition ST_AudioIOBase.h:169
void * CurrentAudioBuffer
Definition ST_AudioIOBase.h:132
ma_device_info * pCaptureDeviceInfos
Capture device information.
Definition ST_AudioIOBase.h:235
void DeinitializeFFT()
Definition ST_AudioIOBase.cpp:150
virtual ma_decoder * GetPlaybackDecoder() const
Definition ST_AudioIOBase.h:308
ma_device_info * pPlaybackDeviceInfos
Playback device information.
Definition ST_AudioIOBase.h:232
bool MA_IsDataAvailable(uint64 PeriodSizeInFrames)
Definition ST_AudioIOBase.cpp:308
FCriticalSection SamplerRegistrationMutex
Definition ST_AudioIOBase.h:217
UST_AudioIOBase()
Definition ST_AudioIOBase.cpp:18
FAudioIOConfig CachedAudioIOConfig
Cached audio IO configuration.
Definition ST_AudioIOBase.h:247
FOnFrequencyBandsReady OnFrequencyBandsReady
Definition ST_AudioIOBase.h:157
bool Activate()
Definition ST_AudioIOBase.cpp:35
bool bIsProcessingFFT
Definition ST_AudioIOBase.h:187
std::atomic< uint32 > ReadIndex
Definition ST_AudioIOBase.h:142
FOnRawMagnitudesReady OnRawMagnitudesReady
Definition ST_AudioIOBase.h:153
Structure that holds the configuration for audio input/output.
Definition ST_AudioProcessingSettings.h:1126
Structure that holds configuration settings for the FFT (Fast Fourier Transform) Beat detection.
Definition ST_AudioProcessingSettings.h:666
Structure that holds the miniaudio playback and capture settings.
Definition ST_AudioProcessingSettings.h:835
Definition miniaudio.h:9918
Definition miniaudio.h:7022
Definition miniaudio.h:7710
Definition miniaudio.h:10059
Definition miniaudio.h:6002
Definition miniaudio.h:6987