From 7c1d3de7bc308a10cd682277306cee3402141def Mon Sep 17 00:00:00 2001
From: tobias <tobias.ullerich@icloud.com>
Date: Tue, 13 Sep 2016 10:50:28 +0200
Subject: [PATCH] Add Waveform native Calls

---
 PlayWallNative/libNativeAudio.dylib           | Bin 0 -> 65024 bytes
 .../src/de/tobias/playpad/Waveform.java       |  26 ++++++++++++
 .../src/de_tobias_playpad_Waveform.h          |  29 ++++++++++++++
 .../test/de/tobias/playpad/WaveformTest.java  |  37 ++++++++++++++++++
 4 files changed, 92 insertions(+)
 create mode 100644 PlayWallNative/libNativeAudio.dylib
 create mode 100644 PlayWallNative/src/de/tobias/playpad/Waveform.java
 create mode 100644 PlayWallNative/src/de_tobias_playpad_Waveform.h
 create mode 100644 PlayWallNative/test/de/tobias/playpad/WaveformTest.java

diff --git a/PlayWallNative/libNativeAudio.dylib b/PlayWallNative/libNativeAudio.dylib
new file mode 100644
index 0000000000000000000000000000000000000000..5d34a877a4081659539f91224ba8a58850a20af9
GIT binary patch
literal 65024
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

literal 0
HcmV?d00001

diff --git a/PlayWallNative/src/de/tobias/playpad/Waveform.java b/PlayWallNative/src/de/tobias/playpad/Waveform.java
new file mode 100644
index 00000000..16cd9ee8
--- /dev/null
+++ b/PlayWallNative/src/de/tobias/playpad/Waveform.java
@@ -0,0 +1,26 @@
+package de.tobias.playpad;
+
+public class Waveform {
+
+	public static native void initialize();
+	
+	public static native void createWaveform(String path);
+
+	private static WaveformDelegate delegate;
+
+	private static void sampleProcessed(float[] data) {
+		if (delegate != null) {
+			delegate.sampleProcessed(data);
+		}
+	}
+
+	public static void setDelegate(WaveformDelegate delegate) {
+		Waveform.delegate = delegate;
+	}
+
+	public interface WaveformDelegate {
+
+		public void sampleProcessed(float[] data);
+
+	}
+}
diff --git a/PlayWallNative/src/de_tobias_playpad_Waveform.h b/PlayWallNative/src/de_tobias_playpad_Waveform.h
new file mode 100644
index 00000000..9d0e45dc
--- /dev/null
+++ b/PlayWallNative/src/de_tobias_playpad_Waveform.h
@@ -0,0 +1,29 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class de_tobias_playpad_Waveform */
+
+#ifndef _Included_de_tobias_playpad_Waveform
+#define _Included_de_tobias_playpad_Waveform
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     de_tobias_playpad_Waveform
+ * Method:    initialize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_Waveform_initialize
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     de_tobias_playpad_Waveform
+ * Method:    createWaveform
+ * Signature: (Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_Waveform_createWaveform
+  (JNIEnv *, jclass, jstring);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/PlayWallNative/test/de/tobias/playpad/WaveformTest.java b/PlayWallNative/test/de/tobias/playpad/WaveformTest.java
new file mode 100644
index 00000000..a9580184
--- /dev/null
+++ b/PlayWallNative/test/de/tobias/playpad/WaveformTest.java
@@ -0,0 +1,37 @@
+package de.tobias.playpad;
+
+import de.tobias.playpad.Waveform.WaveformDelegate;
+
+public class WaveformTest implements WaveformDelegate {
+
+	public static void main(String[] args) {
+		System.load("/Users/tobias/Documents/Programmieren/Java/git/PlayWall/PlayWallNative/libNativeAudio.dylib");
+		
+		new WaveformTest();
+	}
+	
+	public WaveformTest() {
+		Waveform.initialize();
+		Waveform.setDelegate(this);
+		Waveform.createWaveform("/Users/tobias/Downloads/Short.mp3");
+		
+		synchronized (this) {
+			try {
+				wait();
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	@Override
+	public void sampleProcessed(float[] data) {
+		System.out.println(data.length);
+		for (int i = 0; i < data.length; i++) {
+			System.out.println(data[i]);
+		}
+		synchronized (this) {
+			notify();
+		}
+	}
+}
-- 
GitLab