diff --git a/PlayWall/.classpath b/PlayWall/.classpath index a8ad48e81f02fb008bf288df3ca4de61c39311b2..699df52ee1484cd3ff1d0e90b1598192c13e1cb3 100644 --- a/PlayWall/.classpath +++ b/PlayWall/.classpath @@ -15,5 +15,6 @@ <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JLayer"/> <classpathentry combineaccessrules="false" kind="src" path="/PlayWallCore"/> <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/> + <classpathentry combineaccessrules="false" kind="src" path="/PlayWallNative"/> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java index 83b0ae9f158a67dd7b75e20541b165c2d9be331b..e4ffc6b916771f52336f46f31cd9b537cf5720e4 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadImpl.java +++ b/PlayWall/src/de/tobias/playpad/PlayPadImpl.java @@ -235,6 +235,8 @@ public class PlayPadImpl implements PlayPad { registryCollection.getTriggerItems().loadComponentsFromFile("de/tobias/playpad/components/Trigger.xml"); registryCollection.getMainLayouts().loadComponentsFromFile("de/tobias/playpad/components/Layout.xml"); + registryCollection.getAudioHandlers().registerComponent(new NativeAudioMacHandlerConnect(), "Native"); + // Set Default registryCollection.getAudioHandlers().setDefaultID(JavaFXAudioHandler.TYPE); registryCollection.getDesigns().setDefaultID(ModernGlobalDesign.TYPE); diff --git a/PlayWallNative/libNativeAudio.dylib b/PlayWallNative/libNativeAudio.dylib deleted file mode 100755 index af9683034b4ac9019e84a3b0edde7f700584143c..0000000000000000000000000000000000000000 Binary files a/PlayWallNative/libNativeAudio.dylib and /dev/null differ diff --git a/PlayWallNative/src/de/tobias/playpad/NativeAudio.java b/PlayWallNative/src/de/tobias/playpad/NativeAudio.java index a3b74ed8c5121097d5f5a24b7d93a88830eff16a..ae297856500d6b062a9884fea8658e75c9e1ba02 100644 --- a/PlayWallNative/src/de/tobias/playpad/NativeAudio.java +++ b/PlayWallNative/src/de/tobias/playpad/NativeAudio.java @@ -2,6 +2,8 @@ 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); @@ -9,9 +11,9 @@ public class NativeAudio { public static native void stop(int id); 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); @@ -19,6 +21,22 @@ public class NativeAudio { public static native void dispose(int id); public static native double getDuration(int id); - + public static native double getPosition(int id); + + 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 { + public void onFinish(int id); + } } diff --git a/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandler.java b/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandler.java index 174c3281de00777fadbea9f816a00eba3d42e9b7..2ff8be3af4704f216d3e84fa32c99c7161a3961e 100644 --- a/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandler.java +++ b/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandler.java @@ -59,13 +59,17 @@ public class NativeAudioMacHandler extends AudioHandler { positionThread.start(); } - + public NativeAudioMacHandler(PadContent content) { super(content); id = counter++; positionProperty = new SimpleObjectProperty<>(); - durationProperty = new SimpleObjectProperty<>(); + durationProperty = new SimpleObjectProperty<>(); + } + + protected int getId() { + return id; } @Override @@ -161,5 +165,4 @@ public class NativeAudioMacHandler extends AudioHandler { public void unloadMedia() { NativeAudio.dispose(id); } - } diff --git a/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java b/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java index 18f7a20bde755ac701e2de1d727d658c18ecc2b5..6b70456aed4275c6d4909b6e56a0b48c59636001 100644 --- a/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java +++ b/PlayWallNative/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java @@ -1,15 +1,28 @@ package de.tobias.playpad; +import java.util.HashMap; + +import de.tobias.playpad.NativeAudio.NativeAudioDelegate; import de.tobias.playpad.audio.AudioHandler; import de.tobias.playpad.audio.AudioHandlerConnect; +import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.pad.conntent.PadContent; import de.tobias.playpad.viewcontroller.AudioHandlerViewController; -public class NativeAudioMacHandlerConnect extends AudioHandlerConnect { +public class NativeAudioMacHandlerConnect extends AudioHandlerConnect implements NativeAudioDelegate { + + private static final HashMap<Integer, NativeAudioMacHandler> handlers = new HashMap<>(); + + public NativeAudioMacHandlerConnect() { + NativeAudio.initialize(); + NativeAudio.setDelegate(this); + } @Override public AudioHandler createAudioHandler(PadContent content) { - return new NativeAudioMacHandler(content); + NativeAudioMacHandler nativeAudioMacHandler = new NativeAudioMacHandler(content); + handlers.put(nativeAudioMacHandler.getId(), nativeAudioMacHandler); + return nativeAudioMacHandler; } @Override @@ -22,4 +35,14 @@ public class NativeAudioMacHandlerConnect extends AudioHandlerConnect { return "Native"; } + @Override + public void onFinish(int id) { + NativeAudioMacHandler nativeAudioMacHandler = handlers.get(id); + if (nativeAudioMacHandler != null) { + PadContent content = nativeAudioMacHandler.getContent(); + if (content != null) { + content.getPad().setStatus(PadStatus.STOP); + } + } + } }