package de.lessvoid.nifty.sound.openal.slick; import de.lessvoid.nifty.tools.resourceloader.NiftyResourceLoader; import javax.annotation.Nonnull; import java.io.IOException; import java.io.InputStream; import java.net.URL; /** * A utility to provide a simple and rational interface to the * slick internals * * @author kevin */ public class AudioLoader { /** * AIF Format Indicator */ private static final String AIF = "AIF"; /** * WAV Format Indicator */ private static final String WAV = "WAV"; /** * OGG Format Indicator */ private static final String OGG = "OGG"; /** * MOD/XM Format Indicator */ private static final String MOD = "MOD"; /** * MOD/XM Format Indicator */ private static final String XM = "XM"; /** * True if the audio loader has be initialised */ private static boolean inited = false; /** * Initialise the audio loader */ private static void init() { if (!inited) { SoundStore.get().init(); inited = true; } } /** * Get audio data in a playable state by loading the complete audio into * memory. * * @param format The format of the audio to be loaded (something like "XM" or "OGG") * @param in The input stream from which to load the audio data * @return An object representing the audio data * @throws IOException Indicates a failure to access the audio data */ @Nonnull public static Audio getAudio(@Nonnull String format, @Nonnull InputStream in) throws IOException { init(); if (format.equals(AIF)) { return SoundStore.get().getAIF(in); } if (format.equals(WAV)) { return SoundStore.get().getWAV(in); } if (format.equals(OGG)) { return SoundStore.get().getOgg(in); } throw new IOException("Unsupported format for non-streaming Audio: " + format); } /** * Get audio data in a playable state by setting up a stream that can be piped into * OpenAL - i.e. streaming audio * * @param format The format of the audio to be loaded (something like "XM" or "OGG") * @param url The location of the data that should be streamed * @return An object representing the audio data * @throws IOException Indicates a failure to access the audio data */ @Nonnull public static Audio getStreamingAudio( @Nonnull String format, @Nonnull URL url, final NiftyResourceLoader resourceLoader) throws IOException { init(); if (format.equals(OGG)) { return SoundStore.get().getOggStream(url, resourceLoader); } if (format.equals(MOD)) { return SoundStore.get().getMOD(url.openStream()); } if (format.equals(XM)) { return SoundStore.get().getMOD(url.openStream()); } throw new IOException("Unsupported format for streaming Audio: " + format); } /** * Allow the streaming system to update itself */ public static void update() { init(); SoundStore.get().poll(0); } }