mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-11 14:21:52 +09:00
added sources for Slick
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
This commit is contained in:
108
lib/slick-source/org/newdawn/slick/openal/StreamSound.java
Normal file
108
lib/slick-source/org/newdawn/slick/openal/StreamSound.java
Normal file
@@ -0,0 +1,108 @@
|
||||
package org.newdawn.slick.openal;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.IntBuffer;
|
||||
|
||||
import org.lwjgl.BufferUtils;
|
||||
import org.lwjgl.openal.AL10;
|
||||
import org.newdawn.slick.util.Log;
|
||||
|
||||
/**
|
||||
* A sound implementation wrapped round a player which reads (and potentially) rereads
|
||||
* a stream. This supplies streaming audio
|
||||
*
|
||||
* @author kevin
|
||||
* @author Nathan Sweet <misc@n4te.com>
|
||||
* @author Rockstar playAsMusic cleanup
|
||||
*/
|
||||
public class StreamSound extends AudioImpl {
|
||||
/** The player we're going to ask to stream data */
|
||||
private OpenALStreamPlayer player;
|
||||
|
||||
/**
|
||||
* Create a new sound wrapped round a stream
|
||||
*
|
||||
* @param player The stream player we'll use to access the stream
|
||||
*/
|
||||
public StreamSound(OpenALStreamPlayer player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.openal.AudioImpl#isPlaying()
|
||||
*/
|
||||
public boolean isPlaying() {
|
||||
return SoundStore.get().isPlaying(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.openal.AudioImpl#playAsMusic(float, float, boolean)
|
||||
*/
|
||||
public int playAsMusic(float pitch, float gain, boolean loop) {
|
||||
try {
|
||||
cleanUpSource();
|
||||
|
||||
player.setup(pitch);
|
||||
player.play(loop);
|
||||
SoundStore.get().setStream(player);
|
||||
} catch (IOException e) {
|
||||
Log.error("Failed to read OGG source: "+player.getSource());
|
||||
}
|
||||
|
||||
return SoundStore.get().getSource(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean up the buffers applied to the sound source
|
||||
*/
|
||||
private void cleanUpSource() {
|
||||
SoundStore store = SoundStore.get();
|
||||
|
||||
AL10.alSourceStop(store.getSource(0));
|
||||
IntBuffer buffer = BufferUtils.createIntBuffer(1);
|
||||
int queued = AL10.alGetSourcei(store.getSource(0), AL10.AL_BUFFERS_QUEUED);
|
||||
|
||||
while (queued > 0)
|
||||
{
|
||||
AL10.alSourceUnqueueBuffers(store.getSource(0), buffer);
|
||||
queued--;
|
||||
}
|
||||
|
||||
AL10.alSourcei(store.getSource(0), AL10.AL_BUFFER, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.openal.AudioImpl#playAsSoundEffect(float, float, boolean, float, float, float)
|
||||
*/
|
||||
public int playAsSoundEffect(float pitch, float gain, boolean loop, float x, float y, float z) {
|
||||
return playAsMusic(pitch, gain, loop);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.openal.AudioImpl#playAsSoundEffect(float, float, boolean)
|
||||
*/
|
||||
public int playAsSoundEffect(float pitch, float gain, boolean loop) {
|
||||
return playAsMusic(pitch, gain, loop);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.openal.AudioImpl#stop()
|
||||
*/
|
||||
public void stop() {
|
||||
SoundStore.get().setStream(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.openal.AudioImpl#setPosition(float)
|
||||
*/
|
||||
public boolean setPosition(float position) {
|
||||
return player.setPosition(position);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.openal.AudioImpl#getPosition()
|
||||
*/
|
||||
public float getPosition() {
|
||||
return player.getPosition();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user