diff --git a/FFTStreamHandlerFields.cs b/FFTStreamHandlerFields.cs index 41451e6..8e0fb10 100644 --- a/FFTStreamHandlerFields.cs +++ b/FFTStreamHandlerFields.cs @@ -1,7 +1,6 @@ using FrooxEngine; using Elements.Assets; using CSCore.DSP; -using Elements.Core; namespace Resonance; @@ -32,4 +31,4 @@ public partial class FFTStreamHandler(UserAudioStream stream, FFTS public const string BINSIZE_VARIABLE = "fft_bin_size"; public const string NORMALIZED_VARIABLE = "fft_data_normalized"; public static readonly float[] BAND_RANGES = { 20, 60, 250, 500, 2000, 4000, 6000, 20000 }; -} \ No newline at end of file +} diff --git a/Resonance.cs b/Resonance.cs index adb38d5..c3ded53 100644 --- a/Resonance.cs +++ b/Resonance.cs @@ -33,11 +33,36 @@ public static void OnAwake_Postfix(UserAudioStream __instance) return; - __instance.RunSynchronously(() => { + __instance.RunSynchronously(() => + { int index = __instance.TargetDeviceIndex ?? -1; - - int sampleRate = index > 0 ? __instance.AudioSystem.AudioInputs[index].SampleRate : __instance.AudioSystem.DefaultAudioInput.SampleRate; - + + //44100; + int sampleRate; + + // Check if we're using SDL. Either non-Windows platform or ForceSDLAudio launch argument + // Filter out Steam Voice as a special case. Unless it's the only and Default option somehow. + Type? audioInputType = __instance.AudioSystem.AudioInputCount > 1 ? + __instance.AudioSystem.AudioInputs.First(ain => ain.DeviceID != "SteamVoice").GetType() : + __instance.AudioSystem.DefaultAudioInput.GetType(); + + if (audioInputType.Name != "SDLRecordingDevice") + { + sampleRate = index > 0 ? __instance.AudioSystem.AudioInputs[index].SampleRate : __instance.AudioSystem.DefaultAudioInput.SampleRate; + } + else + { + // We need to cast AudioInput to SDLRecordingDevice to get Format.spec.Freq and set sampleRate. + Resonance.Msg("AudioInput is actually SDLRecordingDevice on Linux. Casting and getting sample rate..."); + + var selectedInput = index > 0 ? __instance.AudioSystem.AudioInputs[index] : __instance.AudioSystem.DefaultAudioInput; + + ValueTuple sdlRecordingDevice_Format = + (ValueTuple)audioInputType.GetProperty("Format").GetValue(selectedInput); + + sampleRate = sdlRecordingDevice_Format.Item1.Freq; + } + FFTStreamSettings settings = new ( @@ -52,7 +77,7 @@ public static void OnAwake_Postfix(UserAudioStream __instance) AutoGain, Quantize_Bins ); - + FFTStreamHandler streamHandler = new(__instance, settings); streamHandler.Setup(); @@ -64,7 +89,7 @@ public static void OnAwake_Postfix(UserAudioStream __instance) { audioStream.BufferSize.Value = 12000; audioStream.MinimumBufferDelay.Value = 0.05f; - } + } __instance.Destroyed += FFTStreamHandler.Destroy; }); @@ -77,9 +102,9 @@ public static void OnNewAudioData_Postfix(UserAudioStream __instan var world = __instance.World; if (world.Focus != World.WorldFocus.Focused || __instance.LocalUser.IsSilenced || (ContactsDialog.RecordingVoiceMessage && ___lastDeviceIndex == __instance.AudioSystem.DefaultAudioInputIndex)) return; - + if (FFTStreamHandler.FFTDict.TryGetValue(__instance, out FFTStreamHandler handler)) handler.UpdateFFTData(buffer); } } -} \ No newline at end of file +} diff --git a/Resonance.csproj b/Resonance.csproj index 9bef97b..fa888b0 100644 --- a/Resonance.csproj +++ b/Resonance.csproj @@ -1,11 +1,11 @@ - net472 + net9 enable enable - preview - 1.0.3 + latest + 1.0.4 $(Version) Cyro Resonance FFT @@ -13,8 +13,12 @@ Copyright (c) 2023 Riley Fields + - C:\Program Files (x86)\Steam\steamapps\common\Resonite\ + C:\Program Files (x86)\Steam\steamapps\common\Resonite\ + $(HOME)/.local/share/Steam/steamapps/common/Resonite/ + + /Custom/Resonite/Install/Path @@ -27,16 +31,19 @@ $(ResonitePath)Libraries\0Harmony.dll - $(ResonitePath)Resonite_Data\Managed\FrooxEngine.dll + $(ResonitePath)FrooxEngine.dll - $(ResonitePath)Resonite_Data\Managed\Elements.Core.dll + $(ResonitePath)Elements.Core.dll - $(ResonitePath)Resonite_Data\Managed\Elements.Assets.dll + $(ResonitePath)Elements.Assets.dll - $(ResonitePath)Resonite_Data\Managed\CSCore.dll + $(ResonitePath)CSCore.dll + + + $(ResonitePath)SDL3-CS.dll @@ -44,8 +51,4 @@ - - - -