Refactored (name change); minor data logic improvement; structure

change;
This commit is contained in:
Harrison Deng 2018-06-14 21:20:13 -05:00
parent 55cac998ed
commit 0f296bfe1c
5 changed files with 23 additions and 19 deletions

View File

@ -5,11 +5,11 @@ import com.badlogic.gdx.audio.AudioDevice;
import com.badlogic.gdx.audio.Music; import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.audio.Music.OnCompletionListener; import com.badlogic.gdx.audio.Music.OnCompletionListener;
import zero1hd.rhythmbullet.audio.processor.SampleProcessor; import zero1hd.rhythmbullet.audio.processor.PCMProcessor;
public class RhythmBulletAudioThread extends Thread { public class RhythmBulletAudioThread extends Thread {
private AudioDevice ad; private AudioDevice ad;
private SampleProcessor sp; private PCMProcessor sp;
private Music music; private Music music;
private volatile OnCompletionListener ocl; private volatile OnCompletionListener ocl;
private short[] pcm; private short[] pcm;
@ -19,7 +19,11 @@ public class RhythmBulletAudioThread extends Thread {
public RhythmBulletAudioThread(int windowSize, VisualizableMusic vm) { public RhythmBulletAudioThread(int windowSize, VisualizableMusic vm) {
music = vm; music = vm;
this.sp = vm.getSampleProcessor(); this.sp = vm.getSampleProcessor();
pcm = new short[sp.getChannels()*windowSize]; pcm = new short[sp.getChannels()*windowSize*2];
setName("RhythmBullet-AudioPlayback-Thread");
play();
start();
} }
@Override @Override

View File

@ -8,9 +8,9 @@ import javax.sound.sampled.UnsupportedAudioFileException;
import com.badlogic.gdx.audio.Music; import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.files.FileHandle;
import zero1hd.rhythmbullet.audio.processor.MP3SampleProcessor; import zero1hd.rhythmbullet.audio.processor.MP3PCMProcessor;
import zero1hd.rhythmbullet.audio.processor.SampleProcessor; import zero1hd.rhythmbullet.audio.processor.PCMProcessor;
import zero1hd.rhythmbullet.audio.processor.WAVSampleProcessor; import zero1hd.rhythmbullet.audio.processor.WAVPCMProcessor;
public class VisualizableMusic implements Music { public class VisualizableMusic implements Music {
private int windowSize = 1024; private int windowSize = 1024;
@ -18,18 +18,18 @@ public class VisualizableMusic implements Music {
private boolean looping; private boolean looping;
private RhythmBulletAudioThread rat; private RhythmBulletAudioThread rat;
private File musicFile; private File musicFile;
private SampleProcessor sampleProcessor; private PCMProcessor sampleProcessor;
public VisualizableMusic(FileHandle file) { public VisualizableMusic(FileHandle file) {
musicFile = file.file(); musicFile = file.file();
if (musicFile.getName().toLowerCase().endsWith("wav")) { if (musicFile.getName().toLowerCase().endsWith("wav")) {
try { try {
sampleProcessor = new WAVSampleProcessor(musicFile, windowSize); sampleProcessor = new WAVPCMProcessor(musicFile, windowSize);
} catch (IOException | UnsupportedAudioFileException e) { } catch (IOException | UnsupportedAudioFileException e) {
e.printStackTrace(); e.printStackTrace();
} }
} else if (musicFile.getName().toLowerCase().endsWith("mp3")) { } else if (musicFile.getName().toLowerCase().endsWith("mp3")) {
sampleProcessor = new MP3SampleProcessor(musicFile, windowSize); sampleProcessor = new MP3PCMProcessor(musicFile, windowSize);
} }
} }
@ -37,11 +37,11 @@ public class VisualizableMusic implements Music {
public void play() { public void play() {
if (rat == null) { if (rat == null) {
rat = new RhythmBulletAudioThread(windowSize, this); rat = new RhythmBulletAudioThread(windowSize, this);
rat.setOnCompletionListener(ocl);
rat.start();
} else {
rat.play();
} }
rat.setOnCompletionListener(ocl);
rat.play();
rat.start();
} }
@Override @Override
@ -112,7 +112,7 @@ public class VisualizableMusic implements Music {
} }
} }
protected SampleProcessor getSampleProcessor() { protected PCMProcessor getSampleProcessor() {
return sampleProcessor; return sampleProcessor;
} }
} }

View File

@ -2,10 +2,10 @@ package zero1hd.rhythmbullet.audio.processor;
import java.io.File; import java.io.File;
public class MP3SampleProcessor implements SampleProcessor { public class MP3PCMProcessor implements PCMProcessor {
private int channels; private int channels;
public MP3SampleProcessor(File musicFile, int windowSize) { public MP3PCMProcessor(File musicFile, int windowSize) {
} }

View File

@ -2,7 +2,7 @@ package zero1hd.rhythmbullet.audio.processor;
import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.Disposable;
public interface SampleProcessor extends Disposable { public interface PCMProcessor extends Disposable {
/** /**
* Called once, contains the initiation to the stream, only called when play-back begins. * Called once, contains the initiation to the stream, only called when play-back begins.

View File

@ -8,7 +8,7 @@ import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException; import javax.sound.sampled.UnsupportedAudioFileException;
public class WAVSampleProcessor implements SampleProcessor { public class WAVPCMProcessor implements PCMProcessor {
private int channels; private int channels;
private int sampleRate; private int sampleRate;
private byte[] buffer; private byte[] buffer;
@ -17,7 +17,7 @@ public class WAVSampleProcessor implements SampleProcessor {
private volatile float volume, pan; private volatile float volume, pan;
private volatile boolean initiated; private volatile boolean initiated;
public WAVSampleProcessor(File musicFile, int windowSize) throws IOException, UnsupportedAudioFileException { public WAVPCMProcessor(File musicFile, int windowSize) throws IOException, UnsupportedAudioFileException {
this.file = musicFile; this.file = musicFile;
AudioFormat format = AudioSystem.getAudioFileFormat(file).getFormat(); AudioFormat format = AudioSystem.getAudioFileFormat(file).getFormat();
channels = format.getChannels(); channels = format.getChannels();