Compare commits

...

2 Commits

Author SHA1 Message Date
Michael Pfaff 49c273763a
Access WaveFileReader reflectively 2022-09-09 09:26:05 -04:00
Michael Pfaff 34e1bc3868
Remove unnecessary generator arg 2022-09-09 09:25:34 -04:00
2 changed files with 29 additions and 9 deletions

View File

@ -157,7 +157,6 @@
<compilerarg value="-s"/>
<compilerarg path="${lwjgl.target.gen.java}"/>
<compilerarg value="-AgenJavaPath=${lwjgl.target.gen.java}"/>
<compilerarg value="-AgenNativePath=${lwjgl.target.gen.native}/opengl"/>
<compilerarg value="${javac.args.debug}"/>
<compilerarg value="-Acontextspecific"/>
<src>

View File

@ -35,18 +35,24 @@ import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.net.URL;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.ShortBuffer;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.spi.AudioFileReader;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import org.lwjgl.openal.AL10;
import com.sun.media.sound.WaveFileReader;
import dev.pfaff.unfettered.UnsafeUtil;
import static java.lang.invoke.MethodHandles.*;
import static java.lang.invoke.MethodType.*;
/**
*
@ -57,6 +63,21 @@ import com.sun.media.sound.WaveFileReader;
* $Id$
*/
public class WaveData {
private static final MethodHandle MH_getWaveInputStream;
static {
MethodHandles.Lookup l = UnsafeUtil.getTrustedLookup();
try {
Class<?> C_WaveFileReader = Class.forName("com.sun.media.sound.WaveFileReader");
MethodHandle MH_WaveFileReader_constructor = l.findConstructor(C_WaveFileReader, methodType(void.class));
MethodHandle MH_getAudioInputStream = l.findVirtual(AudioFileReader.class, "getAudioInputStream", methodType(AudioInputStream.class, InputStream.class));
MH_getAudioInputStream = MH_getAudioInputStream.asType(MH_getAudioInputStream.type().changeParameterType(0, C_WaveFileReader).changeParameterType(1, BufferedInputStream.class));
MH_getWaveInputStream = foldArguments(MH_getAudioInputStream, dropArguments(MH_WaveFileReader_constructor, 0, BufferedInputStream.class));
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
/** actual wave data */
public final ByteBuffer data;
@ -97,10 +118,10 @@ public class WaveData {
// due to an issue with AudioSystem.getAudioInputStream
// and mixing unsigned and signed code
// we will use the reader directly
WaveFileReader wfr = new WaveFileReader();
return create(wfr.getAudioInputStream(new BufferedInputStream(path.openStream())));
} catch (Exception e) {
org.lwjgl.LWJGLUtil.log("Unable to create from: " + path + ", " + e.getMessage());
AudioInputStream ais = (AudioInputStream) MH_getWaveInputStream.invokeExact(new BufferedInputStream(path.openStream()));
return create(ais);
} catch (Throwable e) {
org.lwjgl.LWJGLUtil.logger().log(() -> "Unable to create from: " + path + ", " + e.getMessage());
return null;
}
}
@ -126,7 +147,7 @@ public class WaveData {
return create(
AudioSystem.getAudioInputStream(is));
} catch (Exception e) {
org.lwjgl.LWJGLUtil.log("Unable to create from inputstream, " + e.getMessage());
org.lwjgl.LWJGLUtil.logger().log(() -> "Unable to create from inputstream, " + e.getMessage());
return null;
}
}
@ -143,7 +164,7 @@ public class WaveData {
AudioSystem.getAudioInputStream(
new BufferedInputStream(new ByteArrayInputStream(buffer))));
} catch (Exception e) {
org.lwjgl.LWJGLUtil.log("Unable to create from byte array, " + e.getMessage());
org.lwjgl.LWJGLUtil.logger().log(() -> "Unable to create from byte array, " + e.getMessage());
return null;
}
}
@ -168,7 +189,7 @@ public class WaveData {
}
return create(bytes);
} catch (Exception e) {
org.lwjgl.LWJGLUtil.log("Unable to create from ByteBuffer, " + e.getMessage());
org.lwjgl.LWJGLUtil.logger().log(() -> "Unable to create from ByteBuffer, " + e.getMessage());
return null;
}
}