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