diff --git a/ADOFAIRenderer.csproj b/ADOFAIRenderer.csproj
index 0b30887..372ef26 100644
--- a/ADOFAIRenderer.csproj
+++ b/ADOFAIRenderer.csproj
@@ -105,25 +105,8 @@
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers
- true
-
-
-
-
-
-
-
-
-
diff --git a/Util/OfflineAudioMixer.cs b/Util/OfflineAudioMixer.cs
index 7beda48..85eefd6 100644
--- a/Util/OfflineAudioMixer.cs
+++ b/Util/OfflineAudioMixer.cs
@@ -327,8 +327,15 @@ namespace ADOFAIRenderer.Util
for (int s = 0; s < samplesNeeded; s++)
{
double sampleTime = frameStartTime + (double)s / _targetSampleRate;
- double elapsed = sampleTime - ev.StartTime;
+ // If it is a looping sound and has reached or exceeded its end time, stop playing.
+ if (ev.EndTime >= 0 && sampleTime >= ev.EndTime)
+ {
+ isSoundFinished = true;
+ break;
+ }
+
+ double elapsed = sampleTime - ev.StartTime;
if (elapsed < 0) continue; // Sound hasn't started yet
double soundTime = elapsed * ev.Pitch;
@@ -340,15 +347,9 @@ namespace ADOFAIRenderer.Util
isSoundFinished = true;
break;
}
- else // Looping
- {
- if (sampleTime >= ev.EndTime)
- {
- isSoundFinished = true;
- break;
- }
- soundTime %= clipData.Duration;
- }
+
+ // Looping
+ soundTime %= clipData.Duration;
}
// Linear interpolation for pitch shifting in the mixer loop
@@ -368,8 +369,8 @@ namespace ADOFAIRenderer.Util
}
}
- // Clean up finished one-shot sounds
- if (isSoundFinished && ev.EndTime < 0)
+ // Clean up finished sound events (both one-shot and looping)
+ if (isSoundFinished)
{
ActiveEvents.RemoveAt(i);
}
diff --git a/obfuscar.xml b/obfuscar.xml
deleted file mode 100644
index bbae929..0000000
--- a/obfuscar.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file