1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
using AudioTester.Core;
using NAudio.Mixer;
using NAudio.Wave;
using RayRoom.Core;
using RayRoom.NAudioEngine;
using System.Numerics;
namespace AudioTester
{
internal class Program
{
[STAThread]
static void Main(string[] args)
{
var settings = new Settings(44100, 10, 330 / 10, 300f);
RaySimulator simulator = new RaySimulator(settings);
var sampler = new AudioSampler(@".\Resources\click.wav", true);
List<ICastObject> structures = new List<ICastObject>
{
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(-5, -5);
using (var wo = new WasapiOut(NAudio.CoreAudioApi.AudioClientShareMode.Shared, 150))
{
wo.Init(device);
wo.Play();
while (wo.PlaybackState == PlaybackState.Playing)
{
if (Console.KeyAvailable)
{
var key = Console.ReadKey();
switch (key.Key)
{
case ConsoleKey.Q:
break;
case ConsoleKey.E:
break;
case ConsoleKey.W:
pos += new Vector2(0, 0.1f);
break;
case ConsoleKey.S:
pos += new Vector2(0, -0.1f);
break;
case ConsoleKey.A:
pos += new Vector2(-0.1f, 0);
break;
case ConsoleKey.D:
pos += new Vector2(0.1f, 0);
break;
case ConsoleKey.Escape:
wo.Stop();
break;
default:
break;
}
Console.CursorLeft = 0;
Console.CursorTop = 0;
Console.WriteLine(" {0} ", pos.ToString("0.00"));
}
// 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());
device.Container = container;
}
}
}
}
}
|