From fb81288f879c787cfe4e37785ade6843cf1e0533 Mon Sep 17 00:00:00 2001 From: James Ball Date: Tue, 11 Feb 2020 21:12:32 +0000 Subject: [PATCH] Cleaned up some of the new code --- src/audio/AudioClient.java | 30 ++++++++++++++++-------------- src/audio/AudioPlayer.java | 20 ++++++++++++++++++-- src/engine/Camera.java | 9 +++++---- src/engine/Main.java | 18 ------------------ src/engine/Renderer.java | 1 + 5 files changed, 40 insertions(+), 38 deletions(-) delete mode 100644 src/engine/Main.java diff --git a/src/audio/AudioClient.java b/src/audio/AudioClient.java index 2e20657..91daaa3 100644 --- a/src/audio/AudioClient.java +++ b/src/audio/AudioClient.java @@ -1,5 +1,8 @@ package audio; +import engine.Camera; +import engine.Vector3; +import engine.WorldObject; import shapes.Ellipse; import shapes.Shapes; import shapes.Vector2; @@ -7,28 +10,27 @@ import shapes.Vector2; public class AudioClient { private static final int SAMPLE_RATE = 192000; - public static void main(String[] args) { + public static void main(String[] args) throws InterruptedException { // TODO: Implement L-Systems drawing and Chinese postman. AudioPlayer player = new AudioPlayer(); AudioPlayer.FORMAT = AudioPlayer.defaultFormat(SAMPLE_RATE); -// AudioPlayer.addShapes(Shapes.generatePolygram(5, 3, 0.5, 60)); - //AudioPlayer.addShapes(Shapes.generatePolygon(500, 0.5, 10)); -// AudioPlayer.addShape(new Ellipse(0.5, 1)); + Camera camera = new Camera(0.6, new Vector3(0, 0, -2), 60); + WorldObject cube = new WorldObject(args[0], new Vector3(0,0,0), new Vector3()); -// AudioPlayer.setRotateSpeed(0.8); -// AudioPlayer.setTranslation(2, new Vector(0.5, 0.5)); - - AudioPlayer.addShapes(Shapes.generatePolygon(4, new Vector2(0.25, 0.25))); - AudioPlayer.addShapes(Shapes.generatePolygon(4, new Vector2(0.5, 0.5))); - AudioPlayer.addShapes(Shapes.generatePolygon(4, new Vector2(-0.8, -0.8))); - for (int i = 0; i < 10; i++) { - AudioPlayer.addShape(new Ellipse(i / 10d, i / 10d)); - } + player.start(); AudioPlayer.setScale(0.5); - player.start(); + while(true) { + AudioPlayer.updateFrame(camera.draw(cube)); + cube.rotate(new Vector3( + 0, + Math.PI / 100, + 0 + )); + Thread.sleep(1000/30); + } } } \ No newline at end of file diff --git a/src/audio/AudioPlayer.java b/src/audio/AudioPlayer.java index 7a4eb11..47781ef 100644 --- a/src/audio/AudioPlayer.java +++ b/src/audio/AudioPlayer.java @@ -1,21 +1,25 @@ package audio; import com.xtaudio.xt.*; +import shapes.Line; import shapes.Shape; import shapes.Vector2; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; public class AudioPlayer extends Thread { + public static XtFormat FORMAT; + private static volatile boolean stopped = false; private static List shapes = new ArrayList<>(); private static int currentShape = 0; private static int framesDrawn = 0; - private static double[] phases = new double[2]; + private static Lock lock = new ReentrantLock(); - public static XtFormat FORMAT; private static double TRANSLATE_SPEED = 0; private static Vector2 TRANSLATE_VECTOR; private static final int TRANSLATE_PHASE_INDEX = 0; @@ -27,6 +31,8 @@ public class AudioPlayer extends Thread { double time, long position, boolean timeValid, long error, Object user) { XtFormat format = stream.getFormat(); + lock.lock(); + for (int f = 0; f < frames; f++) { Shape shape = currentShape(); @@ -50,6 +56,8 @@ public class AudioPlayer extends Thread { currentShape++; } } + + lock.unlock(); } static double nextTheta(double sampleRate, double frequency, int phaseIndex) { @@ -98,6 +106,14 @@ public class AudioPlayer extends Thread { AudioPlayer.shapes.addAll(shapes); } + public static void updateFrame(List frame) { + lock.lock(); + currentShape = 0; + shapes = new ArrayList<>(); + shapes.addAll(frame); + lock.unlock(); + } + private static Shape currentShape() { if (currentShape >= shapes.size()) { currentShape -= shapes.size(); diff --git a/src/engine/Camera.java b/src/engine/Camera.java index 78c0078..48db016 100644 --- a/src/engine/Camera.java +++ b/src/engine/Camera.java @@ -1,6 +1,7 @@ package engine; import shapes.Line; +import shapes.Shape; import shapes.Vector2; import java.util.ArrayList; @@ -16,10 +17,10 @@ public class Camera extends Renderer{ private Vector3 position; private double fov; - public Camera() { - this.focalLength = 0.6; - this.position = new Vector3(0,0,-2); - this.fov = 60; + public Camera(double focalLength, Vector3 position, double fov) { + this.focalLength = focalLength; + this.position = position; + this.fov = fov; } public List draw(WorldObject worldObject) { diff --git a/src/engine/Main.java b/src/engine/Main.java deleted file mode 100644 index a0172a1..0000000 --- a/src/engine/Main.java +++ /dev/null @@ -1,18 +0,0 @@ -package engine; - -public class Main { - public static void main(String[] args) throws InterruptedException { - Camera camera = new Camera(); - - WorldObject cube = new WorldObject("resources/machine.obj", new Vector3(0,0,0), new Vector3()); - while(true) { - camera.draw(cube); - cube.rotate(new Vector3( - 0, - Math.PI / 100, - 0 - )); - Thread.sleep(1000/30); - } - } -} diff --git a/src/engine/Renderer.java b/src/engine/Renderer.java index 286a594..896497a 100644 --- a/src/engine/Renderer.java +++ b/src/engine/Renderer.java @@ -3,6 +3,7 @@ package engine; import shapes.Line; import shapes.Vector2; +import java.awt.*; import java.util.ArrayList; import java.util.List;