diff --git a/src/jpcsp/memory/mmio/MMIOHandlerAudio.java b/src/jpcsp/memory/mmio/MMIOHandlerAudio.java index 10c74d771..40022352d 100644 --- a/src/jpcsp/memory/mmio/MMIOHandlerAudio.java +++ b/src/jpcsp/memory/mmio/MMIOHandlerAudio.java @@ -24,6 +24,7 @@ import jpcsp.Allegrex.compiler.RuntimeContextLLE; import jpcsp.HLE.modules.sceAudio; +import jpcsp.hardware.Audio; import jpcsp.memory.mmio.audio.AudioLine; import jpcsp.state.StateInputStream; import jpcsp.state.StateOutputStream; @@ -135,6 +136,11 @@ private int sendAudioData(int value, int line, int index, int[] data, int interr if (log.isTraceEnabled()) { log.trace(String.format("sendAudioData value=0x%08X, line=%d, index=0x%X, interrupt=%d", value, line, index, interrupt)); } + + if (Audio.isMuted()) { + value = 0; + } + data[index++] = value; if (index >= data.length) { diff --git a/src/jpcsp/memory/mmio/audio/AudioLine.java b/src/jpcsp/memory/mmio/audio/AudioLine.java index 2f67074fe..a67cf84a7 100644 --- a/src/jpcsp/memory/mmio/audio/AudioLine.java +++ b/src/jpcsp/memory/mmio/audio/AudioLine.java @@ -23,6 +23,8 @@ import java.nio.ByteOrder; import org.apache.log4j.Logger; +import org.lwjgl.LWJGLException; +import org.lwjgl.openal.AL; import org.lwjgl.openal.AL10; import jpcsp.memory.mmio.MMIOHandlerAudio; @@ -39,11 +41,24 @@ public class AudioLine implements IState { private int frequency = 44100; public AudioLine() { + initOpenAL(); + soundBufferManager = SoundBufferManager.getInstance(); alSource = AL10.alGenSources(); AL10.alSourcei(alSource, AL10.AL_LOOPING, AL10.AL_FALSE); } + private static void initOpenAL() { + // Initialize OpenAL + if (!AL.isCreated()) { + try { + AL.create(); + } catch (LWJGLException e) { + log.error(e); + } + } + } + private void alSourcePlay() { int state = AL10.alGetSourcei(alSource, AL10.AL_SOURCE_STATE); if (state != AL10.AL_PLAYING) {