VJ Master 1.5
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 Format = 0;
860
865 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
866 int32 SampleRate = 0;
867
872 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
873 int32 Channels = 0;
874
879 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
880 bool bSplitChannels = false;
881
886 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
887 int32 SampleCount = 0;
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")
916
921 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
922 float SecondsPerPeriod = 0.0f;
923
928 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
929 float TimePerFrame = 0.0f;
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")
972
977 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
978 int32 TotalBins = 0;
979
984 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
985 float FreqPerBin = 0.0f;
986
991 FFFTIOData() = default;
992
1002 FFFTIOData(int32 InPeriodSizeInFrames, int32 InBytesPerFrame, int32 InFormat, int32 InSampleRate, int32 InChannels, UFFTConfig* InFFTConfig)
1003 : PeriodSizeInFrames(InPeriodSizeInFrames)
1004 , BytesPerFrame(InBytesPerFrame)
1005 , Format(InFormat)
1006 , SampleRate(InSampleRate)
1007 , Channels(InChannels)
1008 {
1009 // Calculate dependent values based on inputs
1012
1013 // Find next power of 2
1014 PaddedPeriodSizeInFramesPerChannel = FMath::RoundUpToPowerOfTwo(PeriodSizeInFrames) * (1 << InFFTConfig->FFTPaddingFactor);
1015
1018
1019 TotalBins = PaddedMagnitudeCount; //PaddedMagnitudeCountWithNyquist but without DC Component
1020 // Calculate frequency resolution per bin
1021 FreqPerBin = SampleRate / (float)PaddedPeriodSizeInFramesPerChannel; // Nyquist frequency
1022
1023 // Compute frequency resolution, calculate how much time it takes to process a period of audio samples
1024 SecondsPerPeriod = static_cast<float>(SampleRate) / static_cast<float>(PeriodSizeInFrames);
1025 // how long each frame takes to process in seconds
1026 TimePerFrame = static_cast<float>(PeriodSizeInFrames) / static_cast<float>(SampleRate);
1027
1028 bSplitChannels = InFFTConfig->bSplitChannels;
1029
1030 // Set magnitudes history size based on smoothing type
1031 switch (InFFTConfig->SpectrumConfig.SmoothingConfig.SmoothingType)
1032 {
1033 case EST_SmoothingType::EMA:
1035 break;
1036 case EST_SmoothingType::SMA:
1037 MagnitudesHistorySize = FMath::Max(FMath::CeilToInt(InFFTConfig->SmoothingConfig.TimeWindow / TimePerFrame), 1.0f);
1038 break;
1039 default:
1041 break;
1042 }
1043
1044 // Set frequency bands history size based on smoothing type
1045 switch (InFFTConfig->SpectrumConfig.SmoothingConfig.SmoothingType)
1046 {
1047 case EST_SmoothingType::EMA:
1049 break;
1050 case EST_SmoothingType::SMA:
1051 FrequencyBandsHistorySize = FMath::Max(FMath::CeilToInt(InFFTConfig->SpectrumConfig.SmoothingConfig.TimeWindow / TimePerFrame), 1.0f);
1052 break;
1053 default:
1055 break;
1056 }
1057
1058 // Set amplitude history size based on smoothing type
1059 switch (InFFTConfig->AmplitudeConfig.SmoothingConfig.SmoothingType)
1060 {
1061 case EST_SmoothingType::EMA:
1063 break;
1064 case EST_SmoothingType::SMA:
1065 AmplitudeHistorySize = FMath::Max(FMath::CeilToInt(InFFTConfig->AmplitudeConfig.SmoothingConfig.TimeWindow / TimePerFrame), 1.0f);
1066 break;
1067 default:
1069 break;
1070 }
1071
1072 // Set pitch history size based on smoothing type
1073 switch (InFFTConfig->PitchConfig.SmoothingConfig.SmoothingType)
1074 {
1075 case EST_SmoothingType::EMA:
1076 PitchHistorySize = 2;
1077 break;
1078 case EST_SmoothingType::SMA:
1079 PitchHistorySize = FMath::Max(FMath::CeilToInt(InFFTConfig->PitchConfig.SmoothingConfig.TimeWindow / TimePerFrame), 1.0f);
1080 break;
1081 default:
1082 PitchHistorySize = 1;
1083 break;
1084 }
1085
1086 // Set beat history size based on smoothing type
1087 switch (InFFTConfig->BeatConfig.SmoothingConfig.SmoothingType)
1088 {
1089 case EST_SmoothingType::EMA:
1090 BeatHistorySize = 2;
1091 break;
1092 case EST_SmoothingType::SMA:
1093 BeatHistorySize = FMath::Max(FMath::CeilToInt(InFFTConfig->BeatConfig.SmoothingConfig.TimeWindow / TimePerFrame), 1.0f);
1094 break;
1095 default:
1096 BeatHistorySize = 1;
1097 break;
1098 }
1099
1100 // Calculate the number of frames in the beat time window
1101 float FramesInWindow = InFFTConfig->BeatConfig.BeatTimeWindow / TimePerFrame;
1102 // Apply skip factor: e.g. SkipN = 1 means process every 2nd frame
1103 float EffectiveFrames = FramesInWindow / (InFFTConfig->BeatConfig.BeatTimeWindowSkipN + 1);
1104 DetectedBeatHistorySize = FMath::Max(FMath::CeilToInt(EffectiveFrames), 1);
1105 }
1106
1111 {
1112 if (bSplitChannels)
1113 {
1114 return Channels;
1115 }
1116
1117 return 1;
1118 }
1119};
1120
1124USTRUCT(BlueprintType)
1126{
1127 GENERATED_BODY()
1128
1129public:
1135 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1136 FString DeviceName = "[System Default]";
1137
1141 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
1142 TObjectPtr<UFFTConfig> FFTConfig = nullptr;
1143
1147 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio")
1149};
1150
1154USTRUCT(BlueprintType)
1155struct FEncoderConfig : public FAudioIOConfig
1156{
1157 GENERATED_BODY()
1158
1159public:
1164 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1165 bool bCanWriteToFile = false;
1166
1171 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bCanWriteToFile"))
1172 EST_AudioFileLocation AudioFileLocation = EST_AudioFileLocation::ProjectPluginsDir;
1173
1178 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Audio", meta = (SessionRestartRequired, EditCondition = "bCanWriteToFile"))
1179 FString OutputFilePath = "ST_VJMaster/ExampleAudio/VJMaster_ExampleWrite.wav";
1180
1186 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1187 EST_EncodingFormat EncodingFormat = EST_EncodingFormat::WAV;
1188
1194 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1195 EST_SampleFormat SampleFormat = EST_SampleFormat::F32;
1196
1201 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1202 int32 Channels = 2;
1203
1208 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1209 int32 SampleRate = 24000; //48000, 44100
1210
1211 FEncoderConfig() = default;
1212
1219 FEncoderConfig(const FAudioIOConfig& BaseConfig)
1220 {
1221 *this = static_cast<const FEncoderConfig&>(BaseConfig); // Inherit base fields
1222 }
1223};
1224
1228USTRUCT(BlueprintType)
1229struct FDecoderConfig : public FAudioIOConfig
1230{
1231 GENERATED_BODY()
1232
1233public:
1238 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1239 float Gain = 1.0f;
1240
1241 FDecoderConfig() = default;
1242
1249 FDecoderConfig(const FAudioIOConfig& BaseConfig)
1250 {
1251 *this = static_cast<const FDecoderConfig&>(BaseConfig); // Inherit base fields
1252 Gain = 1.0f; // Default for FDecoderConfig-specific field
1253 }
1254};
1255
1259USTRUCT(BlueprintType)
1260struct FCaptureLoopbackConfig : public FEncoderConfig
1261{
1262 GENERATED_BODY()
1263
1264public:
1265 // Inherits from FEncoderConfig, no additional properties
1266};
1267
1271USTRUCT(BlueprintType)
1272struct FCaptureMicrophoneConfig : public FEncoderConfig
1273{
1274 GENERATED_BODY()
1275
1276public:
1277 // Inherits from FEncoderConfig, no additional properties
1278};
1279
1283USTRUCT(BlueprintType)
1284struct FPlaybackNoiseConfig : public FDecoderConfig
1285{
1286 GENERATED_BODY()
1287
1288public:
1289 // Inherits from FDecoderConfig
1290
1296 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1297 EST_SampleFormat SampleFormat = EST_SampleFormat::F32;
1298
1303 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1304 int32 Channels = 2;
1305
1310 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1311 int32 SampleRate = 24000; //48000, 44100
1312
1318 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1319 EST_NoiseType NoiseType = EST_NoiseType::White;
1320
1326 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1327 float NoiseAmplitude = 0.2f;
1328
1334 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1335 int32 NoiseSeed = 0;
1336};
1337
1341USTRUCT(BlueprintType)
1342struct FPlaybackWaveformConfig : public FDecoderConfig
1343{
1344 GENERATED_BODY()
1345
1346public:
1347 // Inherits from FDecoderConfig
1348
1354 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1355 EST_SampleFormat SampleFormat = EST_SampleFormat::F32;
1356
1361 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1362 int32 Channels = 2;
1363
1368 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1369 int32 SampleRate = 24000; //48000, 44100
1370
1376 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1377 EST_WaveformType WaveformType = EST_WaveformType::Sine;
1378
1384 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1385 float WaveformAmplitude = 0.2f;
1386
1392 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1393 float WaveformFrequency = 220.0f;
1394};
1395
1399USTRUCT(BlueprintType)
1400struct FPlaybackPlayerConfig : public FDecoderConfig
1401{
1402 GENERATED_BODY()
1403
1404public:
1409 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1410 bool bLooping = true;
1411
1416 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1417 EST_AudioFileLocation AudioFileLocation = EST_AudioFileLocation::ProjectPluginsDir;
1418
1423 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Audio", meta = (SessionRestartRequired))
1424 FString InputFilePath = "ST_VJMaster/ExampleAudio/VJMaster_Example1.mp3";
1425};
1426
1430USTRUCT(BlueprintType)
1431struct FPlaybackEngineConfig : public FDecoderConfig
1432{
1433 GENERATED_BODY()
1434
1435public:
1440 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio", meta = (SessionRestartRequired))
1441 EST_AudioFileLocation AudioFileLocation = EST_AudioFileLocation::ProjectPluginsDir;
1442
1447 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Audio", meta = (SessionRestartRequired))
1448 FString InputFilePath = "../Audio/ExampleRead.wav";
1449};
1450
1451#if WITH_EDITOR
1460DECLARE_MULTICAST_DELEGATE_TwoParams(FOnPostEditChangePropertyDelegate_APS, UObject*, FPropertyChangedEvent&);
1461#endif
1462
1470UCLASS(Config = ST_VJMaster, DefaultConfig, meta = (DisplayName = "ST Audio Processing"))
1471class ST_AUDIOPROCESSING_API UST_AudioProcessingSettings : public UDeveloperSettings
1472{
1473 GENERATED_BODY()
1474
1475public:
1481 UFUNCTION(BlueprintPure, Category = "ShaderTech|AudioProcessing")
1483 {
1484 return GetDefault<UST_AudioProcessingSettings>();
1485 }
1486
1487#if WITH_EDITOR
1493 inline static FOnPostEditChangePropertyDelegate_APS OnPostEditChangeProperty;
1494
1503 virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override
1504 {
1505 Super::PostEditChangeProperty(PropertyChangedEvent);
1506
1507 OnPostEditChangeProperty.Broadcast(this, PropertyChangedEvent);
1508 }
1509#endif
1510
1518 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."))
1520
1525 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Capture")
1527
1532 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Capture")
1534
1539 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Playback")
1541
1546 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Playback")
1548
1553 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Playback")
1555
1560 UPROPERTY(config, EditAnywhere, BlueprintReadOnly, Category = "Playback")
1562
1563protected:
1564
1570 virtual FName GetCategoryName() const override
1571 {
1572 return TEXT("ShaderTech");
1573 }
1574};
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:1472
FPlaybackWaveformConfig PlaybackWaveformConfig
Configuration for audio playback waveform.
Definition ST_AudioProcessingSettings.h:1547
FPlaybackNoiseConfig PlaybackNoiseConfig
Configuration for audio playback noise.
Definition ST_AudioProcessingSettings.h:1540
virtual FName GetCategoryName() const override
Gets the category name for the developer settings.
Definition ST_AudioProcessingSettings.h:1570
FCaptureLoopbackConfig CaptureLoopbackConfig
Configuration for audio capture loopback.
Definition ST_AudioProcessingSettings.h:1526
FCaptureMicrophoneConfig CaptureMicrophoneConfig
Configuration for audio capture from a microphone.
Definition ST_AudioProcessingSettings.h:1533
FPlaybackPlayerConfig PlaybackPlayerConfig
Configuration for audio playback player.
Definition ST_AudioProcessingSettings.h:1554
static const UST_AudioProcessingSettings * GetST_AudioProcessingSettings()
Gets the default audio processing settings.
Definition ST_AudioProcessingSettings.h:1482
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:1519
FPlaybackEngineConfig PlaybackEngineConfig
Configuration for audio playback engine.
Definition ST_AudioProcessingSettings.h:1561
Structure that holds the configuration for audio input/output.
Definition ST_AudioProcessingSettings.h:1126
FString DeviceName
The name of the audio device. Defaults to "[System Default]" if not specified. @meta (SessionRestartR...
Definition ST_AudioProcessingSettings.h:1136
int32 PCMRingBufferSize
PCMRingBuffer Size, increasing this value might improve stability but increases latency.
Definition ST_AudioProcessingSettings.h:1148
TObjectPtr< UFFTConfig > FFTConfig
FFT configuration settings.
Definition ST_AudioProcessingSettings.h:1142
Structure that holds configuration for the capture loopback.
Definition ST_AudioProcessingSettings.h:1261
Structure that holds configuration for capturing from a microphone.
Definition ST_AudioProcessingSettings.h:1273
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:1239
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:1209
FString OutputFilePath
Path to the output file where audio will be written, only if bCanWriteToFile is true....
Definition ST_AudioProcessingSettings.h:1179
bool bCanWriteToFile
Whether or not the audio can be written to a file. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1165
EST_EncodingFormat EncodingFormat
The encoding format to be used for the audio output.
Definition ST_AudioProcessingSettings.h:1187
EST_AudioFileLocation AudioFileLocation
Where the OutputFilePath Should start. @meta (SessionRestartRequired, EditCondition = "bCanWriteToFil...
Definition ST_AudioProcessingSettings.h:1172
int32 Channels
The number of audio channels (e.g., 1 for mono, 2 for stereo). @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1202
EST_SampleFormat SampleFormat
The sample format for the audio data.
Definition ST_AudioProcessingSettings.h:1195
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:908
int32 PeriodSizeInFrames
Definition ST_AudioProcessingSettings.h:845
float SecondsPerPeriod
Definition ST_AudioProcessingSettings.h:922
int32 TotalBins
Definition ST_AudioProcessingSettings.h:978
int32 BeatHistorySize
Definition ST_AudioProcessingSettings.h:964
int32 PitchHistorySize
Definition ST_AudioProcessingSettings.h:957
int32 PaddedPeriodSizeInFramesPerChannel
Definition ST_AudioProcessingSettings.h:901
int32 FrequencyBandsHistorySize
Definition ST_AudioProcessingSettings.h:943
int32 SampleCount
Definition ST_AudioProcessingSettings.h:887
int32 BytesPerFrame
Definition ST_AudioProcessingSettings.h:852
int32 Channels
Definition ST_AudioProcessingSettings.h:873
int32 SampleRate
Definition ST_AudioProcessingSettings.h:866
int32 GetChannelMultiplier() const
Definition ST_AudioProcessingSettings.h:1110
int32 MagnitudesHistorySize
Definition ST_AudioProcessingSettings.h:936
bool bSplitChannels
Definition ST_AudioProcessingSettings.h:880
int32 Format
Definition ST_AudioProcessingSettings.h:859
int32 PaddedMagnitudeCountWithNyquist
Definition ST_AudioProcessingSettings.h:915
int32 DetectedBeatHistorySize
Definition ST_AudioProcessingSettings.h:971
float FreqPerBin
Definition ST_AudioProcessingSettings.h:985
int32 TotalBytesPerPeriod
Definition ST_AudioProcessingSettings.h:894
int32 AmplitudeHistorySize
Definition ST_AudioProcessingSettings.h:950
FFFTIOData()=default
float TimePerFrame
Definition ST_AudioProcessingSettings.h:929
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:1432
FString InputFilePath
Path to the input file for the playback engine. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1448
EST_AudioFileLocation AudioFileLocation
Where the InputFilePath Should start. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1441
Structure that holds configuration for playback of the noise.
Definition ST_AudioProcessingSettings.h:1285
int32 NoiseSeed
Definition ST_AudioProcessingSettings.h:1335
EST_NoiseType NoiseType
The noise type for the audio data.
Definition ST_AudioProcessingSettings.h:1319
EST_SampleFormat SampleFormat
The sample format for the audio data.
Definition ST_AudioProcessingSettings.h:1297
int32 Channels
The number of audio channels (e.g., 1 for mono, 2 for stereo). @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1304
float NoiseAmplitude
Definition ST_AudioProcessingSettings.h:1327
int32 SampleRate
The sample rate of the audio (e.g., 48000, 44100). @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1311
Structure that holds configuration for playback from a player.
Definition ST_AudioProcessingSettings.h:1401
bool bLooping
Whether the audio playback should loop. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1410
EST_AudioFileLocation AudioFileLocation
Where the InputFilePath Should start. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1417
FString InputFilePath
Path to the input file for playback. @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1424
Structure that holds configuration for playback of the waveform.
Definition ST_AudioProcessingSettings.h:1343
float WaveformAmplitude
Definition ST_AudioProcessingSettings.h:1385
float WaveformFrequency
Definition ST_AudioProcessingSettings.h:1393
int32 SampleRate
The sample rate of the audio (e.g., 48000, 44100). @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1369
EST_WaveformType WaveformType
The waveform type for the audio data.
Definition ST_AudioProcessingSettings.h:1377
int32 Channels
The number of audio channels (e.g., 1 for mono, 2 for stereo). @meta (SessionRestartRequired)
Definition ST_AudioProcessingSettings.h:1362
EST_SampleFormat SampleFormat
The sample format for the audio data.
Definition ST_AudioProcessingSettings.h:1355