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 | |
parent | 79d8da74ac98166ec9e9dae7eff820cd9842edb3 (diff) | |
download | RayRoom-0ef93af6cb7a72a985a3a9f9a479d42303442826.tar.gz RayRoom-0ef93af6cb7a72a985a3a9f9a479d42303442826.zip |
It does work actually!!!!!!!master
-rw-r--r-- | AudioTester/Program.cs | 28 | ||||
-rw-r--r-- | AudioTester/Resources/click.wav | bin | 0 -> 390954 bytes | |||
-rw-r--r-- | AudioTester/Resources/test.wav | bin | 672214 -> 20109814 bytes | |||
-rw-r--r-- | RayRoom.NAudio/AudioOut.cs | 15 | ||||
-rw-r--r-- | RayRoom/Core/RaySimulator.cs | 7 | ||||
-rw-r--r-- | RayRoom/Core/ResultContainer.cs | 4 |
6 files changed, 35 insertions, 19 deletions
diff --git a/AudioTester/Program.cs b/AudioTester/Program.cs index c2a3a0b..8bf085b 100644 --- a/AudioTester/Program.cs +++ b/AudioTester/Program.cs @@ -12,25 +12,27 @@ namespace AudioTester [STAThread] static void Main(string[] args) { - var settings = new Settings(44100, 100, 330, 100f); + var settings = new Settings(44100, 10, 330 / 10, 300f); RaySimulator simulator = new RaySimulator(settings); - var sampler = new AudioSampler(@".\Resources\test.wav", true); + var sampler = new AudioSampler(@".\Resources\click.wav", true); List<ICastObject> structures = new List<ICastObject> { - new AudioSource(new Vector2(0, 9), 10, sampler), - new Line(new Vector2(-2, 10), new Vector2(-2, -10)), - new Line(new Vector2(-1, 8), new Vector2(1, 8)), - new Line(new Vector2(2, 10), new Vector2(2, -10)), - new Line(new Vector2(-2, -10), new Vector2(2, -10)), - new Line(new Vector2(-2, 10), new Vector2(2, 10)), + new AudioSource(new Vector2(0, 0), 100, sampler), + new Line(new Vector2(-30, -10), new Vector2(10, -10)), + new Line(new Vector2(10, -10), new Vector2(10, 10)), + new Line(new Vector2(10, 10), new Vector2(-30, 10)), + new Line(new Vector2(-30, 10), new Vector2(-30, -10)), + new Line(new Vector2(-20, 5), new Vector2(-15, 0)), + new Line(new Vector2(-15, 0), new Vector2(-10, 2)), + new Line(new Vector2(-20, 5), new Vector2(-20, -5)), }; var device = new AudioOut(settings); device.Container = new ResultContainer(0, new AudioSourceCollision[0]); - Vector2 pos = new Vector2(0, 0); + Vector2 pos = new Vector2(-5, -5); using (var wo = new WasapiOut(NAudio.CoreAudioApi.AudioClientShareMode.Shared, 150)) { wo.Init(device); @@ -71,8 +73,12 @@ namespace AudioTester Console.WriteLine(" {0} ", pos.ToString("0.00")); } - var left = simulator.Simulate(structures, -Vector2.UnitX * 0.1f + pos, 0, 36); - var right = simulator.Simulate(structures, Vector2.UnitX * 0.1f + pos, 1, 36); + // 3x + // - + // 4 + + var left = simulator.Simulate(structures, -Vector2.UnitX * 0.001f + pos, (7 * MathF.PI) / 8, MathF.PI / 4, 0, 360 * 2); + var right = simulator.Simulate(structures, Vector2.UnitX * 0.001f + pos, MathF.PI / 4, -MathF.PI / 4, 1, 360 * 2); var container = new ResultContainer(36, left.distances.Concat(right.distances).ToArray()); diff --git a/AudioTester/Resources/click.wav b/AudioTester/Resources/click.wav Binary files differnew file mode 100644 index 0000000..1e0b17d --- /dev/null +++ b/AudioTester/Resources/click.wav diff --git a/AudioTester/Resources/test.wav b/AudioTester/Resources/test.wav Binary files differindex 8ca09a1..730d6a8 100644 --- a/AudioTester/Resources/test.wav +++ b/AudioTester/Resources/test.wav 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; }); } diff --git a/RayRoom/Core/RaySimulator.cs b/RayRoom/Core/RaySimulator.cs index 267f4c0..b2b85a2 100644 --- a/RayRoom/Core/RaySimulator.cs +++ b/RayRoom/Core/RaySimulator.cs @@ -11,7 +11,7 @@ namespace RayRoom.Core this.simulationSettings = simulationSettings; } - public ResultContainer Simulate(List<ICastObject> structures, Vector2 position, int channel, int count) + public ResultContainer Simulate(List<ICastObject> structures, Vector2 position, float a_begin, float a_end, int channel, int count) { count += 1; @@ -19,7 +19,8 @@ namespace RayRoom.Core for (int i = 0; i < count; i++) { - float angle = i / (float)count * MathF.PI * 2f; + float t = (float)i / (float)(count - 1); + float angle = (1 - t) * a_begin + t * a_end; startupRays[i] = new Ray(position, UnitVectorFromAngle(angle)); } @@ -50,7 +51,7 @@ namespace RayRoom.Core throw new NullReferenceException("CastInfo collided but castObject is null"); if (closest.castObject.IsAudioSource) - distances.Add(new(closest.distance, (AudioSource)closest.castObject, channel)); + distances.Add(new(closest.distance, (AudioSource)closest.castObject, channel, ray.bounces + 1)); else rays.Add(new Ray(closest.point, ray.direction - 2 * Vector2.Dot(ray.direction, closest.normal) * closest.normal, closest.distance, ray.bounces + 1)); } diff --git a/RayRoom/Core/ResultContainer.cs b/RayRoom/Core/ResultContainer.cs index adecfd7..56aad45 100644 --- a/RayRoom/Core/ResultContainer.cs +++ b/RayRoom/Core/ResultContainer.cs @@ -17,12 +17,14 @@ public readonly float distance; public readonly AudioSource source; public readonly int channel; + public readonly int collisions; - public AudioSourceCollision(float distance, AudioSource source, int channel) + public AudioSourceCollision(float distance, AudioSource source, int channel, int collisions) { this.distance = distance; this.source = source; this.channel = channel; + this.collisions = collisions; } } } |