config.useGL20 = useGL2;\r
config.vSyncEnabled = true;\r
graphics = new LwjglGraphics(config);\r
- audio = new OpenALAudio(config.audioDeviceBufferCount, config.audioDeviceBufferSize);\r
+ audio = new OpenALAudio(16, config.audioDeviceBufferCount, config.audioDeviceBufferSize);\r
files = new LwjglFiles();\r
input = new LwjglInput();\r
this.listener = listener;\r
LwjglNativesLoader.load();\r
\r
graphics = new LwjglGraphics(config);\r
- audio = new OpenALAudio(config.audioDeviceBufferCount, config.audioDeviceBufferSize);\r
+ audio = new OpenALAudio(16, config.audioDeviceBufferCount, config.audioDeviceBufferSize);\r
files = new LwjglFiles();\r
input = new LwjglInput();\r
this.listener = listener;\r
LwjglNativesLoader.load();\r
\r
graphics = new LwjglGraphics(canvas, config);\r
- audio = new OpenALAudio(config.audioDeviceBufferCount, config.audioDeviceBufferSize);\r
+ audio = new OpenALAudio(16, config.audioDeviceBufferCount, config.audioDeviceBufferSize);\r
files = new LwjglFiles();\r
input = new LwjglInput();\r
this.listener = listener;\r
\r
/** @author Nathan Sweet */\r
public class OpenALAudio implements Audio {\r
+ private final int deviceBufferSize;\r
+ private final int deviceBufferCount;\r
private IntArray idleSources, allSources;\r
- /** sound id to source **/\r
private LongMap<Integer> soundIdToSource;\r
private IntMap<Long> sourceToSoundId;\r
private long nextSoundId = 0;\r
boolean noDevice = false;\r
\r
public OpenALAudio () {\r
- this(16);\r
+ this(16, 512, 9);\r
}\r
\r
- public OpenALAudio(int bufferSize, int bufferCount) {\r
- OpenALAudioDevice.bufferSize = bufferSize;\r
- OpenALAudioDevice.bufferCount = bufferCount;\r
- }\r
- \r
- public OpenALAudio (int simultaneousSources) {\r
+ public OpenALAudio (int simultaneousSources, int deviceBufferSize, int deviceBufferCount) {\r
+ this.deviceBufferSize = deviceBufferSize;\r
+ this.deviceBufferCount = deviceBufferCount;\r
+\r
registerSound("ogg", Ogg.Sound.class);\r
registerMusic("ogg", Ogg.Music.class);\r
registerSound("wav", Wav.Sound.class);\r
}\r
\r
int obtainSource (boolean isMusic) {\r
- if(noDevice) return 0;\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
+ 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
+ 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
+ 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
+ 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
+ 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, final boolean isMono) {\r
- if(noDevice) return new AudioDevice() {\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
+\r
@Override\r
public void writeSamples (short[] samples, int offset, int numSamples) {\r
}\r
- \r
+\r
@Override\r
public void setVolume (float volume) {\r
}\r
- \r
+\r
@Override\r
public boolean isMono () {\r
return isMono;\r
}\r
- \r
+\r
@Override\r
public int getLatency () {\r
return 0;\r
}\r
- \r
+\r
@Override\r
public void dispose () {\r
}\r
};\r
- return new OpenALAudioDevice(this, sampleRate, isMono);\r
+ return new OpenALAudioDevice(this, sampleRate, isMono, deviceBufferSize, deviceBufferCount);\r
}\r
\r
public AudioRecorder newAudioRecorder (int samplingRate, boolean isMono) {\r
- if(noDevice) return new AudioRecorder() {\r
+ if (noDevice) return new AudioRecorder() {\r
@Override\r
public void read (short[] samples, int offset, int numSamples) {\r
}\r
- \r
+\r
@Override\r
public void dispose () {\r
}\r
};\r
- // BOZO - Write OpenAL recorder.\r
return new JavaSoundAudioRecorder(samplingRate, isMono);\r
}\r
-\r
}\r
\r
/** @author Nathan Sweet */\r
public class OpenALAudioDevice implements AudioDevice {\r
- static public int bufferSize = 512;\r
- static public int bufferCount = 9;\r
static private final int bytesPerSample = 2;\r
- static private final ByteBuffer tempBuffer = BufferUtils.createByteBuffer(bufferSize);\r
\r
private final OpenALAudio audio;\r
private final int channels;\r
private float volume = 1;\r
private float renderedSeconds, secondsPerBuffer;\r
private byte[] bytes;\r
+ private final int bufferSize;\r
+ private final int bufferCount;\r
+ private final ByteBuffer tempBuffer;\r
\r
- public OpenALAudioDevice (OpenALAudio audio, int sampleRate, boolean isMono) {\r
+ public OpenALAudioDevice (OpenALAudio audio, int sampleRate, boolean isMono, int bufferSize, int bufferCount) {\r
this.audio = audio;\r
channels = isMono ? 1 : 2;\r
+ this.bufferSize = bufferSize;\r
+ this.bufferCount = bufferCount;\r
this.format = channels > 1 ? AL_FORMAT_STEREO16 : AL_FORMAT_MONO16;\r
this.sampleRate = sampleRate;\r
secondsPerBuffer = (float)bufferSize / bytesPerSample / channels / sampleRate;\r
+ tempBuffer = BufferUtils.createByteBuffer(bufferSize);\r
}\r
\r
public void writeSamples (short[] samples, int offset, int numSamples) {\r