From 5f005dac09ec07404239b618b8a60704fda0195e Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Sat, 6 Jul 2019 21:03:06 +0200
Subject: [PATCH] Refactor native audio (Fixed #135)

---
 .../playpad/plugin/ModernPluginManager.java   |   1 -
 .../java/de/tobias/playpad/NativeAudio.java   |  62 ---------
 .../audio/mac/AVAudioPlayerBridge.java        |  85 ++++++++++++
 .../audio/mac/NativeAudioMacHandler.java      |  31 +++--
 .../mac/NativeAudioMacHandlerFactory.java     |  50 +++----
 .../main/java/de_tobias_playpad_NativeAudio.h | 117 ----------------
 ...as_playpad_audio_mac_AVAudioPlayerBridge.h | 125 ++++++++++++++++++
 .../main/resources/mac/libNativeAudio.dylib   | Bin 65424 -> 75248 bytes
 .../plugin/NativeAudioPluginImpl.scala        |   2 +-
 .../loader/WindowsAudioImplLoader.scala       |  27 ++--
 10 files changed, 269 insertions(+), 231 deletions(-)
 delete mode 100644 PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/NativeAudio.java
 create mode 100644 PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/AVAudioPlayerBridge.java
 delete mode 100644 PlayWallPluginNativeAudio/src/main/java/de_tobias_playpad_NativeAudio.h
 create mode 100644 PlayWallPluginNativeAudio/src/main/java/de_tobias_playpad_audio_mac_AVAudioPlayerBridge.h

diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/plugin/ModernPluginManager.java b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/ModernPluginManager.java
index 86c43e03..3b4d46b7 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/plugin/ModernPluginManager.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/plugin/ModernPluginManager.java
@@ -53,7 +53,6 @@ public class ModernPluginManager {
 		if (Files.notExists(path)) {
 			throw new IOException("File not found: " + path);
 		}
-		loadFile(path);
 	}
 
 	public void loadFile(Path path) {
diff --git a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/NativeAudio.java b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/NativeAudio.java
deleted file mode 100644
index 02a96550..00000000
--- a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/NativeAudio.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package de.tobias.playpad;
-
-public class NativeAudio {
-
-	public static native void initialize();
-
-	public static native void play(int id);
-
-	public static native void pause(int id);
-
-	public static native void stop(int id);
-
-	public static native void seek(int id, double duration);
-
-	public static native void setLoop(int id, boolean loop);
-
-	public static native double getVolume(int id);
-
-	public static native void setVolume(int id, double volume);
-
-	public static native boolean load(int id, String path);
-
-	public static native void dispose(int id);
-
-	public static native double getDuration(int id);
-
-	public static native double getPosition(int id);
-
-	public static native void setRate(int id, double rate);
-
-	public static void onPeakMeter(int id, float left, float right) {
-		if (delegate != null) {
-			delegate.onPeakMeter(id, left, right);
-		}
-	}
-
-	public static void onPositionChanged(int id, double position) {
-		if (delegate != null) {
-			delegate.onPositionChanged(id, position);
-		}
-	}
-
-	public static void onFinish(int id) {
-		if (delegate != null) {
-			delegate.onFinish(id);
-		}
-	}
-
-	private static NativeAudioDelegate delegate;
-
-	public static void setDelegate(NativeAudioDelegate delegate) {
-		NativeAudio.delegate = delegate;
-	}
-
-	public interface NativeAudioDelegate {
-		void onFinish(int id);
-
-		void onPeakMeter(int id, float left, float right);
-
-		void onPositionChanged(int id, double position);
-	}
-}
diff --git a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/AVAudioPlayerBridge.java b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/AVAudioPlayerBridge.java
new file mode 100644
index 00000000..10dfd45c
--- /dev/null
+++ b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/AVAudioPlayerBridge.java
@@ -0,0 +1,85 @@
+package de.tobias.playpad.audio.mac;
+
+public class AVAudioPlayerBridge {
+
+	private long nativePointer;
+
+	private long getNativePointer() {
+		return nativePointer;
+	}
+
+	private void setNativePointer(long nativePointer) {
+		this.nativePointer = nativePointer;
+	}
+
+
+	static {
+		System.out.println("static init start");
+		initialize();
+		System.out.println("static init end");
+	}
+
+	private static native void initialize();
+
+	public AVAudioPlayerBridge() {
+		init();
+	}
+
+	private native void init();
+
+	public native void play();
+
+	public native void pause();
+
+	public native void stop();
+
+	public native void seek(double duration);
+
+	public native void setLoop(boolean loop);
+
+	public native double getVolume();
+
+	public native void setVolume(double volume);
+
+	public native boolean load(String path);
+
+	public native void dispose();
+
+	public native double getDuration();
+
+	public native double getPosition();
+
+	public native void setRate(double rate);
+
+	public void onPeakMeter(float left, float right) {
+		if (delegate != null) {
+			delegate.onPeakMeter(this, left, right);
+		}
+	}
+
+	public void onPositionChanged(double position) {
+		if (delegate != null) {
+			delegate.onPositionChanged(this, position);
+		}
+	}
+
+	public void onFinish() {
+		if (delegate != null) {
+			delegate.onFinish(this);
+		}
+	}
+
+	private static NativeAudioDelegate delegate;
+
+	public static void setDelegate(NativeAudioDelegate delegate) {
+		AVAudioPlayerBridge.delegate = delegate;
+	}
+
+	public interface NativeAudioDelegate {
+		void onFinish(AVAudioPlayerBridge bridge);
+
+		void onPeakMeter(AVAudioPlayerBridge bridge, float left, float right);
+
+		void onPositionChanged(AVAudioPlayerBridge bridge, double position);
+	}
+}
diff --git a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/NativeAudioMacHandler.java b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/NativeAudioMacHandler.java
index 8b21e7ea..9a333170 100644
--- a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/NativeAudioMacHandler.java
+++ b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/NativeAudioMacHandler.java
@@ -1,7 +1,6 @@
 package de.tobias.playpad.audio.mac;
 
 import de.thecodelabs.utils.threading.Worker;
-import de.tobias.playpad.NativeAudio;
 import de.tobias.playpad.audio.AudioHandler;
 import de.tobias.playpad.audio.Peakable;
 import de.tobias.playpad.pad.PadStatus;
@@ -15,9 +14,6 @@ import java.nio.file.Path;
 
 public class NativeAudioMacHandler extends AudioHandler implements Peakable, Seekable {
 
-	private static int counter = 0;
-
-	private final int id;
 	ObjectProperty<Duration> positionProperty;
 	private ObjectProperty<Duration> durationProperty;
 	private boolean isLoaded;
@@ -25,10 +21,13 @@ public class NativeAudioMacHandler extends AudioHandler implements Peakable, See
 	private DoubleProperty leftPeak;
 	private DoubleProperty rightPeak;
 
+	private AVAudioPlayerBridge bridge;
+
 	NativeAudioMacHandler(PadContent content) {
 		super(content);
 
-		id = counter++;
+		bridge = new AVAudioPlayerBridge();
+
 		positionProperty = new SimpleObjectProperty<>();
 		durationProperty = new SimpleObjectProperty<>();
 
@@ -36,29 +35,29 @@ public class NativeAudioMacHandler extends AudioHandler implements Peakable, See
 		rightPeak = new SimpleDoubleProperty();
 	}
 
-	int getId() {
-		return id;
+	AVAudioPlayerBridge getBridge() {
+		return bridge;
 	}
 
 	@Override
 	public void play() {
-		NativeAudio.setLoop(id, getContent().getPad().getPadSettings().isLoop());
-		NativeAudio.play(id);
+		bridge.setLoop(getContent().getPad().getPadSettings().isLoop());
+		bridge.play();
 	}
 
 	@Override
 	public void pause() {
-		NativeAudio.pause(id);
+		bridge.pause();
 	}
 
 	@Override
 	public void stop() {
-		NativeAudio.stop(id);
+		bridge.stop();
 	}
 
 	@Override
 	public void seekToStart() {
-		NativeAudio.seek(id, 0);
+		bridge.seek(0);
 	}
 
 	@Override
@@ -83,7 +82,7 @@ public class NativeAudioMacHandler extends AudioHandler implements Peakable, See
 
 	@Override
 	public void setVolume(double volume) {
-		NativeAudio.setVolume(id, volume);
+		bridge.setVolume(volume);
 	}
 
 	@Override
@@ -95,11 +94,11 @@ public class NativeAudioMacHandler extends AudioHandler implements Peakable, See
 	public void loadMedia(Path[] paths) {
 		Worker.runLater(() ->
 		{
-			isLoaded = NativeAudio.load(id, paths[0].toString());
+			isLoaded = bridge.load(paths[0].toString());
 			if (isLoaded) {
 				Platform.runLater(() ->
 				{
-					durationProperty.set(Duration.seconds(NativeAudio.getDuration(id)));
+					durationProperty.set(Duration.seconds(bridge.getDuration()));
 					getContent().getPad().setStatus(PadStatus.READY);
 					if (getContent().getPad().isPadVisible()) {
 						getContent().getPad().getController().getView().showBusyView(false);
@@ -112,7 +111,7 @@ public class NativeAudioMacHandler extends AudioHandler implements Peakable, See
 
 	@Override
 	public void unloadMedia() {
-		NativeAudio.dispose(id);
+		bridge.dispose();
 	}
 
 	@Override
diff --git a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/NativeAudioMacHandlerFactory.java b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/NativeAudioMacHandlerFactory.java
index a3331f5d..45fd6cb2 100644
--- a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/NativeAudioMacHandlerFactory.java
+++ b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/NativeAudioMacHandlerFactory.java
@@ -1,7 +1,6 @@
 package de.tobias.playpad.audio.mac;
 
-import de.tobias.playpad.NativeAudio;
-import de.tobias.playpad.NativeAudio.NativeAudioDelegate;
+import de.tobias.playpad.audio.mac.AVAudioPlayerBridge.NativeAudioDelegate;
 import de.tobias.playpad.audio.AudioCapability;
 import de.tobias.playpad.audio.AudioHandler;
 import de.tobias.playpad.audio.AudioHandlerFactory;
@@ -11,51 +10,56 @@ import de.tobias.playpad.pad.content.PadContent;
 import de.tobias.playpad.viewcontroller.AudioHandlerViewController;
 import javafx.util.Duration;
 
-import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
 
 public class NativeAudioMacHandlerFactory extends AudioHandlerFactory implements NativeAudioDelegate {
 
-	private static final HashMap<Integer, NativeAudioMacHandler> handlers = new HashMap<>();
+	private List<NativeAudioMacHandler> handlers = new ArrayList<>();
+
+	private Optional<NativeAudioMacHandler> getHandlerByBridge(AVAudioPlayerBridge bridge) {
+		return handlers.stream().filter(handler -> handler.getBridge().equals(bridge)).findFirst();
+	}
 
 	public NativeAudioMacHandlerFactory(String type) {
 		super(type);
-		NativeAudio.initialize();
-		NativeAudio.setDelegate(this);
+		AVAudioPlayerBridge.setDelegate(this);
 	}
 
 	@Override
 	public AudioHandler createAudioHandler(PadContent content) {
 		NativeAudioMacHandler nativeAudioMacHandler = new NativeAudioMacHandler(content);
-		handlers.put(nativeAudioMacHandler.getId(), nativeAudioMacHandler);
+		handlers.add(nativeAudioMacHandler);
 		return nativeAudioMacHandler;
 	}
 
 	@Override
-	public void onFinish(int id) {
-		NativeAudioMacHandler nativeAudioMacHandler = handlers.get(id);
-		if (nativeAudioMacHandler != null) {
-			PadContent content = nativeAudioMacHandler.getContent();
+	public void onFinish(AVAudioPlayerBridge bridge) {
+		Optional<NativeAudioMacHandler> nativeAudioMacHandler = getHandlerByBridge(bridge);
+		nativeAudioMacHandler.ifPresent(handler -> {
+			PadContent content = handler.getContent();
 			if (content != null) {
 				content.getPad().setStatus(PadStatus.STOP);
 			}
-		}
+		});
 	}
 
 	@Override
-	public void onPositionChanged(int id, double position) {
-		NativeAudioMacHandler nativeAudioMacHandler = handlers.get(id);
-		if (nativeAudioMacHandler != null) {
-			nativeAudioMacHandler.positionProperty.set(Duration.seconds(position));
-		}
+	public void onPositionChanged(AVAudioPlayerBridge bridge, double position) {
+		Optional<NativeAudioMacHandler> nativeAudioMacHandler = getHandlerByBridge(bridge);
+		nativeAudioMacHandler.ifPresent(audioMacHandler -> {
+			audioMacHandler.positionProperty.set(Duration.seconds(position));
+		});
 	}
 
 	@Override
-	public void onPeakMeter(int id, float left, float right) {
-		NativeAudioMacHandler nativeAudioMacHandler = handlers.get(id);
-		if (nativeAudioMacHandler != null) {
-			nativeAudioMacHandler.audioLevelProperty(Channel.LEFT).set(left);
-			nativeAudioMacHandler.audioLevelProperty(Channel.RIGHT).set(right);
-		}
+	public void onPeakMeter(AVAudioPlayerBridge bridge, float left, float right) {
+		Optional<NativeAudioMacHandler> nativeAudioMacHandler = getHandlerByBridge(bridge);
+		nativeAudioMacHandler.ifPresent(handler -> {
+			handler.audioLevelProperty(Channel.LEFT).set(left);
+			handler.audioLevelProperty(Channel.RIGHT).set(right);
+		});
 	}
 
 	@Override
diff --git a/PlayWallPluginNativeAudio/src/main/java/de_tobias_playpad_NativeAudio.h b/PlayWallPluginNativeAudio/src/main/java/de_tobias_playpad_NativeAudio.h
deleted file mode 100644
index 8fc9cbea..00000000
--- a/PlayWallPluginNativeAudio/src/main/java/de_tobias_playpad_NativeAudio.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class de_tobias_playpad_NativeAudio */
-
-#ifndef _Included_de_tobias_playpad_NativeAudio
-#define _Included_de_tobias_playpad_NativeAudio
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    initialize
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_de_tobias_playpad_NativeAudio_initialize
-  (JNIEnv *, jclass);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    play
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_de_tobias_playpad_NativeAudio_play
-  (JNIEnv *, jclass, jint);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    pause
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_de_tobias_playpad_NativeAudio_pause
-  (JNIEnv *, jclass, jint);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    stop
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_de_tobias_playpad_NativeAudio_stop
-  (JNIEnv *, jclass, jint);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    seek
- * Signature: (ID)V
- */
-JNIEXPORT void JNICALL Java_de_tobias_playpad_NativeAudio_seek
-  (JNIEnv *, jclass, jint, jdouble);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    setLoop
- * Signature: (IZ)V
- */
-JNIEXPORT void JNICALL Java_de_tobias_playpad_NativeAudio_setLoop
-  (JNIEnv *, jclass, jint, jboolean);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    getVolume
- * Signature: (I)D
- */
-JNIEXPORT jdouble JNICALL Java_de_tobias_playpad_NativeAudio_getVolume
-  (JNIEnv *, jclass, jint);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    setVolume
- * Signature: (ID)V
- */
-JNIEXPORT void JNICALL Java_de_tobias_playpad_NativeAudio_setVolume
-  (JNIEnv *, jclass, jint, jdouble);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    load
- * Signature: (ILjava/lang/String;)Z
- */
-JNIEXPORT jboolean JNICALL Java_de_tobias_playpad_NativeAudio_load
-  (JNIEnv *, jclass, jint, jstring);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    dispose
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_de_tobias_playpad_NativeAudio_dispose
-  (JNIEnv *, jclass, jint);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    getDuration
- * Signature: (I)D
- */
-JNIEXPORT jdouble JNICALL Java_de_tobias_playpad_NativeAudio_getDuration
-  (JNIEnv *, jclass, jint);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    getPosition
- * Signature: (I)D
- */
-JNIEXPORT jdouble JNICALL Java_de_tobias_playpad_NativeAudio_getPosition
-  (JNIEnv *, jclass, jint);
-
-/*
- * Class:     de_tobias_playpad_NativeAudio
- * Method:    setRate
- * Signature: (ID)V
- */
-JNIEXPORT void JNICALL Java_de_tobias_playpad_NativeAudio_setRate
-  (JNIEnv *, jclass, jint, jdouble);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/PlayWallPluginNativeAudio/src/main/java/de_tobias_playpad_audio_mac_AVAudioPlayerBridge.h b/PlayWallPluginNativeAudio/src/main/java/de_tobias_playpad_audio_mac_AVAudioPlayerBridge.h
new file mode 100644
index 00000000..755158d7
--- /dev/null
+++ b/PlayWallPluginNativeAudio/src/main/java/de_tobias_playpad_audio_mac_AVAudioPlayerBridge.h
@@ -0,0 +1,125 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class de_tobias_playpad_audio_mac_AVAudioPlayerBridge */
+
+#ifndef _Included_de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+#define _Included_de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    initialize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_initialize
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_init
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    play
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_play
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    pause
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_pause
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    stop
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_stop
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    seek
+ * Signature: (D)V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_seek
+  (JNIEnv *, jobject, jdouble);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    setLoop
+ * Signature: (Z)V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_setLoop
+  (JNIEnv *, jobject, jboolean);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    getVolume
+ * Signature: ()D
+ */
+JNIEXPORT jdouble JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_getVolume
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    setVolume
+ * Signature: (D)V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_setVolume
+  (JNIEnv *, jobject, jdouble);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    load
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_load
+  (JNIEnv *, jobject, jstring);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    dispose
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_dispose
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    getDuration
+ * Signature: ()D
+ */
+JNIEXPORT jdouble JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_getDuration
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    getPosition
+ * Signature: ()D
+ */
+JNIEXPORT jdouble JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_getPosition
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     de_tobias_playpad_audio_mac_AVAudioPlayerBridge
+ * Method:    setRate
+ * Signature: (D)V
+ */
+JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_setRate
+  (JNIEnv *, jobject, jdouble);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/PlayWallPluginNativeAudio/src/main/resources/mac/libNativeAudio.dylib b/PlayWallPluginNativeAudio/src/main/resources/mac/libNativeAudio.dylib
index a43034c35b242f6dea535e34e3ff888df27d31d6..262f9b8506783c5ed2d22ce93436bb63a0df1bf7 100755
GIT binary patch
literal 75248
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
Bf+YX|

literal 65424
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
V2#kinXb6mkz-S1JhQKfl0RZ#J9LN9w

diff --git a/PlayWallPluginNativeAudio/src/main/scala/de/tobias/playpad/plugin/NativeAudioPluginImpl.scala b/PlayWallPluginNativeAudio/src/main/scala/de/tobias/playpad/plugin/NativeAudioPluginImpl.scala
index b0f1c648..470aba79 100644
--- a/PlayWallPluginNativeAudio/src/main/scala/de/tobias/playpad/plugin/NativeAudioPluginImpl.scala
+++ b/PlayWallPluginNativeAudio/src/main/scala/de/tobias/playpad/plugin/NativeAudioPluginImpl.scala
@@ -10,7 +10,7 @@ import de.tobias.playpad.plugin.loader.{MacAudioImplLoader, WindowsAudioImplLoad
   */
 class NativeAudioPluginImpl extends PlayPadPluginStub with PluginArtifact {
 
-	private val NAME = "NativeAudioMac"
+	private val NAME = "NativeAudio"
 	private val IDENTIFIER = "de.tobias.playwall.plugin.nativeaudio"
 
 	private var module: Module = _
diff --git a/PlayWallPluginNativeAudio/src/main/scala/de/tobias/playpad/plugin/loader/WindowsAudioImplLoader.scala b/PlayWallPluginNativeAudio/src/main/scala/de/tobias/playpad/plugin/loader/WindowsAudioImplLoader.scala
index f490fb40..ee513823 100644
--- a/PlayWallPluginNativeAudio/src/main/scala/de/tobias/playpad/plugin/loader/WindowsAudioImplLoader.scala
+++ b/PlayWallPluginNativeAudio/src/main/scala/de/tobias/playpad/plugin/loader/WindowsAudioImplLoader.scala
@@ -14,6 +14,17 @@ import net.sf.jni4net.Bridge
   */
 class WindowsAudioImplLoader extends AudioModuleLoader {
 
+	val resources = Array(
+		"jni4net.j-0.8.8.0.jar",
+		"jni4net.n-0.8.8.0.dll",
+		"jni4net.n.w32.v40-0.8.8.0.dll",
+		"jni4net.n.w64.v40-0.8.8.0.dll",
+		"NativeAudio.dll",
+		"NativeAudio.j4n.dll",
+		"NativeAudio.j4n.jar",
+		"NAudio.dll"
+	)
+
 	private val ASSETS = "win/"
 
 	override def preInit(): Unit = {
@@ -23,19 +34,13 @@ class WindowsAudioImplLoader extends AudioModuleLoader {
 		if (!app.isDebug) {
 			if (Files.notExists(resourceFolder))
 				Files.createDirectories(resourceFolder)
-			copyResource(resourceFolder, ASSETS, "jni4net.j-0.8.8.0.jar")
-			copyResource(resourceFolder, ASSETS, "jni4net.n-0.8.8.0.dll")
-			copyResource(resourceFolder, ASSETS, "jni4net.n.w32.v40-0.8.8.0.dll")
-			copyResource(resourceFolder, ASSETS, "jni4net.n.w64.v40-0.8.8.0.dll")
-			copyResource(resourceFolder, ASSETS, "NativeAudio.dll")
-			copyResource(resourceFolder, ASSETS, "NativeAudio.j4n.dll")
-			copyResource(resourceFolder, ASSETS, "NativeAudio.j4n.jar")
-			copyResource(resourceFolder, ASSETS, "NAudio.dll")
+
+			resources.foreach(copyResource(resourceFolder, ASSETS, _))
 		}
 
-		Bridge.setVerbose(app isDebug)
-		Bridge.init(resourceFolder toFile)
-		Bridge.LoadAndRegisterAssemblyFrom(resourceFolder.resolve("NativeAudio.j4n.dll") toFile)
+		Bridge.setVerbose(app.isDebug)
+		Bridge.init(resourceFolder.toFile)
+		Bridge.LoadAndRegisterAssemblyFrom(resourceFolder.resolve("NativeAudio.j4n.dll").toFile)
 	}
 
 	override def init(module: Module): Unit = {
-- 
GitLab