84 lines
1.8 KiB
Java
Executable File
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();
|
|
}
|
|
}
|