VJ Master 1.3
Real-time audio analysis and visualisation.
 
Loading...
Searching...
No Matches
ST_AudioProcessingSettings.h
1// Copyright (c) 2025 Aaron Trotter (ShaderTech). All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Engine/DataAsset.h"
7#include "Engine/DeveloperSettings.h"
8#include "Misc/EnumClassFlags.h"
9#include "Misc/EnumRange.h"
10#include "ST_AudioProcessingSettings.generated.h"
11
19UENUM(BlueprintType, meta = (Bitflags, UseEnumValuesAsMaskValuesInEditor = "true"))
20enum class EAudioIOType : uint8
21{
23 None = 0 UMETA(Hidden),
24
26 PlaybackWaveform = 1 << 0 UMETA(DisplayName = "PlaybackWaveform"),
27
29 PlaybackNoise = 1 << 1 UMETA(DisplayName = "PlaybackNoise"),
30
32 PlaybackPlayer = 1 << 2 UMETA(DisplayName = "PlaybackPlayer"),
33
35 PlaybackEnginePlayer = 1 << 3 UMETA(DisplayName = "PlaybackEnginePlayer"),
36
38 CaptureLoopback = 1 << 4 UMETA(DisplayName = "CaptureLoopback"),
39
41 CaptureMicrophone = 1 << 5 UMETA(DisplayName = "CaptureMicrophone"),
42
44 Count = 1 << 6 UMETA(Hidden)
45};
46
50ENUM_CLASS_FLAGS(EAudioIOType);
51
59constexpr bool EnumHasAnyFlags(int32 Flags, EAudioIOType Contains)
60{
61 return (Flags & int32(Contains)) != 0;
62};
63
67ENUM_RANGE_BY_VALUES(EAudioIOType,
68 EAudioIOType::PlaybackWaveform,
69 EAudioIOType::PlaybackNoise,
70 EAudioIOType::PlaybackPlayer,
71 EAudioIOType::PlaybackEnginePlayer,
72 EAudioIOType::CaptureLoopback,
73 EAudioIOType::CaptureMicrophone
74);
75
81UENUM(BlueprintType)
82enum class EST_AudioFileLocation : uint8
83{
85 ProjectDir = 0 UMETA(DisplayName = "Project Dir"),
86
88 ProjectContentDir = 1 UMETA(DisplayName = "Project Content Dir"),
89
91 ProjectPluginsDir = 2 UMETA(DisplayName = "Project Plugins Dir"),
92
94 EngineDir = 3 UMETA(DisplayName = "Engine Dir"),
95
97 EnginePluginsDir = 4 UMETA(DisplayName = "Engine Plugins Dir")
98};
99
106UENUM(BlueprintType)
107enum class EST_EncodingFormat : uint8
108{
110 Unknown = 0 UMETA(DisplayName = "Unknown"),
111
113 WAV = 1 UMETA(DisplayName = "WAV"),
114
116 Flac = 2 UMETA(DisplayName = "Flac"),
117
119 MP3 = 3 UMETA(DisplayName = "MP3"),
120
122 Vorbis = 4 UMETA(DisplayName = "Vorbis")
123};
124
131UENUM(BlueprintType)
132enum class EST_SampleFormat : uint8
133{
135 Unknown = 0 UMETA(DisplayName = "Unknown"),
136
138 U8 = 1 UMETA(DisplayName = "Unsigned 8-bit"),
139
141 S16 = 2 UMETA(DisplayName = "Signed 16-bit"),
142
144 S24 = 3 UMETA(DisplayName = "Signed 24-bit"),
145
147 S32 = 4 UMETA(DisplayName = "Signed 32-bit"),
148
150 F32 = 5 UMETA(DisplayName = "32-bit Float")
151};
152
158UENUM(BlueprintType)
159enum class EST_NoiseType : uint8
160{
162 White = 0 UMETA(DisplayName = "White"),
163
165 Pink = 1 UMETA(DisplayName = "Pink"),
166
168 Brownian = 2 UMETA(DisplayName = "Brownian"),
169};
170
176UENUM(BlueprintType)
177enum class EST_WaveformType : uint8
178{
180 Sine = 0 UMETA(DisplayName = "Sine"),
181
183 Square = 1 UMETA(DisplayName = "Square"),
184
186 Triangle = 2 UMETA(DisplayName = "Triangle"),
187
189 Sawtooth = 3 UMETA(DisplayName = "Sawtooth")
190};
191
198UENUM(BlueprintType)
199enum class EST_FilterType : uint8
200{
202 None = 0 UMETA(DisplayName = "No Filter"),
203
205 Butterworth = 1 UMETA(DisplayName = "Butterworth (Smooth)"),
206
208 ChebyshevTypeI = 2 UMETA(DisplayName = "Chebyshev I (Sharp)"),
209};
210
217UENUM(BlueprintType)
218enum class EST_WindowingFunction : uint8
219{
221 Rectangular = 0 UMETA(DisplayName = "Rectangular (no windowing)"),
222
224 Hann = 1 UMETA(DisplayName = "Hann (good balance, smooth edges)"),
225
227 Hamming = 2 UMETA(DisplayName = "Hamming (reduces first side ripple)"),
228
230 BlackmanHarris = 4 UMETA(DisplayName = "Blackman-Harris (strong smoothing, less noise)"),
231
233 Gaussian = 5 UMETA(DisplayName = "Gaussian (soft edges, smooth blend)")
234};
235
241UENUM(BlueprintType)
242enum class EST_SpectrumSpacing : uint8
243{
245 Log = 0 UMETA(DisplayName = "Logarithmic (natural)"),
246
248 Linear = 1 UMETA(DisplayName = "Linear (even)"),
249
251 OctaveSubdivision = 2 UMETA(DisplayName = "Octave Subdivision (Power-of-Two)"),
252
254 Quadratic = 3 UMETA(DisplayName = "Quadratic (Squared Growth)")
255};
256
262UENUM(BlueprintType)
263enum class EST_SpectrumValues : uint8
264{
266 Averages = 0 UMETA(DisplayName = "Averages (smooth)"),
267
269 Peaks = 1 UMETA(DisplayName = "Peaks (noisy)"),
270};
271
277UENUM(BlueprintType)
278enum class EST_SmoothingType : uint8
279{
281 None = 0 UMETA(DisplayName = "None"),
282
284 EMA = 1 UMETA(DisplayName = "Exponential Moving Average"),
285
287 SMA = 2 UMETA(DisplayName = "Simple Moving Average "),
288 // ToDo: Add Gaussian smoothing method in the future.
289};
290
297USTRUCT(BlueprintType)
299{
300 GENERATED_BODY()
301
302public:
304 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
305 EST_SmoothingType SmoothingType = EST_SmoothingType::EMA;
306
308 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "SmoothingType != EST_SmoothingType::None && SmoothingType == EST_SmoothingType::SMA", ClampMin = "0.0", UIMin = "0.0", Tooltip = "Time window (in seconds) used for smoothing values over a set period of time. Larger values result in smoother transitions, while smaller values react more quickly to changes."))
309 float TimeWindow = 0.1f; // 100ms
310
312 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "SmoothingType != EST_SmoothingType::None", ClampMin = "0.0", ClampMax = "1.0", UIMin = "0.0", UIMax = "1.0", Tooltip = "Smoothing factor for averaging over time (0 = No smoothing, 1 = Full smoothing)"))
313 float SmoothingFactor = 0.5f;
314};
315
321USTRUCT(BlueprintType)
323{
324 GENERATED_BODY()
325
326public:
327
332 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
333 EST_FilterType FilterType = EST_FilterType::None;
334
341 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "FilterType == EST_FilterType::ChebyshevTypeI", ClampMin = "0.01", ClampMax = "10.0", UIMin = "0.01", UIMax = "10.0"))
342 float RippleFactor = 0.1f;
343
348 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "FilterType != EST_FilterType::None"))
349 bool bLowPassFilter = false;
350
355 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bLowPassFilter && FilterType != EST_FilterType::None"))
356 float LowPassCutoffHz = 12000.0f;
357
362 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "FilterType != EST_FilterType::None"))
363 bool bBandFilter = false;
364
369 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bBandFilter && FilterType != EST_FilterType::None"))
370 float BandLowerCutoffHz = 100.0f;
371
376 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bBandFilter && FilterType != EST_FilterType::None"))
377 float BandUpperCutoffHz = 12000.0f;
378
383 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bBandFilter && FilterType != EST_FilterType::None"))
384 bool bBandReject = true;
385
390 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "FilterType != EST_FilterType::None"))
391 bool bHighPassFilter = false;
392
397 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bHighPassFilter && FilterType != EST_FilterType::None"))
398 float HighPassCutoffHz = 100.0f;
399};
400
406USTRUCT(BlueprintType)
408{
409 GENERATED_BODY()
410
411public:
416 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
417 EST_WindowingFunction WindowingFunction = EST_WindowingFunction::Hann;
418
425 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "WindowingFunction == EST_WindowingFunction::Gaussian", ClampMin = "0.0", UIMin = "0.0"))
427};
428
434USTRUCT(BlueprintType)
436{
437 GENERATED_BODY()
438
439public:
444 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
446
451 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
453
459 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, ClampMin = "1", UIMin = "1", Tooltip = "Number of frequency bands used in the spectrum analysis. More bands provide finer resolution but increase computational cost."))
460 int32 SpectrumBands = 32;
461
466 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
467 EST_SpectrumSpacing SpectrumSpacing = EST_SpectrumSpacing::Log;
468
473 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
474 EST_SpectrumValues SpectrumValues = EST_SpectrumValues::Averages;
475
480 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "SpectrumSpacing == EST_SpectrumSpacing::Log", Tooltip = "20Hz = Lower bound of human hearing"))
481 float MinFreq = 20.0f;
482
487 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "SpectrumSpacing == EST_SpectrumSpacing::Log"))
489
494 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bOverrideNyquistLimit && SpectrumSpacing == EST_SpectrumSpacing::Log", Tooltip = "Uses CustomMaxFreq instead of NyquistLimit (half the sampling rate)"))
495 float MaxFreq = 20000.0f; // Upper bound
496
501 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
503};
504
510USTRUCT(BlueprintType)
512{
513 GENERATED_BODY()
514
515public:
520 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
521 bool bComputeAmplitude = true;
522
527 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
529
534 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bAmplitudeNormalisation"))
535 float MaxAmplitude = 1.0f;
536
541 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
543};
544
550USTRUCT(BlueprintType)
552{
553 GENERATED_BODY()
554
555public:
560 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
561 bool bComputePitch = true;
562
567 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
569
574 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bPitchNormalisation", Tooltip = "20Hz = Lower bound of human hearing"))
575 float MinFreq = 20.0f;
576
581 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bPitchNormalisation"))
582 float MaxFreq = 20000.0f; // Upper bound
583
588 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
590};
591
597USTRUCT(BlueprintType)
599{
600 GENERATED_BODY()
601
602public:
603
608 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, meta = "Smoothing cannot be None. Beat Tracking requires at least some history."))
609 bool bComputeBeat = true;
610
615 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, ClampMin = "0.0", UIMin = "0.0"))
616 bool bNormalise = false;
617
622 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bNormalise", ClampMin = "0.0", UIMin = "0.0"))
623 float MaxBeatEnergy = 2.0f;
624
629 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, ClampMin = "0.0", UIMin = "0.0"))
630 float BeatThreshold = 1.5f;
631
633 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, ClampMin = "0.0", ClampMax = "1.0", UIMin = "0.0", UIMax = "1.0", Tooltip = "Smoothing factor for averaging over time (0 = No smoothing, 1 = Full smoothing)"))
634 float BPMSmoothingFactor = 0.5f;
635
637 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, ClampMin = "0.0", UIMin = "0.0"))
638 float BeatTimeWindow = 0.1f; // 100ms
639
641 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, ClampMin = "0.0", UIMin = "0.0"))
643
648 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
650
655 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
657};
658
664USTRUCT(BlueprintType)
666{
667 GENERATED_BODY()
668
669public:
670
674 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
675 bool bBeatDetected = true;
676
680 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
681 float BeatsPerMinute = 0.0f;
682};
683
689USTRUCT(BlueprintType)
691{
692 GENERATED_BODY()
693
694public:
695
699 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
700 double BeatTime = 0.0;
701
705 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
706 float BeatsPerMinute = 0.0f;
707};
708
709#if WITH_EDITOR
718DECLARE_MULTICAST_DELEGATE_TwoParams(FOnPostEditChangePropertyDelegate_FFTConfig, UObject*, FPropertyChangedEvent&);
719#endif
720
726UCLASS(BlueprintType, Blueprintable)
727class ST_AUDIOPROCESSING_API UFFTConfig : public UDataAsset
728{
729 GENERATED_BODY()
730
731public:
732
737 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
739
744 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
746
751 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
753
758 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
760
765 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
767
772 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
774
779 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
781
786 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
788
793 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, ClampMin = "0", UIMin = "0", Tooltip = "FFT Smoothing factor, be really careful. Each increase scales the buffer by power of 2. Higher = smoother"))
795
800 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
801 bool bSplitChannels = false;
802
803#if WITH_EDITOR
809 inline static FOnPostEditChangePropertyDelegate_FFTConfig OnPostEditChangeProperty;
810
819 virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override
820 {
821 Super::PostEditChangeProperty(PropertyChangedEvent);
822
823 OnPostEditChangeProperty.Broadcast(this, PropertyChangedEvent);
824 }
825#endif
826};
827
833USTRUCT(BlueprintType)
835{
836 GENERATED_BODY()
837
838public:
839
844 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
846
851 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
852 int32 BytesPerFrame = 0;
853
858 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
859 int32 SampleRate = 0;
860
865 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
866 int32 Channels = 0;
867
872 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
873 bool bSplitChannels = false;
874
879 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
880 int32 SampleCount = 0;
881
886 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
888
893 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
895
900 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
902
907 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
909
914 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
915 float SecondsPerPeriod = 0.0f;
916
921 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
922 float TimePerFrame = 0.0f;
923
928 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
930
935 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
937
942 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
944
949 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
951
956 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
958
963 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
965
970 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
971 int32 TotalBins = 0;
972
977 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
978 float FreqPerBin = 0.0f;
979
984 FFFTIOData() = default;
985
994 FFFTIOData(int32 InPeriodSizeInFrames, int32 InBytesPerFrame, int32 InSampleRate, int32 InChannels, UFFTConfig* InFFTConfig)
995 : PeriodSizeInFrames(InPeriodSizeInFrames)
996 , BytesPerFrame(InBytesPerFrame)
997 , SampleRate(InSampleRate)
998 , Channels(InChannels)
999 {
1000 // Calculate dependent values based on inputs
1003
1004 // Find next power of 2
1005 PaddedPeriodSizeInFramesPerChannel = FMath::RoundUpToPowerOfTwo(PeriodSizeInFrames) * (1 << InFFTConfig->FFTPaddingFactor);
1006
1009
1010 TotalBins = PaddedMagnitudeCount; //PaddedMagnitudeCountWithNyquist but without DC Component
1011 // Calculate frequency resolution per bin
1012 FreqPerBin = SampleRate / (float)PaddedPeriodSizeInFramesPerChannel; // Nyquist frequency
1013
1014 // Compute frequency resolution, calculate how much time it takes to process a period of audio samples
1015 SecondsPerPeriod = static_cast<float>(SampleRate) / static_cast<float>(PeriodSizeInFrames);
1016 // how long each frame takes to process in seconds
1017 TimePerFrame = static_cast<float>(PeriodSizeInFrames) / static_cast<float>(SampleRate);
1018
1019 bSplitChannels = InFFTConfig->bSplitChannels;
1020
1021 // Set magnitudes history size based on smoothing type
1022 switch (InFFTConfig->SpectrumConfig.SmoothingConfig.SmoothingType)
1023 {
1024 case EST_SmoothingType::EMA:
1026 break;
1027 case EST_SmoothingType::SMA:
1028 MagnitudesHistorySize = FMath::Max(FMath::CeilToInt(InFFTConfig->SmoothingConfig.TimeWindow / TimePerFrame), 1.0f);
1029 break;
1030 default:
1032 break;
1033 }
1034
1035 // Set frequency bands history size based on smoothing type
1036 switch (InFFTConfig->SpectrumConfig.SmoothingConfig.SmoothingType)
1037 {
1038 case EST_SmoothingType::EMA:
1040 break;
1041 case EST_SmoothingType::SMA:
1042 FrequencyBandsHistorySize = FMath::Max(FMath::CeilToInt(InFFTConfig->SpectrumConfig.SmoothingConfig.TimeWindow / TimePerFrame), 1.0f);
1043 break;
1044 default:
1046 break;
1047 }
1048
1049 // Set amplitude history size based on smoothing type
1050 switch (InFFTConfig->AmplitudeConfig.SmoothingConfig.SmoothingType)
1051 {
1052 case EST_SmoothingType::EMA:
1054 break;
1055 case EST_SmoothingType::SMA:
1056 AmplitudeHistorySize = FMath::Max(FMath::CeilToInt(InFFTConfig->AmplitudeConfig.SmoothingConfig.TimeWindow / TimePerFrame), 1.0f);
1057 break;
1058 default:
1060 break;
1061 }
1062
1063 // Set pitch history size based on smoothing type
1064 switch (InFFTConfig->PitchConfig.SmoothingConfig.SmoothingType)
1065 {
1066 case EST_SmoothingType::EMA:
1067 PitchHistorySize = 2;
1068 break;
1069 case EST_SmoothingType::SMA:
1070 PitchHistorySize = FMath::Max(FMath::CeilToInt(InFFTConfig->PitchConfig.SmoothingConfig.TimeWindow / TimePerFrame), 1.0f);
1071 break;
1072 default:
1073 PitchHistorySize = 1;
1074 break;
1075 }
1076
1077 // Set beat history size based on smoothing type
1078 switch (InFFTConfig->BeatConfig.SmoothingConfig.SmoothingType)
1079 {
1080 case EST_SmoothingType::EMA:
1081 BeatHistorySize = 2;
1082 break;
1083 case EST_SmoothingType::SMA:
1084 BeatHistorySize = FMath::Max(FMath::CeilToInt(InFFTConfig->BeatConfig.SmoothingConfig.TimeWindow / TimePerFrame), 1.0f);
1085 break;
1086 default:
1087 BeatHistorySize = 1;
1088 break;
1089 }
1090
1091 // Calculate the number of frames in the beat time window
1092 float FramesInWindow = InFFTConfig->BeatConfig.BeatTimeWindow / TimePerFrame;
1093 // Apply skip factor: e.g. SkipN = 1 means process every 2nd frame
1094 float EffectiveFrames = FramesInWindow / (InFFTConfig->BeatConfig.BeatTimeWindowSkipN + 1);
1095 DetectedBeatHistorySize = FMath::Max(FMath::CeilToInt(EffectiveFrames), 1);
1096 }
1097
1102 {
1103 if (bSplitChannels)
1104 {
1105 return Channels;
1106 }
1107
1108 return 1;
1109 }
1110};
1111
1115USTRUCT(BlueprintType)
1117{
1118 GENERATED_BODY()
1119
1120public:
1126 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1127 FString DeviceName = "[System Default]";
1128
1132 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
1133 TObjectPtr<UFFTConfig> FFTConfig = nullptr;
1134};
1135
1139USTRUCT(BlueprintType)
1140struct FEncoderConfig : public FAudioIOConfig
1141{
1142 GENERATED_BODY()
1143
1144public:
1149 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1150 bool bCanWriteToFile = false;
1151
1156 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bCanWriteToFile"))
1157 EST_AudioFileLocation AudioFileLocation = EST_AudioFileLocation::ProjectPluginsDir;
1158
1163 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bCanWriteToFile"))
1164 FString OutputFilePath = "ST_VJMaster/ExampleAudio/VJMaster_ExampleWrite.wav";
1165
1171 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1172 EST_EncodingFormat EncodingFormat = EST_EncodingFormat::WAV;
1173
1179 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1180 EST_SampleFormat SampleFormat = EST_SampleFormat::F32;
1181
1186 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1187 int32 Channels = 2;
1188
1193 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1194 int32 SampleRate = 24000; //48000, 44100
1195
1196 FEncoderConfig() = default;
1197
1204 FEncoderConfig(const FAudioIOConfig& BaseConfig)
1205 {
1206 *this = static_cast<const FEncoderConfig&>(BaseConfig); // Inherit base fields
1207 }
1208};
1209
1213USTRUCT(BlueprintType)
1214struct FDecoderConfig : public FAudioIOConfig
1215{
1216 GENERATED_BODY()
1217
1218public:
1223 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1224 float Gain = 1.0f;
1225
1226 FDecoderConfig() = default;
1227
1234 FDecoderConfig(const FAudioIOConfig& BaseConfig)
1235 {
1236 *this = static_cast<const FDecoderConfig&>(BaseConfig); // Inherit base fields
1237 Gain = 1.0f; // Default for FDecoderConfig-specific field
1238 }
1239};
1240
1244USTRUCT(BlueprintType)
1245struct FCaptureLoopbackConfig : public FEncoderConfig
1246{
1247 GENERATED_BODY()
1248
1249public:
1250 // Inherits from FEncoderConfig, no additional properties
1251};
1252
1256USTRUCT(BlueprintType)
1257struct FCaptureMicrophoneConfig : public FEncoderConfig
1258{
1259 GENERATED_BODY()
1260
1261public:
1262 // Inherits from FEncoderConfig, no additional properties
1263};
1264
1268USTRUCT(BlueprintType)
1269struct FPlaybackNoiseConfig : public FDecoderConfig
1270{
1271 GENERATED_BODY()
1272
1273public:
1274 // Inherits from FDecoderConfig
1275
1281 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1282 EST_SampleFormat SampleFormat = EST_SampleFormat::F32;
1283
1288 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1289 int32 Channels = 2;
1290
1295 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1296 int32 SampleRate = 24000; //48000, 44100
1297
1303 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1304 EST_NoiseType NoiseType = EST_NoiseType::White;
1305
1311 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1312 float NoiseAmplitude = 0.2f;
1313
1319 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1320 int32 NoiseSeed = 0;
1321};
1322
1326USTRUCT(BlueprintType)
1327struct FPlaybackWaveformConfig : public FDecoderConfig
1328{
1329 GENERATED_BODY()
1330
1331public:
1332 // Inherits from FDecoderConfig
1333
1339 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1340 EST_SampleFormat SampleFormat = EST_SampleFormat::F32;
1341
1346 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1347 int32 Channels = 2;
1348
1353 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1354 int32 SampleRate = 24000; //48000, 44100
1355
1361 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1362 EST_WaveformType WaveformType = EST_WaveformType::Sine;
1363
1369 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1370 float WaveformAmplitude = 0.2f;
1371
1377 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1378 float WaveformFrequency = 220.0f;
1379};
1380
1384USTRUCT(BlueprintType)
1385struct FPlaybackPlayerConfig : public FDecoderConfig
1386{
1387 GENERATED_BODY()
1388
1389public:
1394 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1395 bool bLooping = true;
1396
1401 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1402 EST_AudioFileLocation AudioFileLocation = EST_AudioFileLocation::ProjectPluginsDir;
1403
1408 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Audio", meta = (SessionRestartRequired))
1409 FString InputFilePath = "ST_VJMaster/ExampleAudio/VJMaster_Example1.mp3";
1410};
1411
1415USTRUCT(BlueprintType)
1416struct FPlaybackEngineConfig : public FDecoderConfig
1417{
1418 GENERATED_BODY()
1419
1420public:
1425 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1426 EST_AudioFileLocation AudioFileLocation = EST_AudioFileLocation::ProjectPluginsDir;
1427
1432 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Audio", meta = (SessionRestartRequired))
1433 FString InputFilePath = "../Audio/ExampleRead.wav";
1434};
1435
1436#if WITH_EDITOR
1445DECLARE_MULTICAST_DELEGATE_TwoParams(FOnPostEditChangePropertyDelegate_APS, UObject*, FPropertyChangedEvent&);
1446#endif
1447
1455UCLASS(Config = ST_VJMaster, DefaultConfig, meta = (DisplayName = "ST Audio Processing"))
1456class ST_AUDIOPROCESSING_API UST_AudioProcessingSettings : public UDeveloperSettings
1457{
1458 GENERATED_BODY()
1459
1460public:
1466 UFUNCTION(BlueprintPure, Category = "ShaderTech|AudioProcessing")
1468 {
1469 return GetDefault<UST_AudioProcessingSettings>();
1470 }
1471
1472#if WITH_EDITOR
1478 inline static FOnPostEditChangePropertyDelegate_APS OnPostEditChangeProperty;
1479
1488 virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override
1489 {
1490 Super::PostEditChangeProperty(PropertyChangedEvent);
1491
1492 OnPostEditChangeProperty.Broadcast(this, PropertyChangedEvent);
1493 }
1494#endif
1495
1503 UPROPERTY(config, EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (Bitmask, BitmaskEnum = "/Script/ST_AudioProcessing.EAudioIOType", EditorRestartRequiredTooltip = "This is a required for creating audio buffers at the beginning of play for materials and compute shaders."))
1505
1510 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Capture")
1512
1517 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Capture")
1519
1524 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Playback")
1526
1531 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Playback")
1533
1538 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Playback")
1540
1545 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Playback")
1547
1548protected:
1549
1555 virtual FName GetCategoryName() const override
1556 {
1557 return TEXT("ShaderTech");
1558 }
1559};
DataAsset that holds configuration settings for FFT.
Definition ST_AudioProcessingSettings.h:728
int32 FFTPaddingFactor
Definition ST_AudioProcessingSettings.h:794
bool bProcessUnchangedBuffer
Definition ST_AudioProcessingSettings.h:780
FFFTAmplitudeConfig AmplitudeConfig
Definition ST_AudioProcessingSettings.h:745
bool bSplitChannels
Definition ST_AudioProcessingSettings.h:801
FFFTPitchConfig PitchConfig
Definition ST_AudioProcessingSettings.h:752
FFFTSpectrumConfig SpectrumConfig
Definition ST_AudioProcessingSettings.h:738
FFFTFilterConfig FilterConfig
Definition ST_AudioProcessingSettings.h:766
FFFTSmoothingConfig SmoothingConfig
Definition ST_AudioProcessingSettings.h:787
FFFTWindowingConfig WindowingConfig
Definition ST_AudioProcessingSettings.h:773
FFFTBeatConfig BeatConfig
Definition ST_AudioProcessingSettings.h:759
Settings class for ST Audio Processing.
Definition ST_AudioProcessingSettings.h:1457
FPlaybackWaveformConfig PlaybackWaveformConfig
Configuration for audio playback waveform.
Definition ST_AudioProcessingSettings.h:1532
FPlaybackNoiseConfig PlaybackNoiseConfig
Configuration for audio playback noise.
Definition ST_AudioProcessingSettings.h:1525
virtual FName GetCategoryName() const override
Gets the category name for the developer settings.
Definition ST_AudioProcessingSettings.h:1555
FCaptureLoopbackConfig CaptureLoopbackConfig
Configuration for audio capture loopback.
Definition ST_AudioProcessingSettings.h:1511
FCaptureMicrophoneConfig CaptureMicrophoneConfig
Configuration for audio capture from a microphone.
Definition ST_AudioProcessingSettings.h:1518
FPlaybackPlayerConfig PlaybackPlayerConfig
Configuration for audio playback player.
Definition ST_AudioProcessingSettings.h:1539
static const UST_AudioProcessingSettings * GetST_AudioProcessingSettings()
Gets the default audio processing settings.
Definition ST_AudioProcessingSettings.h:1467
int32 PossibleAudioIOs
A bitmask that determines the types of possible audio I/O. This is a required for creating audio buff...
Definition ST_AudioProcessingSettings.h:1504
FPlaybackEngineConfig PlaybackEngineConfig
Configuration for audio playback engine.
Definition ST_AudioProcessingSettings.h:1546
Structure that holds the configuration for audio input/output.
Definition ST_AudioProcessingSettings.h:1117
FString DeviceName
The name of the audio device. Defaults to "[System Default]" if not specified. @meta (SessionRestartR...
Definition ST_AudioProcessingSettings.h:1127
TObjectPtr< UFFTConfig > FFTConfig
FFT configuration settings.
Definition ST_AudioProcessingSettings.h:1133
Structure that holds configuration for the capture loopback.
Definition ST_AudioProcessingSettings.h:1246
Structure that holds configuration for capturing from a microphone.
Definition ST_AudioProcessingSettings.h:1258
Structure that holds configuration settings for the FFT (Fast Fourier Transform) Beat detection.
Definition ST_AudioProcessingSettings.h:666
float BeatsPerMinute
Definition ST_AudioProcessingSettings.h:681
bool bBeatDetected
Definition ST_AudioProcessingSettings.h:675
float Gain
The gain factor for the decoded audio (e.g., 0.5 for half volume, 2.0 for double volume)....
Definition ST_AudioProcessingSettings.h:1224
Structure that holds configuration settings for the detected beat.
Definition ST_AudioProcessingSettings.h:691
double BeatTime
Definition ST_AudioProcessingSettings.h:700
float BeatsPerMinute
Definition ST_AudioProcessingSettings.h:706
int32 SampleRate
The sample rate of the audio (e.g., 48000, 44100). @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1194
FString OutputFilePath
Path to the output file where audio will be written, only if bCanWriteToFile is true....
Definition ST_AudioProcessingSettings.h:1164
bool bCanWriteToFile
Whether or not the audio can be written to a file. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1150
EST_EncodingFormat EncodingFormat
The encoding format to be used for the audio output.
Definition ST_AudioProcessingSettings.h:1172
EST_AudioFileLocation AudioFileLocation
Where the OutputFilePath Should start. @meta (SessionRestartRequired, EditCondition = "bCanWriteToFil...
Definition ST_AudioProcessingSettings.h:1157
int32 Channels
The number of audio channels (e.g., 1 for mono, 2 for stereo). @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1187
EST_SampleFormat SampleFormat
The sample format for the audio data.
Definition ST_AudioProcessingSettings.h:1180
Configuration structure for FFT amplitude settings. Defines parameters for amplitude computation and ...
Definition ST_AudioProcessingSettings.h:512
bool bAmplitudeNormalisation
Whether to normalize the amplitude. Scales the amplitude values to a specified range.
Definition ST_AudioProcessingSettings.h:528
bool bComputeAmplitude
Whether to compute amplitude values. Enables or disables amplitude computation.
Definition ST_AudioProcessingSettings.h:521
float MaxAmplitude
Maximum amplitude value for normalization. Used only if bAmplitudeNormalisation is true.
Definition ST_AudioProcessingSettings.h:535
FFFTSmoothingConfig SmoothingConfig
The smoothing configuration for amplitude values. Controls the smoothing behavior for amplitude value...
Definition ST_AudioProcessingSettings.h:542
Structure that holds configuration settings for the FFT (Fast Fourier Transform) Beat detection.
Definition ST_AudioProcessingSettings.h:599
bool bComputeBeat
Definition ST_AudioProcessingSettings.h:609
float BeatTimeWindow
Definition ST_AudioProcessingSettings.h:638
float MaxBeatEnergy
Definition ST_AudioProcessingSettings.h:623
FFFTFilterConfig FilterConfig
Definition ST_AudioProcessingSettings.h:656
bool bNormalise
Definition ST_AudioProcessingSettings.h:616
FFFTSmoothingConfig SmoothingConfig
Definition ST_AudioProcessingSettings.h:649
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Audio", meta=(SessionRestartRequired, ClampMin="0.0", ClampMax="1.0", UIMin="0.0", UIMax="1.0", Tooltip="Smoothing factor for averaging over time (0 = No smoothing, 1 = Full smoothing)")) float BPMSmoothingFactor=0.5f
int32 BeatTimeWindowSkipN
Definition ST_AudioProcessingSettings.h:642
float BeatThreshold
Definition ST_AudioProcessingSettings.h:630
Configuration structure for FFT filter settings. Contains various filter settings including the filte...
Definition ST_AudioProcessingSettings.h:323
bool bHighPassFilter
Whether to apply a high-pass filter. Determines if low frequencies are cut off.
Definition ST_AudioProcessingSettings.h:391
float RippleFactor
Ripple factor for the Chebyshev Type I filter. Only used if FilterType is set to ChebyshevTypeI....
Definition ST_AudioProcessingSettings.h:342
float HighPassCutoffHz
Cutoff frequency for the high-pass filter (in Hz). Only used if bHighPassFilter is true.
Definition ST_AudioProcessingSettings.h:398
float BandUpperCutoffHz
Upper cutoff frequency for the bandpass filter (in Hz). Only used if bBandFilter is true.
Definition ST_AudioProcessingSettings.h:377
bool bBandFilter
Whether to apply a bandpass filter. This filter allows a specific frequency band to pass through.
Definition ST_AudioProcessingSettings.h:363
bool bBandReject
Whether to apply a band-reject filter. This filter eliminates a specific frequency band.
Definition ST_AudioProcessingSettings.h:384
float LowPassCutoffHz
Cutoff frequency for the low-pass filter (in Hz). Only used if bLowPassFilter is true.
Definition ST_AudioProcessingSettings.h:356
bool bLowPassFilter
Whether to apply a low-pass filter. Determines if high frequencies are cut off.
Definition ST_AudioProcessingSettings.h:349
float BandLowerCutoffHz
Lower cutoff frequency for the bandpass filter (in Hz). Only used if bBandFilter is true.
Definition ST_AudioProcessingSettings.h:370
EST_FilterType FilterType
The type of filter to apply. Options include None, ChebyshevTypeI, etc.
Definition ST_AudioProcessingSettings.h:333
int32 PaddedMagnitudeCount
Definition ST_AudioProcessingSettings.h:901
int32 PeriodSizeInFrames
Definition ST_AudioProcessingSettings.h:845
float SecondsPerPeriod
Definition ST_AudioProcessingSettings.h:915
int32 TotalBins
Definition ST_AudioProcessingSettings.h:971
int32 BeatHistorySize
Definition ST_AudioProcessingSettings.h:957
int32 PitchHistorySize
Definition ST_AudioProcessingSettings.h:950
int32 PaddedPeriodSizeInFramesPerChannel
Definition ST_AudioProcessingSettings.h:894
int32 FrequencyBandsHistorySize
Definition ST_AudioProcessingSettings.h:936
int32 SampleCount
Definition ST_AudioProcessingSettings.h:880
int32 BytesPerFrame
Definition ST_AudioProcessingSettings.h:852
int32 Channels
Definition ST_AudioProcessingSettings.h:866
int32 SampleRate
Definition ST_AudioProcessingSettings.h:859
int32 GetChannelMultiplier() const
Definition ST_AudioProcessingSettings.h:1101
int32 MagnitudesHistorySize
Definition ST_AudioProcessingSettings.h:929
bool bSplitChannels
Definition ST_AudioProcessingSettings.h:873
int32 PaddedMagnitudeCountWithNyquist
Definition ST_AudioProcessingSettings.h:908
int32 DetectedBeatHistorySize
Definition ST_AudioProcessingSettings.h:964
float FreqPerBin
Definition ST_AudioProcessingSettings.h:978
int32 TotalBytesPerPeriod
Definition ST_AudioProcessingSettings.h:887
int32 AmplitudeHistorySize
Definition ST_AudioProcessingSettings.h:943
FFFTIOData()=default
float TimePerFrame
Definition ST_AudioProcessingSettings.h:922
Configuration structure for FFT pitch settings. Defines parameters for pitch computation and normaliz...
Definition ST_AudioProcessingSettings.h:552
bool bComputePitch
Whether to compute pitch values. Enables or disables pitch computation.
Definition ST_AudioProcessingSettings.h:561
bool bPitchNormalisation
Whether to normalize the pitch. Scales the pitch values to a specified range.
Definition ST_AudioProcessingSettings.h:568
float MaxFreq
Maximum frequency for pitch computation (in Hz). Used only if bPitchNormalisation is true.
Definition ST_AudioProcessingSettings.h:582
float MinFreq
Minimum frequency for pitch computation (in Hz). Used only if bPitchNormalisation is true.
Definition ST_AudioProcessingSettings.h:575
FFFTSmoothingConfig SmoothingConfig
The smoothing configuration for pitch values. Controls the smoothing behavior for pitch values over t...
Definition ST_AudioProcessingSettings.h:589
Structure for configuring FFT smoothing options.
Definition ST_AudioProcessingSettings.h:299
EST_SmoothingType SmoothingType
Definition ST_AudioProcessingSettings.h:305
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Audio", meta=(SessionRestartRequired, EditCondition="SmoothingType != EST_SmoothingType::None && SmoothingType == EST_SmoothingType::SMA", ClampMin="0.0", UIMin="0.0", Tooltip="Time window (in seconds) used for smoothing values over a set period of time. Larger values result in smoother transitions, while smaller values react more quickly to changes.")) float TimeWindow=0.1f
Configuration structure for FFT spectrum settings. Defines parameters for frequency band computation,...
Definition ST_AudioProcessingSettings.h:436
FFFTSmoothingConfig SmoothingConfig
The smoothing configuration for the spectrum. Controls the smoothing behavior for spectrum values ove...
Definition ST_AudioProcessingSettings.h:502
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Audio", meta=(SessionRestartRequired, EditCondition="bOverrideNyquistLimit && SpectrumSpacing == EST_SpectrumSpacing::Log", Tooltip="Uses CustomMaxFreq instead of NyquistLimit (half the sampling rate)")) float MaxFreq
Maximum frequency for spectrum analysis (in Hz). Used only if Nyquist limit is overridden.
bool bSpectrumNormalisation
Whether to normalize the spectrum. Scales the spectrum to a specified range.
Definition ST_AudioProcessingSettings.h:452
int32 SpectrumBands
Number of frequency bands to use in the spectrum analysis. A higher value provides finer resolution b...
Definition ST_AudioProcessingSettings.h:460
EST_SpectrumValues SpectrumValues
The type of values to display in the spectrum. Options include averages and peaks.
Definition ST_AudioProcessingSettings.h:474
float MinFreq
Minimum frequency for spectrum analysis (in Hz). Used only if SpectrumSpacing is Logarithmic.
Definition ST_AudioProcessingSettings.h:481
EST_SpectrumSpacing SpectrumSpacing
The type of spectrum spacing to use. Options include logarithmic, linear, octave subdivision,...
Definition ST_AudioProcessingSettings.h:467
bool bComputeFrequencyBands
Whether to compute frequency bands. Enables or disables the frequency band computation in the spectru...
Definition ST_AudioProcessingSettings.h:445
bool bOverrideNyquistLimit
Whether to override the Nyquist limit (half the sampling rate). Used only if SpectrumSpacing is Logar...
Definition ST_AudioProcessingSettings.h:488
Configuration structure for FFT windowing function. Contains the windowing function type and addition...
Definition ST_AudioProcessingSettings.h:408
float GaussianWindowSigma
Sigma parameter for the Gaussian window. Only used if WindowingFunction is set to Gaussian....
Definition ST_AudioProcessingSettings.h:426
EST_WindowingFunction WindowingFunction
The type of windowing function to apply. Options include Hann, Gaussian, etc.
Definition ST_AudioProcessingSettings.h:417
Structure that holds configuration for the playback engine.
Definition ST_AudioProcessingSettings.h:1417
FString InputFilePath
Path to the input file for the playback engine. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1433
EST_AudioFileLocation AudioFileLocation
Where the InputFilePath Should start. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1426
Structure that holds configuration for playback of the noise.
Definition ST_AudioProcessingSettings.h:1270
int32 NoiseSeed
Definition ST_AudioProcessingSettings.h:1320
EST_NoiseType NoiseType
The noise type for the audio data.
Definition ST_AudioProcessingSettings.h:1304
EST_SampleFormat SampleFormat
The sample format for the audio data.
Definition ST_AudioProcessingSettings.h:1282
int32 Channels
The number of audio channels (e.g., 1 for mono, 2 for stereo). @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1289
float NoiseAmplitude
Definition ST_AudioProcessingSettings.h:1312
int32 SampleRate
The sample rate of the audio (e.g., 48000, 44100). @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1296
Structure that holds configuration for playback from a player.
Definition ST_AudioProcessingSettings.h:1386
bool bLooping
Whether the audio playback should loop. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1395
EST_AudioFileLocation AudioFileLocation
Where the InputFilePath Should start. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1402
FString InputFilePath
Path to the input file for playback. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1409
Structure that holds configuration for playback of the waveform.
Definition ST_AudioProcessingSettings.h:1328
float WaveformAmplitude
Definition ST_AudioProcessingSettings.h:1370
float WaveformFrequency
Definition ST_AudioProcessingSettings.h:1378
int32 SampleRate
The sample rate of the audio (e.g., 48000, 44100). @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1354
EST_WaveformType WaveformType
The waveform type for the audio data.
Definition ST_AudioProcessingSettings.h:1362
int32 Channels
The number of audio channels (e.g., 1 for mono, 2 for stereo). @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1347
EST_SampleFormat SampleFormat
The sample format for the audio data.
Definition ST_AudioProcessingSettings.h:1340