diff options
author | bonmas14 <bonmas14@gmail.com> | 2025-08-13 01:10:22 +0300 |
---|---|---|
committer | bonmas14 <bonmas14@gmail.com> | 2025-08-13 01:10:22 +0300 |
commit | 0ef93af6cb7a72a985a3a9f9a479d42303442826 (patch) | |
tree | 2fb35db7bdf403342e9a97a36cd764b8c7f07af6 /RayRoom.NAudio/AudioOut.cs | |
parent | 79d8da74ac98166ec9e9dae7eff820cd9842edb3 (diff) | |
download | RayRoom-master.tar.gz RayRoom-master.zip |
It does work actually!!!!!!!master
Diffstat (limited to 'RayRoom.NAudio/AudioOut.cs')
-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; }); } |