diff options
Diffstat (limited to 'RayRoom.NAudio')
-rw-r--r-- | RayRoom.NAudio/AudioOut.cs | 15 |
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; }); } |