diff --git a/PlayWallComponents/src/main/java/de/tobias/playpad/audio/TinyAudioHandler.java b/PlayWallComponents/src/main/java/de/tobias/playpad/audio/TinyAudioHandler.java index 2c00a705d8001333b9b77b5d84ab6082bca51f04..8521b0bfcb04c1b977f7278aa82012f96e8cb08c 100644 --- a/PlayWallComponents/src/main/java/de/tobias/playpad/audio/TinyAudioHandler.java +++ b/PlayWallComponents/src/main/java/de/tobias/playpad/audio/TinyAudioHandler.java @@ -37,7 +37,6 @@ public class TinyAudioHandler extends AudioHandler implements Soundcardable, See public static final String SOUND_CARD = "SoundCard"; static final String TYPE = "TinyAudio"; - public static final String NAME = "Java Audiostream"; private static final String MP3 = "mp3"; private static final int SLEEP_TIME_POSITION = 50; 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 index 10dfd45c3115c73d284249510433a10488b2fbca..d7ef064874a6dca1872d8707bc9f6e57dd13c797 100644 --- a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/AVAudioPlayerBridge.java +++ b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/AVAudioPlayerBridge.java @@ -14,9 +14,7 @@ public class AVAudioPlayerBridge { static { - System.out.println("static init start"); initialize(); - System.out.println("static init end"); } private static native void initialize(); @@ -29,6 +27,8 @@ public class AVAudioPlayerBridge { public native void play(); + public native boolean isPlaying(); + public native void pause(); public native void stop(); @@ -51,6 +51,14 @@ public class AVAudioPlayerBridge { public native void setRate(double rate); + public static native AudioDevice[] getAudioDevices(); + + public native void setCurrentAudioDevice(String id); + + /* + Delegate methods + */ + public void onPeakMeter(float left, float right) { if (delegate != null) { delegate.onPeakMeter(this, left, right); @@ -69,10 +77,10 @@ public class AVAudioPlayerBridge { } } - private static NativeAudioDelegate delegate; + private NativeAudioDelegate delegate; - public static void setDelegate(NativeAudioDelegate delegate) { - AVAudioPlayerBridge.delegate = delegate; + public void setDelegate(NativeAudioDelegate delegate) { + this.delegate = delegate; } public interface NativeAudioDelegate { diff --git a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/AudioDevice.java b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/AudioDevice.java new file mode 100644 index 0000000000000000000000000000000000000000..675ddc3e864883b3a85885e9728e607b17f7c1d8 --- /dev/null +++ b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/AudioDevice.java @@ -0,0 +1,45 @@ +package de.tobias.playpad.audio.mac; + +import java.util.Objects; + +public class AudioDevice { + private final String name; + private final String vendor; + private final String id; + + public AudioDevice(String name, String vendor, String id) { + this.name = name; + this.vendor = vendor; + this.id = id; + } + + public String getName() { + return name; + } + + public String getVendor() { + return vendor; + } + + public String getId() { + return id; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof AudioDevice)) return false; + AudioDevice that = (AudioDevice) o; + return Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public String toString() { + return name; + } +} 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 9a33317061549c6b3af503d6f21f7fd6218ce46a..0e94b7cbc3e8cea525918de0eed9cd6bf12a433f 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 @@ -3,18 +3,24 @@ package de.tobias.playpad.audio.mac; import de.thecodelabs.utils.threading.Worker; import de.tobias.playpad.audio.AudioHandler; import de.tobias.playpad.audio.Peakable; +import de.tobias.playpad.audio.Soundcardable; import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.pad.content.PadContent; import de.tobias.playpad.pad.content.play.Seekable; +import de.tobias.playpad.profile.Profile; import javafx.application.Platform; import javafx.beans.property.*; import javafx.util.Duration; import java.nio.file.Path; +import java.util.Optional; +import java.util.stream.Stream; -public class NativeAudioMacHandler extends AudioHandler implements Peakable, Seekable { +public class NativeAudioMacHandler extends AudioHandler implements Peakable, Seekable, Soundcardable { - ObjectProperty<Duration> positionProperty; + public static final String SOUND_CARD = "SoundCardMac"; + + private ObjectProperty<Duration> positionProperty; private ObjectProperty<Duration> durationProperty; private boolean isLoaded; @@ -66,7 +72,7 @@ public class NativeAudioMacHandler extends AudioHandler implements Peakable, See } @Override - public ReadOnlyObjectProperty<Duration> positionProperty() { + public ObjectProperty<Duration> positionProperty() { return positionProperty; } @@ -96,6 +102,9 @@ public class NativeAudioMacHandler extends AudioHandler implements Peakable, See { isLoaded = bridge.load(paths[0].toString()); if (isLoaded) { + String name = (String) Profile.currentProfile().getProfileSettings().getAudioUserInfo().get(SOUND_CARD); + setOutputDevice(name); + Platform.runLater(() -> { durationProperty.set(Duration.seconds(bridge.getDuration())); @@ -128,4 +137,19 @@ public class NativeAudioMacHandler extends AudioHandler implements Peakable, See public double getAudioLevel(Channel channel) { return audioLevelProperty(channel).get(); } + + private AudioDevice[] devices; + + @Override + public void setOutputDevice(String name) { + if (devices == null) { + devices = AVAudioPlayerBridge.getAudioDevices(); + } + + final Optional<String> first = Stream.of(devices) + .filter(device -> device.getName().equals(name)) + .map(AudioDevice::getId) + .findFirst(); + first.ifPresent(s -> bridge.setCurrentAudioDevice(s)); + } } 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 045740ee98513966308ee231d4e8329b7f2a52e4..732b79ac4f6f405700410fc48ba279b620e235d0 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 @@ -3,72 +3,51 @@ package de.tobias.playpad.audio.mac; import de.tobias.playpad.audio.AudioCapability; import de.tobias.playpad.audio.AudioHandler; import de.tobias.playpad.audio.AudioHandlerFactory; -import de.tobias.playpad.audio.Peakable.Channel; -import de.tobias.playpad.audio.mac.AVAudioPlayerBridge.NativeAudioDelegate; -import de.tobias.playpad.pad.PadStatus; +import de.tobias.playpad.audio.mac.delegate.AVAudioPlayerBridgeDelegate; +import de.tobias.playpad.audio.mac.settings.NativeAudioMacSettingsViewController; +import de.tobias.playpad.audio.windows.NativeAudioWinHandler; import de.tobias.playpad.pad.content.PadContent; import de.tobias.playpad.viewcontroller.AudioHandlerViewController; -import javafx.util.Duration; import java.util.ArrayList; import java.util.List; import java.util.Optional; -public class NativeAudioMacHandlerFactory extends AudioHandlerFactory implements NativeAudioDelegate { +public class NativeAudioMacHandlerFactory extends AudioHandlerFactory { private List<NativeAudioMacHandler> handlers = new ArrayList<>(); + private AVAudioPlayerBridgeDelegate bridgeDelegate = new AVAudioPlayerBridgeDelegate(this); - private Optional<NativeAudioMacHandler> getHandlerByBridge(AVAudioPlayerBridge bridge) { + public Optional<NativeAudioMacHandler> getHandlerByBridge(AVAudioPlayerBridge bridge) { return handlers.stream().filter(handler -> handler.getBridge().equals(bridge)).findFirst(); } public NativeAudioMacHandlerFactory(String type) { super(type); - AVAudioPlayerBridge.setDelegate(this); } @Override public AudioHandler createAudioHandler(PadContent content) { NativeAudioMacHandler nativeAudioMacHandler = new NativeAudioMacHandler(content); + nativeAudioMacHandler.getBridge().setDelegate(bridgeDelegate); handlers.add(nativeAudioMacHandler); return nativeAudioMacHandler; } - @Override - 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(AVAudioPlayerBridge bridge, double position) { - Optional<NativeAudioMacHandler> nativeAudioMacHandler = getHandlerByBridge(bridge); - nativeAudioMacHandler.ifPresent(audioMacHandler -> { - audioMacHandler.positionProperty.set(Duration.seconds(position)); - }); - } - - @Override - 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 public boolean isFeatureAvailable(AudioCapability audioCapability) { + for (Class<?> clazz : NativeAudioWinHandler.class.getInterfaces()) { + if (clazz.equals(audioCapability.getAudioFeature())) + return true; + } return false; } @Override public AudioHandlerViewController getAudioFeatureSettings(AudioCapability audioCapability) { + if (audioCapability == AudioCapability.SOUNDCARD) { + return new NativeAudioMacSettingsViewController(); + } return null; } } diff --git a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/delegate/AVAudioPlayerBridgeDelegate.java b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/delegate/AVAudioPlayerBridgeDelegate.java new file mode 100644 index 0000000000000000000000000000000000000000..4b6ec1af52a3b785e1428c8b24234bcadd981267 --- /dev/null +++ b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/delegate/AVAudioPlayerBridgeDelegate.java @@ -0,0 +1,48 @@ +package de.tobias.playpad.audio.mac.delegate; + +import de.tobias.playpad.audio.Peakable; +import de.tobias.playpad.audio.mac.AVAudioPlayerBridge; +import de.tobias.playpad.audio.mac.NativeAudioMacHandler; +import de.tobias.playpad.audio.mac.NativeAudioMacHandlerFactory; +import de.tobias.playpad.pad.PadStatus; +import de.tobias.playpad.pad.content.PadContent; +import javafx.util.Duration; + +import java.util.Optional; + +public class AVAudioPlayerBridgeDelegate implements AVAudioPlayerBridge.NativeAudioDelegate { + + private NativeAudioMacHandlerFactory factory; + + public AVAudioPlayerBridgeDelegate(NativeAudioMacHandlerFactory factory) { + this.factory = factory; + } + + @Override + public void onFinish(AVAudioPlayerBridge bridge) { + Optional<NativeAudioMacHandler> nativeAudioMacHandler = factory.getHandlerByBridge(bridge); + nativeAudioMacHandler.ifPresent(handler -> { + PadContent content = handler.getContent(); + if (content != null) { + content.getPad().setStatus(PadStatus.STOP); + } + }); + } + + @Override + public void onPositionChanged(AVAudioPlayerBridge bridge, double position) { + Optional<NativeAudioMacHandler> nativeAudioMacHandler = factory.getHandlerByBridge(bridge); + nativeAudioMacHandler.ifPresent(audioMacHandler -> { + audioMacHandler.positionProperty().set(Duration.seconds(position)); + }); + } + + @Override + public void onPeakMeter(AVAudioPlayerBridge bridge, float left, float right) { + Optional<NativeAudioMacHandler> nativeAudioMacHandler = factory.getHandlerByBridge(bridge); + nativeAudioMacHandler.ifPresent(handler -> { + handler.audioLevelProperty(Peakable.Channel.LEFT).set(left); + handler.audioLevelProperty(Peakable.Channel.RIGHT).set(right); + }); + } +} diff --git a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/settings/NativeAudioMacSettingsViewController.java b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/settings/NativeAudioMacSettingsViewController.java new file mode 100644 index 0000000000000000000000000000000000000000..34f777e58f08790e8577a8d41a1b574694412729 --- /dev/null +++ b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/mac/settings/NativeAudioMacSettingsViewController.java @@ -0,0 +1,123 @@ +package de.tobias.playpad.audio.mac.settings; + +import de.thecodelabs.utils.application.App; +import de.thecodelabs.utils.application.ApplicationUtils; +import de.thecodelabs.utils.application.container.PathType; +import de.thecodelabs.utils.ui.icon.FontAwesomeType; +import de.thecodelabs.utils.ui.icon.FontIcon; +import de.tobias.playpad.audio.mac.AVAudioPlayerBridge; +import de.tobias.playpad.audio.mac.AudioDevice; +import de.tobias.playpad.audio.mac.NativeAudioMacHandler; +import de.tobias.playpad.profile.Profile; +import de.tobias.playpad.profile.ProfileSettings; +import de.tobias.playpad.viewcontroller.AudioHandlerViewController; +import javafx.application.Platform; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; + +import java.nio.file.Path; + +public class NativeAudioMacSettingsViewController extends AudioHandlerViewController implements AVAudioPlayerBridge.NativeAudioDelegate { + + private static final String TEST_SOUND_WAV = "Test-Sound.wav"; + + @FXML + private ComboBox<AudioDevice> soundCardComboBox; + @FXML + private Button testButton; + + private AVAudioPlayerBridge audioPlayer = new AVAudioPlayerBridge(); + + private boolean isChanged; + + public NativeAudioMacSettingsViewController() { + super("namacSettings", "mac", null); + final ProfileSettings profileSettings = Profile.currentProfile().getProfileSettings(); + + testButton.setGraphic(new FontIcon(FontAwesomeType.PLAY)); + + // load test sound + final App app = ApplicationUtils.getApplication(); + Path file = app.getPath(PathType.RESOURCES, TEST_SOUND_WAV); + app.getClasspathResource(TEST_SOUND_WAV).copy(PathType.RESOURCES, TEST_SOUND_WAV); + + audioPlayer.setDelegate(this); + audioPlayer.load(file.toString()); + + soundCardComboBox.getItems().setAll(AVAudioPlayerBridge.getAudioDevices()); + + String name = (String) profileSettings.getAudioUserInfo().get(NativeAudioMacHandler.SOUND_CARD); + for (AudioDevice device : AVAudioPlayerBridge.getAudioDevices()) { + if (device.getName().equals(name)) { + soundCardComboBox.getSelectionModel().select(device); + break; + } + } + + // ersten Auswählen wenn keiner ausgewählt ist, damit keine Probleme + // auftreten da keiene Soundkarte ausgewäht ist + if (soundCardComboBox.getSelectionModel().getSelectedItem() == null) { + soundCardComboBox.getSelectionModel().selectFirst(); + } + + soundCardComboBox.getSelectionModel().selectedItemProperty().addListener((a, b, c) -> { + if (audioPlayer != null) { + audioPlayer.stop(); + testButton.setGraphic(new FontIcon(FontAwesomeType.PLAY)); + } + + isChanged = true; + profileSettings.getAudioUserInfo().put(NativeAudioMacHandler.SOUND_CARD, c.getName()); + }); + } + + @Override + public void onClose() { + if (audioPlayer != null) { + audioPlayer.stop(); + audioPlayer = null; + } + } + + @FXML + private void testButtonHandler(ActionEvent event) { + if (audioPlayer == null) { + return; + } + + if (audioPlayer.isPlaying()) { + audioPlayer.stop(); + testButton.setGraphic(new FontIcon(FontAwesomeType.PLAY)); + } else { + audioPlayer.setCurrentAudioDevice(soundCardComboBox.getValue().getId()); + audioPlayer.play(); + testButton.setGraphic(new FontIcon(FontAwesomeType.STOP)); + } + } + + @Override + public boolean isChanged() { + return isChanged; + } + + /* + AVAudioPlayerBridge.NativeAudioDelegate + */ + + @Override + public void onFinish(AVAudioPlayerBridge bridge) { + Platform.runLater(() -> testButton.setGraphic(new FontIcon(FontAwesomeType.PLAY))); + } + + @Override + public void onPeakMeter(AVAudioPlayerBridge bridge, float left, float right) { + + } + + @Override + public void onPositionChanged(AVAudioPlayerBridge bridge, double position) { + + } +} diff --git a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioWinHandler.java b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioWinHandler.java index c38de5f01d1d07f4eeb215578e36dea20d39ed32..54bc85c696df5c89e8203f87de4a60dea74b6e42 100644 --- a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioWinHandler.java +++ b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioWinHandler.java @@ -162,7 +162,7 @@ public class NativeAudioWinHandler extends AudioHandler implements Soundcardable audioHandler.load(paths[0].toString()); String name = (String) Profile.currentProfile().getProfileSettings().getAudioUserInfo().get(NativeAudioWinHandler.SOUND_CARD); - audioHandler.setDevice(name); + setOutputDevice(name); Platform.runLater(() -> { diff --git a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioWinHandlerFactory.java b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioWinHandlerFactory.java index 2b6d098641335918c5453cc51f1bc2cfbb04b495..ab3f5a0680165e2649da042507c9d6a0c1c23e38 100644 --- a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioWinHandlerFactory.java +++ b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioWinHandlerFactory.java @@ -27,9 +27,9 @@ public class NativeAudioWinHandlerFactory extends AudioHandlerFactory { } @Override - public AudioHandlerViewController getAudioFeatureSettings(AudioCapability audioCapablility) { - if (audioCapablility == AudioCapability.SOUNDCARD) { - return new NativeAudioSettingsViewController(); + public AudioHandlerViewController getAudioFeatureSettings(AudioCapability audioCapability) { + if (audioCapability == AudioCapability.SOUNDCARD) { + return new NativeAudioWinSettingsViewController(); } return null; } diff --git a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioSettingsViewController.java b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioWinSettingsViewController.java similarity index 86% rename from PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioSettingsViewController.java rename to PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioWinSettingsViewController.java index e1c0b265caae0a6a8c0e32ade092943accc4c334..e38eb3dcbbb3c7b61cfa8dd8eff4816fb54051c0 100644 --- a/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioSettingsViewController.java +++ b/PlayWallPluginNativeAudio/src/main/java/de/tobias/playpad/audio/windows/NativeAudioWinSettingsViewController.java @@ -7,6 +7,7 @@ import de.thecodelabs.utils.threading.Worker; import de.thecodelabs.utils.ui.icon.FontAwesomeType; import de.thecodelabs.utils.ui.icon.FontIcon; import de.tobias.playpad.profile.Profile; +import de.tobias.playpad.profile.ProfileSettings; import de.tobias.playpad.viewcontroller.AudioHandlerViewController; import javafx.application.Platform; import javafx.event.ActionEvent; @@ -17,7 +18,7 @@ import nativeaudio.NativeAudio; import java.nio.file.Path; -public class NativeAudioSettingsViewController extends AudioHandlerViewController { +public class NativeAudioWinSettingsViewController extends AudioHandlerViewController { private static final String TEST_SOUND_WAV = "Test-Sound.wav"; @@ -30,15 +31,15 @@ public class NativeAudioSettingsViewController extends AudioHandlerViewControlle private NativeAudio audioPlayer; - NativeAudioSettingsViewController() { + NativeAudioWinSettingsViewController() { super("nawinSettings", "win", null); + final ProfileSettings profileSettings = Profile.currentProfile().getProfileSettings(); testButton.setGraphic(new FontIcon(FontAwesomeType.PLAY)); soundCardComboBox.getItems().setAll(NativeAudio.getDevices()); - String name = (String) Profile.currentProfile().getProfileSettings().getAudioUserInfo() - .get(NativeAudioWinHandler.SOUND_CARD); + String name = (String) profileSettings.getAudioUserInfo().get(NativeAudioWinHandler.SOUND_CARD); for (String info : NativeAudio.getDevices()) { if (info.equals(name)) { soundCardComboBox.getSelectionModel().select(info); @@ -60,7 +61,7 @@ public class NativeAudioSettingsViewController extends AudioHandlerViewControlle } isChanged = true; - Profile.currentProfile().getProfileSettings().getAudioUserInfo().put(NativeAudioWinHandler.SOUND_CARD, c); + profileSettings.getAudioUserInfo().put(NativeAudioWinHandler.SOUND_CARD, c); }); } 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 index 755158d75fa147d5222abf4134764a19bad7ad64..1c09fe03d64db80ba9d2a9c6cebc1c52edb6ec11 100644 --- a/PlayWallPluginNativeAudio/src/main/java/de_tobias_playpad_audio_mac_AVAudioPlayerBridge.h +++ b/PlayWallPluginNativeAudio/src/main/java/de_tobias_playpad_audio_mac_AVAudioPlayerBridge.h @@ -31,6 +31,14 @@ JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_init JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_play (JNIEnv *, jobject); +/* + * Class: de_tobias_playpad_audio_mac_AVAudioPlayerBridge + * Method: isPlaying + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_isPlaying + (JNIEnv *, jobject); + /* * Class: de_tobias_playpad_audio_mac_AVAudioPlayerBridge * Method: pause @@ -119,6 +127,22 @@ JNIEXPORT jdouble JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_g JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_setRate (JNIEnv *, jobject, jdouble); +/* + * Class: de_tobias_playpad_audio_mac_AVAudioPlayerBridge + * Method: getAudioDevices + * Signature: ()[Lde/tobias/playpad/audio/mac/AudioDevice; + */ +JNIEXPORT jobjectArray JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_getAudioDevices + (JNIEnv *, jclass); + +/* + * Class: de_tobias_playpad_audio_mac_AVAudioPlayerBridge + * Method: setCurrentAudioDevice + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_de_tobias_playpad_audio_mac_AVAudioPlayerBridge_setCurrentAudioDevice + (JNIEnv *, jobject, jstring); + #ifdef __cplusplus } #endif diff --git a/PlayWallPluginNativeAudio/src/main/resources/mac/libNativeAudio.dylib b/PlayWallPluginNativeAudio/src/main/resources/mac/libNativeAudio.dylib index 262f9b8506783c5ed2d22ce93436bb63a0df1bf7..3b3e3996c854c711047b590c7c716ad86583be71 100755 Binary files a/PlayWallPluginNativeAudio/src/main/resources/mac/libNativeAudio.dylib and b/PlayWallPluginNativeAudio/src/main/resources/mac/libNativeAudio.dylib differ diff --git a/PlayWallPluginNativeAudio/src/main/resources/mac/namacSettings.fxml b/PlayWallPluginNativeAudio/src/main/resources/mac/namacSettings.fxml new file mode 100644 index 0000000000000000000000000000000000000000..c52a5222d7ea4aa039054c722581ee69329807e6 --- /dev/null +++ b/PlayWallPluginNativeAudio/src/main/resources/mac/namacSettings.fxml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.ComboBox?> +<?import javafx.scene.layout.HBox?> +<HBox spacing="14.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> + <children> + <ComboBox fx:id="soundCardComboBox" layoutX="118.0" layoutY="14.0" prefHeight="26.0" prefWidth="241.0"/> + <Button fx:id="testButton" layoutX="372.0" layoutY="14.0" mnemonicParsing="false" + onAction="#testButtonHandler"/> + </children> +</HBox>