\r
public Music (OpenALAudio audio, FileHandle file) {\r
super(audio, file);\r
+ if(audio.noDevice) return;\r
bitstream = new Bitstream(file.read());\r
decoder = new MP3Decoder();\r
try {\r
\r
public Sound (OpenALAudio audio, FileHandle file) {\r
super(audio);\r
-\r
+ if(audio.noDevice) return;\r
ByteArrayOutputStream output = new ByteArrayOutputStream(4096);\r
\r
Bitstream bitstream = new Bitstream(file.read());\r
\r
public Music (OpenALAudio audio, FileHandle file) {\r
super(audio, file);\r
+ if(audio.noDevice) return;\r
input = new OggInputStream(file.read());\r
setup(input.getChannels(), input.getSampleRate());\r
}\r
static public class Sound extends OpenALSound {\r
public Sound (OpenALAudio audio, FileHandle file) {\r
super(audio);\r
-\r
+ if(audio.noDevice) return;\r
OggInputStream input = new OggInputStream(file.read());\r
ByteArrayOutputStream output = new ByteArrayOutputStream(4096);\r
byte[] buffer = new byte[2048];\r
private ObjectMap<String, Class<? extends OpenALMusic>> extensionToMusicClass = new ObjectMap();\r
\r
Array<OpenALMusic> music = new Array(false, 1, OpenALMusic.class);\r
+ boolean noDevice = false;\r
\r
public OpenALAudio () {\r
this(16);\r
try {\r
AL.create();\r
} catch (LWJGLException ex) {\r
- throw new GdxRuntimeException("Error initializing OpenAL.", ex);\r
+ noDevice = true;\r
+ return;\r
+// throw new GdxRuntimeException("Error initializing OpenAL.", ex);\r
}\r
\r
allSources = new IntArray(false, simultaneousSources);\r
}\r
\r
int obtainSource (boolean isMusic) {\r
+ if(noDevice) return 0;\r
for (int i = 0, n = idleSources.size; i < n; i++) {\r
int sourceId = idleSources.get(i);\r
int state = alGetSourcei(sourceId, AL_SOURCE_STATE);\r
}\r
\r
void freeSource (int sourceID) {\r
+ if(noDevice) return;\r
alSourceStop(sourceID);\r
alSourcei(sourceID, AL_BUFFER, 0);\r
if (sourceToSoundId.containsKey(sourceID)) {\r
}\r
\r
void freeBuffer (int bufferID) {\r
+ if(noDevice) return;\r
for (int i = 0, n = idleSources.size; i < n; i++) {\r
int sourceID = idleSources.get(i);\r
if (alGetSourcei(sourceID, AL_BUFFER) == bufferID) {\r
}\r
\r
void stopSourcesWithBuffer (int bufferID) {\r
+ if(noDevice) return;\r
for (int i = 0, n = idleSources.size; i < n; i++) {\r
int sourceID = idleSources.get(i);\r
if (alGetSourcei(sourceID, AL_BUFFER) == bufferID) {\r
}\r
\r
public void update () {\r
+ if(noDevice) return;\r
for (int i = 0; i < music.size; i++)\r
music.items[i].update();\r
}\r
}\r
\r
public void dispose () {\r
+ if(noDevice) return;\r
for (int i = 0, n = allSources.size; i < n; i++) {\r
int sourceID = allSources.get(i);\r
int state = alGetSourcei(sourceID, AL_SOURCE_STATE);\r
}\r
}\r
\r
- public AudioDevice newAudioDevice (int sampleRate, boolean isMono) {\r
+ public AudioDevice newAudioDevice (int sampleRate, final boolean isMono) {\r
+ if(noDevice) return new AudioDevice() {\r
+ @Override\r
+ public void writeSamples (float[] samples, int offset, int numSamples) {\r
+ }\r
+ \r
+ @Override\r
+ public void writeSamples (short[] samples, int offset, int numSamples) {\r
+ }\r
+ \r
+ @Override\r
+ public void setVolume (float volume) {\r
+ }\r
+ \r
+ @Override\r
+ public boolean isMono () {\r
+ return isMono;\r
+ }\r
+ \r
+ @Override\r
+ public int getLatency () {\r
+ return 0;\r
+ }\r
+ \r
+ @Override\r
+ public void dispose () {\r
+ }\r
+ };\r
return new OpenALAudioDevice(this, sampleRate, isMono);\r
}\r
\r
public AudioRecorder newAudioRecorder (int samplingRate, boolean isMono) {\r
+ if(noDevice) return new AudioRecorder() {\r
+ @Override\r
+ public void read (short[] samples, int offset, int numSamples) {\r
+ }\r
+ \r
+ @Override\r
+ public void dispose () {\r
+ }\r
+ };\r
// BOZO - Write OpenAL recorder.\r
return new JavaSoundAudioRecorder(samplingRate, isMono);\r
}\r
public OpenALMusic (OpenALAudio audio, FileHandle file) {\r
this.audio = audio;\r
this.file = file;\r
-\r
- if(audio != null) audio.music.add(this);\r
+ if(audio != null) {\r
+ if(!audio.noDevice) audio.music.add(this);\r
+ }\r
}\r
\r
protected void setup (int channels, int sampleRate) {\r
}\r
\r
public void play () {\r
+ if(audio.noDevice) return;\r
if (sourceID == -1) {\r
sourceID = audio.obtainSource(true);\r
if (sourceID == -1) return;\r
}\r
\r
public void stop () {\r
+ if(audio.noDevice) return;\r
if (sourceID == -1) return;\r
reset();\r
audio.freeSource(sourceID);\r
}\r
\r
public void pause () {\r
+ if(audio.noDevice) return;\r
if (sourceID != -1) alSourcePause(sourceID);\r
isPlaying = false;\r
}\r
\r
public boolean isPlaying () {\r
+ if(audio.noDevice) return false;\r
if (sourceID == -1) return false;\r
return isPlaying;\r
}\r
\r
public void setVolume (float volume) {\r
this.volume = volume;\r
+ if(audio.noDevice) return;\r
if (sourceID != -1) alSourcef(sourceID, AL_GAIN, volume);\r
}\r
\r
public float getPosition () {\r
+ if(audio.noDevice) return 0;\r
if (sourceID == -1) return 0;\r
return renderedSeconds + alGetSourcef(sourceID, AL11.AL_SEC_OFFSET);\r
}\r
}\r
\r
public void update () {\r
+ if(audio.noDevice) return;\r
if (sourceID == -1) return;\r
\r
boolean end = false;\r
}\r
\r
public void dispose () {\r
+ if(audio.noDevice) return;\r
if (buffers == null) return;\r
if (sourceID != -1) {\r
reset();\r
}\r
\r
public long play (float volume) {\r
+ if(audio.noDevice) return 0;\r
int sourceID = audio.obtainSource(false);\r
if (sourceID == -1) return -1;\r
long soundId = audio.getSoundId(sourceID);\r
\r
@Override\r
public long loop (float volume) {\r
+ if(audio.noDevice) return 0;\r
int sourceID = audio.obtainSource(false);\r
if (sourceID == -1) return -1;\r
long soundId = audio.getSoundId(sourceID);\r
}\r
\r
public void stop () {\r
+ if(audio.noDevice) return;\r
audio.stopSourcesWithBuffer(bufferID);\r
}\r
\r
public void dispose () {\r
+ if(audio.noDevice) return;\r
if (bufferID == -1) return;\r
audio.freeBuffer(bufferID);\r
alDeleteBuffers(bufferID);\r
\r
@Override\r
public void stop (long soundId) {\r
+ if(audio.noDevice) return;\r
audio.stopSound(soundId);\r
}\r
\r
@Override\r
public void setPitch (long soundId, float pitch) {\r
+ if(audio.noDevice) return;\r
audio.setSoundPitch(soundId, pitch);\r
}\r
\r
@Override\r
public void setVolume (long soundId, float volume) {\r
+ if(audio.noDevice) return;\r
audio.setSoundGain(soundId, volume);\r
}\r
\r
\r
@Override\r
public void setLooping (long soundId, boolean looping) {\r
+ if(audio.noDevice) return;\r
audio.setSoundLooping(soundId, looping);\r
}\r
\r
@Override\r
public void setPan (long soundId, float pan, float volume) {\r
+ if(audio.noDevice) return;\r
audio.setSoundPan(soundId, pan, volume);\r
}\r
}\r
public Music (OpenALAudio audio, FileHandle file) {\r
super(audio, file);\r
input = new WavInputStream(file);\r
+ if(audio.noDevice) return;\r
setup(input.channels, input.sampleRate);\r
}\r
\r
static public class Sound extends OpenALSound {\r
public Sound (OpenALAudio audio, FileHandle file) {\r
super(audio);\r
+ if(audio.noDevice) return;\r
\r
WavInputStream input = new WavInputStream(file);\r
ByteArrayOutputStream output = new ByteArrayOutputStream(4096);\r