From 0f912df3c9f9f56d26d6578b8f783ef76d92e3b9 Mon Sep 17 00:00:00 2001 From: James Ball Date: Thu, 27 May 2021 16:36:11 +0100 Subject: [PATCH] Add more compatibility to a range of audio APIs --- pom.xml | 2 +- src/main/java/sh/ball/audio/AudioPlayer.java | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 40c8fb36..847d410d 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ sh.ball osci-render - 1.6.3 + 1.6.4 osci-render diff --git a/src/main/java/sh/ball/audio/AudioPlayer.java b/src/main/java/sh/ball/audio/AudioPlayer.java index 07176ad9..cf5fd7a3 100644 --- a/src/main/java/sh/ball/audio/AudioPlayer.java +++ b/src/main/java/sh/ball/audio/AudioPlayer.java @@ -14,9 +14,7 @@ import xt.audio.Structs.XtMix; import xt.audio.Structs.XtStreamParams; import java.io.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; @@ -25,7 +23,6 @@ import sh.ball.shapes.Vector2; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; -import java.util.List; import java.util.concurrent.Semaphore; import java.util.concurrent.locks.ReentrantLock; @@ -164,12 +161,20 @@ public class AudioPlayer implements Renderer, AudioInputStream> { try (XtPlatform platform = XtAudio.init(null, null)) { XtSystem system = platform.setupToSystem(XtSetup.SYSTEM_AUDIO); XtService service = platform.getService(system); + if (service == null) { + service = platform.getService(platform.setupToSystem(XtSetup.PRO_AUDIO)); + } + if (service == null) { + service = platform.getService(platform.setupToSystem(XtSetup.CONSUMER_AUDIO)); + } if (service == null) return; - String defaultOutput = service.getDefaultDeviceId(true); - if (defaultOutput == null) return; + String output = service.getDefaultDeviceId(true); + if (output == null) { + output = service.openDeviceList(EnumSet.of(Enums.XtEnumFlags.OUTPUT)).getId(0); + } - try (XtDevice device = service.openDevice(defaultOutput)) { + try (XtDevice device = service.openDevice(output)) { if (device.supportsFormat(format)) { XtBufferSize size = device.getBufferSize(format);