From e814850872b17a5627a3b5778c57175cd60cae5c Mon Sep 17 00:00:00 2001
From: tobias <tobias.ullerich@icloud.com>
Date: Tue, 13 Sep 2016 18:56:10 +0200
Subject: [PATCH] Waveform (native)

---
 .../de/tobias/playpad/pad/view/PeakTrack.java |   2 +-
 PlayWallNative/libNativeAudio.dylib           | Bin 65024 -> 65024 bytes
 .../de/tobias/playpad/view/WaveformView.java  |  29 ++++++++
 .../test/de/tobias/playpad/WaveformTest.java  |  65 ++++++++++++------
 4 files changed, 73 insertions(+), 23 deletions(-)
 create mode 100644 PlayWallNative/src/de/tobias/playpad/view/WaveformView.java

diff --git a/PlayWallCore/src/de/tobias/playpad/pad/view/PeakTrack.java b/PlayWallCore/src/de/tobias/playpad/pad/view/PeakTrack.java
index 7c368649..b2a73ec1 100644
--- a/PlayWallCore/src/de/tobias/playpad/pad/view/PeakTrack.java
+++ b/PlayWallCore/src/de/tobias/playpad/pad/view/PeakTrack.java
@@ -37,7 +37,7 @@ public class PeakTrack extends HBox {
 				label.minHeightProperty().bind(minHeightProperty());
 				label.prefHeightProperty().bind(prefHeightProperty());
 
-				label.prefWidthProperty().bind(widthProperty().multiply(0.05).subtract(2));
+				label.prefWidthProperty().bind(widthProperty().multiply(0.05).subtract(3));
 
 				label.setBorder(new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, new CornerRadii(5), new BorderWidths(0.5))));
 				if (i < 0.75)
diff --git a/PlayWallNative/libNativeAudio.dylib b/PlayWallNative/libNativeAudio.dylib
index 5d34a877a4081659539f91224ba8a58850a20af9..5bd4c2fe1271def3fefe42a31d62917ae8226a54 100644
GIT binary patch
delta 576
zcmZqp!`$$PdBYD*0e;b2*4qWF{;%?oUOMBAG|y%Zu7x~I0_vMri#19}bsp-xF!Ouu
zo8|+IovwGfUEg%N-tb5+z41bRvY)<!M4AT!gGV=yphvf9w;Kb4N9TEuPS*u5R!?rz
zx0m1tONtnIbeo!hC9ivQ`p$R}GWo8)xWxl^kWLm3kL1uj9^Iy#U<JotsLFy&IsU>L
zOuKII=mufaQ?3wUHrdHK1_q4(CdV2CO`a~sw|T39aU|2`7n@&o$}usuyx7dubJI(~
zAkEM;CDAx3$=uMuI590PG10`rFe%a0(jqn4Fv%c!GV^uKfY~zZ>c!=hLq3}xf1x21
zXd5G_7`#QO*w;LNWu+*8xkRUJTYx%eP<pBM^8~T@&o^oww|z30HYeBCc={15exnz&
zIk&&Huu?UNd_OVKHq$d~a?SMsk>c47UtTH4YYG0lKZm2#w7XIAhWX?N*S8aP()JsU
z^(QKMWQ#bt#3!zNcJps4v%7jLYn{R5MJMle%~hV$`fZK1+2RFy%bV^C`@YMX*`&WF
ze37}*!sF^oyE~ee1^#Dp@P8m1zoz@jw#lUlw%pk&Qg&zW&2KW>bK`7u`1QUY8~W?M
z2hK`7{wy!<LhJMLBM;gC&)R=hk@bq`#B^(ot}m91?vpESHYhCOzAoC^y657zcUSK$
eSUCCh`gvuG&*U^UhA!-U61<jMYqP|y7s>#j4D!kV

delta 624
zcmZqp!`$$PdBYD*fu(_a{>@aim+x3SCHjcUhx*MNTnl-a9OO5z7HgDH@<{f5V|dBq
z`$v!F1B{NH2V6Q`@3?fkzH#Yvz2T8udgF!oWH)^Ui8v1i29ItYL62_JW;X@~kIwTR
zovsUBES_AaZ(q+2mJ~7a=r+{>OJ4Wr^quj-M;4^VcZP@MLH_1q1`x;fhetQ>4R;We
zg~KB`bdN{3DI-|R@fWfn<(<c07=vlo4IbSfY<kEQWZm%>|6~{#KJyE@uKCO_;CkdU
zzku%=e!Ua?ZCnhKZ44wBzfBG`2x6SDd4qvPBvbsJ&96G;n3(ieZ|3T`>7|fpYHFC2
zoR(^7X=G}gW|(GSk!WmbVw#j}Vq}tLV4gOa`MPGnwOMw$v5^aI&*<B$&|^?>VOPcU
z2{&!G?s)i;^=NNvtACc&s+{A#yH$<{&3Prw8Fg;OhKSEQH*Z^;z~eAoR&=fCDLI+e
zslLU}KRk(&wn^BQG`Z$_fXKIZQ8PF2N1O;1;5_QKTruXe)da7}53X+~?4<2C9P6zP
zbZno0n}6@8<!2RUTn_Yl^@VGXIQNRVvuZl(+dpRT@hCq(x+P&>*VR2S=i=YRmG#@G
zZEq30ypqc{{q%(?%e$mxg4fwper;@Oj3|75Q!iO~(Rbqnu?l_FRL`!btUlWMxuxr0
z>^k%PlS8ZOJ1I4H%bFJb^!AG_r-HsZY+>tQ^q*XDvq2%O^ZlOn*D5vyEjoScOxHFs
aiJgfVxAqA?aY*HTV)j@5?q-QwFO&h1Q3!tk

diff --git a/PlayWallNative/src/de/tobias/playpad/view/WaveformView.java b/PlayWallNative/src/de/tobias/playpad/view/WaveformView.java
new file mode 100644
index 00000000..4d029437
--- /dev/null
+++ b/PlayWallNative/src/de/tobias/playpad/view/WaveformView.java
@@ -0,0 +1,29 @@
+package de.tobias.playpad.view;
+
+import javafx.scene.shape.LineTo;
+import javafx.scene.shape.MoveTo;
+import javafx.scene.shape.Path;
+
+public class WaveformView extends Path {
+
+	public WaveformView(float[] data) {
+		getElements().add(new MoveTo(0, 0));
+
+		for (int i = 0; i < data.length; i++) {
+			LineTo lineTo = new LineTo(i, data[i] * 50.0);
+			MoveTo moveTo = new MoveTo(i, data[i] * 50.0);
+
+			getElements().addAll(lineTo, moveTo);
+		}
+		for (int i = data.length - 1; i >= 0; i--) {
+			LineTo lineTo = new LineTo(i, -data[i] * 50.0);
+			MoveTo moveTo = new MoveTo(i, -data[i] * 50.0);
+
+			getElements().addAll(lineTo, moveTo);
+		}
+		getElements().add(new LineTo(0, 0));
+		getElements().add(new MoveTo(0, 0));
+		setScaleX(0.5);
+
+	}
+}
diff --git a/PlayWallNative/test/de/tobias/playpad/WaveformTest.java b/PlayWallNative/test/de/tobias/playpad/WaveformTest.java
index a9580184..33d856e6 100644
--- a/PlayWallNative/test/de/tobias/playpad/WaveformTest.java
+++ b/PlayWallNative/test/de/tobias/playpad/WaveformTest.java
@@ -1,37 +1,58 @@
 package de.tobias.playpad;
 
 import de.tobias.playpad.Waveform.WaveformDelegate;
+import de.tobias.playpad.view.WaveformView;
+import javafx.application.Application;
+import javafx.geometry.Insets;
+import javafx.scene.Scene;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
 
-public class WaveformTest implements WaveformDelegate {
+public class WaveformTest extends Application {
 
+	private static float[] data;
+	
 	public static void main(String[] args) {
 		System.load("/Users/tobias/Documents/Programmieren/Java/git/PlayWall/PlayWallNative/libNativeAudio.dylib");
+
+		WaveformTest.data = new Test().data;
 		
-		new WaveformTest();
+		launch(args);
 	}
-	
-	public WaveformTest() {
-		Waveform.initialize();
-		Waveform.setDelegate(this);
-		Waveform.createWaveform("/Users/tobias/Downloads/Short.mp3");
+
+	@Override
+	public void start(Stage primaryStage) throws Exception {
+		WaveformView view = new WaveformView(WaveformTest.data);
+		VBox root = new VBox(view);
+		Scene scene = new Scene(root);
 		
-		synchronized (this) {
-			try {
-				wait();
-			} catch (InterruptedException e) {
-				e.printStackTrace();
-			}
-		}
+		primaryStage.setScene(scene);
+		primaryStage.show();
 	}
-	
-	@Override
-	public void sampleProcessed(float[] data) {
-		System.out.println(data.length);
-		for (int i = 0; i < data.length; i++) {
-			System.out.println(data[i]);
+
+	public static class Test implements WaveformDelegate {
+		public Test() {
+			Waveform.initialize();
+			Waveform.setDelegate(this);
+			Waveform.createWaveform("/Users/tobias/Downloads/03%20Hymn%20for%20the%20Weekend.mp3.wav");
+
+			synchronized (this) {
+				try {
+					wait();
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+			}
 		}
-		synchronized (this) {
-			notify();
+
+		float[] data;
+
+		@Override
+		public void sampleProcessed(float[] data) {
+			this.data = data;
+			synchronized (this) {
+				notify();
+			}
 		}
 	}
 }
-- 
GitLab