aboutsummaryrefslogtreecommitdiff
path: root/RayRoom.NAudio
diff options
context:
space:
mode:
Diffstat (limited to 'RayRoom.NAudio')
-rw-r--r--RayRoom.NAudio/AudioOut.cs15
1 files changed, 11 insertions, 4 deletions
diff --git a/RayRoom.NAudio/AudioOut.cs b/RayRoom.NAudio/AudioOut.cs
index 79a3288..8702519 100644
--- a/RayRoom.NAudio/AudioOut.cs
+++ b/RayRoom.NAudio/AudioOut.cs
@@ -49,7 +49,7 @@ namespace RayRoom.NAudioEngine
if (sources.ContainsKey(collision.source.Handler))
sources[collision.source.Handler].Add(collision);
else
- sources.Add(collision.source.Handler, new List<AudioSourceCollision>(10) { collision });
+ sources.Add(collision.source.Handler, new List<AudioSourceCollision>(1) { collision });
foreach (var source in sources)
{
@@ -59,13 +59,20 @@ namespace RayRoom.NAudioEngine
foreach (var collision in source.Value)
{
- int offsetSamples = settings.GetSamplesDelay(collision.distance) * 4;
+ int offsetSamples = settings.GetSamplesDelay(collision.distance) * 4;
+
+ float strength = velocity * (collision.source.Loudness / (collision.distance * collision.distance));
+ if (collision.collisions > 1)
+ {
+ strength /= collision.collisions - 1;
+ }
+
Parallel.For(0, count / 2, i =>
{
if (collision.channel == 0)
- leftBuffer[i + offsetSamples] += samples[i] * velocity * (collision.source.Loudness / MathF.Pow(collision.distance, 2));
+ leftBuffer[i + offsetSamples] += samples[i] * strength;
else
- rightBuffer[i + offsetSamples] += samples[i] * velocity * (collision.source.Loudness / MathF.Pow(collision.distance, 2));
+ rightBuffer[i + offsetSamples] += samples[i] * strength;
});
}