84 lines
1.8 KiB
Java
Executable File

package zero1hd.polyjet.audio;
import java.io.IOException;
import java.security.InvalidParameterException;
import javax.sound.sampled.AudioFormat;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.files.FileHandle;
import zero1hd.wavedecoder.WavDecoder;
public class WavAudioData implements AudioData {
private int readWindowSize = 1024;
private AudioFormat format;
int readIndex;
Music playbackMusic;
WavDecoder decoder;
public WavAudioData(FileHandle file) {
reset();
try {
decoder = new WavDecoder(file);
decoder.initDataStream();
decoder.getHeaderInfo();
} catch (InvalidParameterException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
playbackMusic = Gdx.audio.newMusic(file);
format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, (float) decoder.getSampleRate(), 16, decoder.getChannels(), decoder.getChannels()*2, (float) decoder.getSampleRate(), false);
}
@Override
public void readIndexUpdate() {
readIndex = (int) (playbackMusic.getPosition() * decoder.getSampleRate() / readWindowSize);
}
@Override
public int getReadIndex() {
return readIndex;
}
@Override
public void reset() {
if (playbackMusic != null) {
playbackMusic.stop();
}
}
@Override
public int getReadWindowSize() {
return readWindowSize;
}
@Override
public Music getPlaybackMusic() {
return playbackMusic;
}
@Override
public int readSamples(float[] samples) {
return decoder.readSamples(samples);
}
@Override
public AudioFormat getFormat() {
return format;
}
@Override
public int getSampleCount() {
return decoder.getDataSize()/(2*decoder.getChannels());
}
@Override
public void dispose() {
reset();
playbackMusic.dispose();
decoder.cleanAndClose();
}
}