aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbonmas14 <bonmas14@gmail.com>2025-08-13 01:10:22 +0300
committerbonmas14 <bonmas14@gmail.com>2025-08-13 01:10:22 +0300
commit0ef93af6cb7a72a985a3a9f9a479d42303442826 (patch)
tree2fb35db7bdf403342e9a97a36cd764b8c7f07af6
parent79d8da74ac98166ec9e9dae7eff820cd9842edb3 (diff)
downloadRayRoom-master.tar.gz
RayRoom-master.zip
It does work actually!!!!!!!master
-rw-r--r--AudioTester/Program.cs28
-rw-r--r--AudioTester/Resources/click.wavbin0 -> 390954 bytes
-rw-r--r--AudioTester/Resources/test.wavbin672214 -> 20109814 bytes
-rw-r--r--RayRoom.NAudio/AudioOut.cs15
-rw-r--r--RayRoom/Core/RaySimulator.cs7
-rw-r--r--RayRoom/Core/ResultContainer.cs4
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
new file mode 100644
index 0000000..1e0b17d
--- /dev/null
+++ b/AudioTester/Resources/click.wav
Binary files differ
diff --git a/AudioTester/Resources/test.wav b/AudioTester/Resources/test.wav
index 8ca09a1..730d6a8 100644
--- a/AudioTester/Resources/test.wav
+++ b/AudioTester/Resources/test.wav
Binary files differ
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;
}
}
}