mirror of
https://github.com/badvision/lawless-legends.git
synced 2025-08-15 06:27:24 +00:00
Fixed music playback issues (I think?)
This commit is contained in:
@@ -65,7 +65,7 @@ public class SoundMixer extends Device {
|
|||||||
public static boolean MUTE = false;
|
public static boolean MUTE = false;
|
||||||
|
|
||||||
@ConfigurableField(name = "Buffer size", shortName = "buffer")
|
@ConfigurableField(name = "Buffer size", shortName = "buffer")
|
||||||
public static int BUFFER_SIZE = 512;
|
public static int BUFFER_SIZE = 1024;
|
||||||
|
|
||||||
public static boolean PLAYBACK_ENABLED = false;
|
public static boolean PLAYBACK_ENABLED = false;
|
||||||
// Innocent until proven guilty by a failed initialization
|
// Innocent until proven guilty by a failed initialization
|
||||||
@@ -183,7 +183,11 @@ public class SoundMixer extends Device {
|
|||||||
alternateBuffer = BufferUtils.createShortBuffer(BUFFER_SIZE * (stereo ? 2 : 1));
|
alternateBuffer = BufferUtils.createShortBuffer(BUFFER_SIZE * (stereo ? 2 : 1));
|
||||||
currentBufferId = performSoundFunction(AL10::alGenBuffers);
|
currentBufferId = performSoundFunction(AL10::alGenBuffers);
|
||||||
alternateBufferId = performSoundFunction(AL10::alGenBuffers);
|
alternateBufferId = performSoundFunction(AL10::alGenBuffers);
|
||||||
sourceId = performSoundFunction(AL10::alGenSources);
|
boolean hasSource = false;
|
||||||
|
while (!hasSource) {
|
||||||
|
sourceId = performSoundFunction(AL10::alGenSources);
|
||||||
|
hasSource = performSoundFunction(()->AL10.alIsSource(sourceId));
|
||||||
|
}
|
||||||
audioFormat = stereo ? AL10.AL_FORMAT_STEREO16 : AL10.AL_FORMAT_MONO16;
|
audioFormat = stereo ? AL10.AL_FORMAT_STEREO16 : AL10.AL_FORMAT_MONO16;
|
||||||
isAlive = true;
|
isAlive = true;
|
||||||
}
|
}
|
||||||
@@ -195,7 +199,6 @@ public class SoundMixer extends Device {
|
|||||||
/* If stereo, call this once for left and then again for right sample */
|
/* If stereo, call this once for left and then again for right sample */
|
||||||
public void playSample(short sample) throws InterruptedException, ExecutionException {
|
public void playSample(short sample) throws InterruptedException, ExecutionException {
|
||||||
if (!isAlive) {
|
if (!isAlive) {
|
||||||
Logger.getLogger(SoundMixer.class.getName()).warning("Playback attempted on stopped buffer!");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!currentBuffer.hasRemaining()) {
|
if (!currentBuffer.hasRemaining()) {
|
||||||
@@ -210,11 +213,20 @@ public class SoundMixer extends Device {
|
|||||||
buffersProcessed = AL10.alGetSourcei(sourceId, AL10.AL_BUFFERS_PROCESSED);
|
buffersProcessed = AL10.alGetSourcei(sourceId, AL10.AL_BUFFERS_PROCESSED);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
if (!isAlive) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
performSoundOperation(()->{
|
performSoundOperation(()->{
|
||||||
AL10.alSourceUnqueueBuffers(sourceId, unqueueBuffers);
|
AL10.alSourceUnqueueBuffers(sourceId, unqueueBuffers);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (!isAlive) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
performSoundOperation(()->AL10.alBufferData(currentBufferId, audioFormat, currentBuffer, RATE));
|
performSoundOperation(()->AL10.alBufferData(currentBufferId, audioFormat, currentBuffer, RATE));
|
||||||
|
if (!isAlive) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
performSoundOperation(()->AL10.alSourceQueueBuffers(sourceId, currentBufferId));
|
performSoundOperation(()->AL10.alSourceQueueBuffers(sourceId, currentBufferId));
|
||||||
performSoundOperationAsync(()->{
|
performSoundOperationAsync(()->{
|
||||||
if (AL10.alGetSourcei(sourceId, AL10.AL_SOURCE_STATE) != AL10.AL_PLAYING) {
|
if (AL10.alGetSourcei(sourceId, AL10.AL_SOURCE_STATE) != AL10.AL_PLAYING) {
|
||||||
@@ -240,10 +252,26 @@ public class SoundMixer extends Device {
|
|||||||
}
|
}
|
||||||
isAlive = false;
|
isAlive = false;
|
||||||
|
|
||||||
performSoundOperation(()->{if (AL10.alIsSource(sourceId)) AL10.alSourceStop(sourceId);});
|
try {
|
||||||
performSoundOperation(()->{if (AL10.alIsSource(sourceId)) AL10.alDeleteSources(sourceId);});
|
performSoundOperation(()->{if (AL10.alIsSource(sourceId)) AL10.alSourceStop(sourceId);});
|
||||||
performSoundOperation(()->{if (AL10.alIsBuffer(alternateBufferId)) AL10.alDeleteBuffers(alternateBufferId);});
|
} finally {
|
||||||
performSoundOperation(()->{if (AL10.alIsBuffer(currentBufferId)) AL10.alDeleteBuffers(currentBufferId);});
|
try {
|
||||||
|
performSoundOperation(()->{if (AL10.alIsSource(sourceId)) AL10.alDeleteSources(sourceId);});
|
||||||
|
} finally {
|
||||||
|
sourceId = -1;
|
||||||
|
try {
|
||||||
|
performSoundOperation(()->{if (AL10.alIsBuffer(alternateBufferId)) AL10.alDeleteBuffers(alternateBufferId);});
|
||||||
|
} finally {
|
||||||
|
alternateBufferId = -1;
|
||||||
|
try {
|
||||||
|
performSoundOperation(()->{if (AL10.alIsBuffer(currentBufferId)) AL10.alDeleteBuffers(currentBufferId);});
|
||||||
|
} finally {
|
||||||
|
currentBufferId = -1;
|
||||||
|
buffers.remove(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user