From 8cd0e5eb5f7aff2d893ccf13f3a86831a2433449 Mon Sep 17 00:00:00 2001
From: tobias <tobias.ullerich@icloud.com>
Date: Mon, 5 Sep 2016 23:17:11 +0200
Subject: [PATCH] Change loadMethod and add PlayWall AudioHandler
 Implementation

---
 PlayWallNative/.classpath                     |   4 +-
 PlayWallNative/libNativeAudio.dylib           | Bin 29040 -> 29152 bytes
 .../src/de/tobias/playpad/NativeAudio.java    |   2 +-
 .../tobias/playpad/NativeAudioMacHandler.java |  95 ++++++++++++++++++
 .../playpad/NativeAudioMacHandlerConnect.java |  25 +++++
 .../src/de_tobias_playpad_NativeAudio.h       |   4 +-
 .../de/tobias/playpad/NativeAudioTest.java    |   2 +-
 7 files changed, 127 insertions(+), 5 deletions(-)
 create mode 100644 PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandler.java
 create mode 100644 PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java

diff --git a/PlayWallNative/.classpath b/PlayWallNative/.classpath
index 597b13ce..7d032884 100644
--- a/PlayWallNative/.classpath
+++ b/PlayWallNative/.classpath
@@ -2,6 +2,8 @@
 <classpath>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="test"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/PlayWallCore"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/libUtils"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/PlayWallNative/libNativeAudio.dylib b/PlayWallNative/libNativeAudio.dylib
index 705cbc2b351f91928644d28ffdf1c1d63ae698fa..9e45f56048bfff306f009c282fbffd1bbf87b2e4 100755
GIT binary patch
literal 29152
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

delta 6199
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

diff --git a/PlayWallNative/src/de/tobias/playpad/NativeAudio.java b/PlayWallNative/src/de/tobias/playpad/NativeAudio.java
index 9d391bfa..54024192 100644
--- a/PlayWallNative/src/de/tobias/playpad/NativeAudio.java
+++ b/PlayWallNative/src/de/tobias/playpad/NativeAudio.java
@@ -12,7 +12,7 @@ public class NativeAudio {
 	
 	public static native void setVolume(int id, double volume);
 
-	public static native void load(int id, String path);
+	public static native boolean load(int id, String path);
 
 	public static native void dispose(int id);
 
diff --git a/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandler.java b/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandler.java
new file mode 100644
index 00000000..07fa6b9f
--- /dev/null
+++ b/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandler.java
@@ -0,0 +1,95 @@
+package de.tobias.playpad;
+
+import java.nio.file.Path;
+
+import de.tobias.playpad.audio.AudioHandler;
+import de.tobias.playpad.pad.PadStatus;
+import de.tobias.playpad.pad.conntent.PadContent;
+import de.tobias.utils.util.Worker;
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.ReadOnlyObjectProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.util.Duration;
+
+public class NativeAudioMacHandler extends AudioHandler {
+
+	private static int counter = 0;
+
+	private final int id;
+	private ObjectProperty<Duration> positionProperty;
+	private ObjectProperty<Duration> durationProperty;
+	private boolean isLoaded;
+
+	public NativeAudioMacHandler(PadContent content) {
+		super(content);
+
+		id = counter++;
+		positionProperty = new SimpleObjectProperty<>();
+		durationProperty = new SimpleObjectProperty<>();
+	}
+
+	@Override
+	public void play() {
+		NativeAudio.play(id);
+	}
+
+	@Override
+	public void pause() {
+		NativeAudio.pause(id);
+	}
+
+	@Override
+	public void stop() {
+		NativeAudio.stop(id);
+	}
+
+	@Override
+	public Duration getPosition() {
+		return positionProperty.get();
+	}
+
+	@Override
+	public ReadOnlyObjectProperty<Duration> positionProperty() {
+		return positionProperty;
+	}
+
+	@Override
+	public Duration getDuration() {
+		return durationProperty.get();
+	}
+
+	@Override
+	public ReadOnlyObjectProperty<Duration> durationProperty() {
+		return durationProperty;
+	}
+
+	@Override
+	public void setVolume(double volume, double masterVolume, double customVolume) {
+		double vol = customVolume * volume * masterVolume;
+		NativeAudio.setVolume(id, vol);
+
+	}
+
+	@Override
+	public boolean isMediaLoaded() {
+		return isLoaded;
+	}
+
+	@Override
+	public void loadMedia(Path[] paths) {
+		Worker.runLater(() ->
+		{
+			isLoaded = NativeAudio.load(id, paths[0].toString().replace(" ", "%20"));
+			if (isLoaded) {
+				durationProperty.set(Duration.seconds(NativeAudio.getDuration(id)));
+				getContent().getPad().setStatus(PadStatus.READY);
+			}
+		});
+	}
+
+	@Override
+	public void unloadMedia() {
+		NativeAudio.dispose(id);
+	}
+
+}
diff --git a/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java b/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java
new file mode 100644
index 00000000..18f7a20b
--- /dev/null
+++ b/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java
@@ -0,0 +1,25 @@
+package de.tobias.playpad;
+
+import de.tobias.playpad.audio.AudioHandler;
+import de.tobias.playpad.audio.AudioHandlerConnect;
+import de.tobias.playpad.pad.conntent.PadContent;
+import de.tobias.playpad.viewcontroller.AudioHandlerViewController;
+
+public class NativeAudioMacHandlerConnect extends AudioHandlerConnect {
+
+	@Override
+	public AudioHandler createAudioHandler(PadContent content) {
+		return new NativeAudioMacHandler(content);
+	}
+
+	@Override
+	public AudioHandlerViewController getAudioHandlerSettingsViewController() {
+		return null;
+	}
+
+	@Override
+	public String getType() {
+		return "Native";
+	}
+
+}
diff --git a/PlayWallNative/src/de_tobias_playpad_NativeAudio.h b/PlayWallNative/src/de_tobias_playpad_NativeAudio.h
index 0d5e2ace..4bd71030 100644
--- a/PlayWallNative/src/de_tobias_playpad_NativeAudio.h
+++ b/PlayWallNative/src/de_tobias_playpad_NativeAudio.h
@@ -50,9 +50,9 @@ JNIEXPORT void JNICALL Java_de_tobias_playpad_NativeAudio_setVolume
 /*
  * Class:     de_tobias_playpad_NativeAudio
  * Method:    load
- * Signature: (ILjava/lang/String;)V
+ * Signature: (ILjava/lang/String;)Z
  */
-JNIEXPORT void JNICALL Java_de_tobias_playpad_NativeAudio_load
+JNIEXPORT jboolean JNICALL Java_de_tobias_playpad_NativeAudio_load
   (JNIEnv *, jclass, jint, jstring);
 
 /*
diff --git a/PlayWallNative/test/de/tobias/playpad/NativeAudioTest.java b/PlayWallNative/test/de/tobias/playpad/NativeAudioTest.java
index 42a6d50a..0fe58a6c 100644
--- a/PlayWallNative/test/de/tobias/playpad/NativeAudioTest.java
+++ b/PlayWallNative/test/de/tobias/playpad/NativeAudioTest.java
@@ -3,7 +3,7 @@ package de.tobias.playpad;
 public class NativeAudioTest {
 	
 	public static void main(String[] args) {
-		System.load("/Users/tobias/Documents/Programmieren/Java/eclipse/PlayWallNative/libNativeAudio.dylib");
+		System.load("/Users/tobias/Documents/Programmieren/Java/git/PlayWall/PlayWallNative/libNativeAudio.dylib");
 
 		NativeAudio.load(0, "/Users/tobias/Downloads/03%20Hymn%20For%20The%20Weekend.mp3.wav");
 		System.out.println(NativeAudio.getDuration(0));
-- 
GitLab