diff --git a/core/src/zero1hd/rhythmbullet/RhythmBullet.java b/core/src/zero1hd/rhythmbullet/RhythmBullet.java index d4c980f..76070fb 100755 --- a/core/src/zero1hd/rhythmbullet/RhythmBullet.java +++ b/core/src/zero1hd/rhythmbullet/RhythmBullet.java @@ -113,7 +113,7 @@ public class RhythmBullet extends Game { public void dispose() { Gdx.app.debug("Core", "disposing..."); if (initComplete) { - skinAtlas.dispose(); +// skinAtlas.dispose(); getDefaultSkin().dispose(); default_fontGenerator.dispose(); darktech_ldr_fontGenerator.dispose(); diff --git a/core/src/zero1hd/rhythmbullet/audio/AudioAnalyzer.java b/core/src/zero1hd/rhythmbullet/audio/AudioAnalyzer.java index 6c3603f..c17d95c 100755 --- a/core/src/zero1hd/rhythmbullet/audio/AudioAnalyzer.java +++ b/core/src/zero1hd/rhythmbullet/audio/AudioAnalyzer.java @@ -12,7 +12,6 @@ import zero1hd.rhythmbullet.util.MiniSender; public class AudioAnalyzer { private boolean containsData; - private boolean finalized; FloatFFT_1D fft; private CoreMusicInfo musicInfo; @@ -20,8 +19,9 @@ public class AudioAnalyzer { float[] spectrum; float[] lastSpectrum; - Runnable analysisAlgorithm; - Runnable thresholdCalculator; + private ExecutorService exec = Executors.newSingleThreadExecutor(); + private Runnable analysisAlgorithm; + private Runnable thresholdCalculator; int bassBinBegin; int bassBinEnd; @@ -57,7 +57,7 @@ public class AudioAnalyzer { private float secondsPerWindow; private AudioDataPackage pack; - public AudioAnalyzer() { + public AudioAnalyzer(CoreMusicInfo audiofile) { sender = new MiniSender(); analysisAlgorithm = () -> { @@ -297,11 +297,18 @@ public class AudioAnalyzer { pack.setMusicInfo(musicInfo); if (work) { - finalized = true; Gdx.app.debug("Audio Analyzer", "data cleaned and ready for map gen."); sender.send(MiniEvents.MUSIC_DATA_CLEANED); } }; + + audioPCM = new float[audiofile.getReadWindowSize()]; + spectrum = new float[(audiofile.getReadWindowSize()/2)+1]; + lastSpectrum = new float[(audiofile.getReadWindowSize()/2)+1]; + this.musicInfo = audiofile; + work = true; + + exec.submit(analysisAlgorithm); } public void shrinkData() { @@ -310,24 +317,12 @@ public class AudioAnalyzer { umSpectralFlux = null; } - public void startAnalyticalThread(CoreMusicInfo audiofile) { - audioPCM = new float[audiofile.getReadWindowSize()]; - spectrum = new float[(audiofile.getReadWindowSize()/2)+1]; - lastSpectrum = new float[(audiofile.getReadWindowSize()/2)+1]; - this.musicInfo = audiofile; - work = true; - - ExecutorService exec = Executors.newSingleThreadExecutor(); - exec.submit(analysisAlgorithm); - } - public void runThresholdCleaning(float rangeModifier) { this.bassThresholdMultiplier -= rangeModifier; this.umThresholdMultiplier -= rangeModifier; work = true; if (containsData) { - ExecutorService exec = Executors.newSingleThreadExecutor(); exec.submit(thresholdCalculator); } else { throw new NullPointerException("Either you didn't start the spectral flux gen, or you didn't let it finish."); @@ -337,7 +332,6 @@ public class AudioAnalyzer { public void runThresholdCleaning() { work = true; if (containsData) { - ExecutorService exec = Executors.newSingleThreadExecutor(); exec.submit(thresholdCalculator); } else { throw new NullPointerException("Either you didn't start the spectral flux gen, or you didn't let it finish."); @@ -348,18 +342,6 @@ public class AudioAnalyzer { return (int) (durationOfRange/(musicInfo.getReadWindowSize()/musicInfo.getSampleRate())); } - public float getBassMaxValue() { - return bassMaxValue; - } - - public float getmMaxValue() { - return mMaxValue; - } - - public float getUMMaxValue() { - return umMaxValue; - } - public boolean containsData() { return containsData; } @@ -368,44 +350,13 @@ public class AudioAnalyzer { return progress; } - public boolean isFinalized() { - return finalized; - } - public void stop() { work = false; + exec.shutdown(); } - - public int getPUID() { - return PUID; - } - - public CoreMusicInfo getAudioData() { - return musicInfo; - } - - public float getAvgSPB() { - return avgSPB; - } - - public float getsecondsPerWindow() { - return secondsPerWindow; - } - - public float getBassAvg() { - return bassAvg; - } - - public float getUmAvg() { - return umAvg; - } - - public float getmAvg() { - return mAvg; - } - public synchronized AudioDataPackage getAudioDataPackage() { if (pack != null) { + exec.shutdown(); return pack; } else { throw new NullPointerException("Pack isn't filled yet... You made a mistake somewhere!"); diff --git a/core/src/zero1hd/rhythmbullet/screens/MainMenu.java b/core/src/zero1hd/rhythmbullet/screens/MainMenu.java index 4abd302..52d46ab 100755 --- a/core/src/zero1hd/rhythmbullet/screens/MainMenu.java +++ b/core/src/zero1hd/rhythmbullet/screens/MainMenu.java @@ -41,8 +41,13 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter { @Override public void preTransition() { stage.clear(); + mainPage.dispose(); + optionsPage.dispose(); + creditsPage.dispose(); + moreOptionsPage.dispose(); } + @Override public void postTransition() { mainPage = new MainPage(core, targetPosition); mainPage.setPosition(0, 0); diff --git a/core/src/zero1hd/rhythmbullet/screens/PreGameScreen.java b/core/src/zero1hd/rhythmbullet/screens/PreGameScreen.java index 4059fb4..543037b 100755 --- a/core/src/zero1hd/rhythmbullet/screens/PreGameScreen.java +++ b/core/src/zero1hd/rhythmbullet/screens/PreGameScreen.java @@ -52,7 +52,8 @@ public class PreGameScreen extends ScreenAdapter implements TransitionAdapter, M @Override public void resize(int width, int height) { - stage.getViewport().update(width, height); + stage.getViewport().update(width, height, true); + cameraPos.set(stage.getCamera().position); super.resize(width, height); } @@ -78,6 +79,8 @@ public class PreGameScreen extends ScreenAdapter implements TransitionAdapter, M @Override public void preTransition() { stage.clear(); + ap.dispose(); + ms.dispose(); } @Override @@ -89,14 +92,10 @@ public class PreGameScreen extends ScreenAdapter implements TransitionAdapter, M ap = new AnalyzePage(core); ap.miniSender.addListener(this); - ap.setPosition(Gdx.graphics.getWidth(), ap.getY()); + ap.setPosition(Gdx.graphics.getWidth(), 0); stage.addActor(ap); } - public void setPhase(int phase) { - cameraPos.x = Gdx.graphics.getWidth()*(phase + 0.5f); - } - @Override public void show() { Gdx.input.setInputProcessor(stage); diff --git a/core/src/zero1hd/rhythmbullet/stages/ui/CreativeHUD.java b/core/src/zero1hd/rhythmbullet/stages/ui/CreativeHUD.java index c2ffdc9..b9f4ce1 100755 --- a/core/src/zero1hd/rhythmbullet/stages/ui/CreativeHUD.java +++ b/core/src/zero1hd/rhythmbullet/stages/ui/CreativeHUD.java @@ -15,6 +15,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import zero1hd.rhythmbullet.RhythmBullet; import zero1hd.rhythmbullet.audio.AudioAnalyzer; +import zero1hd.rhythmbullet.audio.AudioDataPackage; import zero1hd.rhythmbullet.audio.map.RhythmMapAlgorithm; import zero1hd.rhythmbullet.screens.MainMenu; import zero1hd.rhythmbullet.stages.GamePlayArea; @@ -246,40 +247,37 @@ public class CreativeHUD extends Stage implements MiniListener { musicPlayBackControls.getAudiofile().dispose(); } musicPlayBackControls.setAudiofile(null); - analyzer = new AudioAnalyzer(); + analyzer = new AudioAnalyzer(musicSelector.getSelectedMusic()); analyzer.sender.addListener(this); - - analyzer.startAnalyticalThread(musicSelector.getSelectedMusic()); break; case SPECTRAL_FLUX_DONE: analyzer.runThresholdCleaning(); break; case MUSIC_DATA_CLEANED: - if (analyzer != null && analyzer.isFinalized()) { - mapGen = new RhythmMapAlgorithm(gpa.em, gpa.cm, analyzer.getAudioDataPackage(), diffWindow.getSpeedModifier(), diffWindow.getHealthModifier(), diffWindow.getOverallDiffMod()); - mapGen.getSender().addListener(this); - Thread mapGenThread = new Thread(mapGen); - mapGenThread.start(); - } + mapGen = new RhythmMapAlgorithm(gpa.em, gpa.cm, analyzer.getAudioDataPackage(), diffWindow.getSpeedModifier(), diffWindow.getHealthModifier(), diffWindow.getOverallDiffMod()); + mapGen.getSender().addListener(this); + Thread mapGenThread = new Thread(mapGen); + mapGenThread.start(); break; case MAP_GENERATED: Gdx.app.debug("creative", "successfully generated map."); - musicPlayBackControls.setAudiofile(analyzer.getAudioData()); - volumeWindow.setMusic(analyzer.getAudioData()); - beatViewer.setMusic(analyzer.getAudioData(), analyzer.getAudioDataPackage()); + AudioDataPackage adp = analyzer.getAudioDataPackage(); + musicPlayBackControls.setAudiofile(adp.getMusicInfo()); + volumeWindow.setMusic(adp.getMusicInfo()); + beatViewer.setMusic(adp.getMusicInfo(), analyzer.getAudioDataPackage()); ghud.setMusic(null); - bassUMgraphWindow.setData(analyzer.getAudioDataPackage().getBassPeaks(), analyzer.getAudioDataPackage().getuMPeaks(), analyzer.getAudioData()); - bassUMgraphWindow.getGraph().avgG1 = analyzer.getBassAvg(); - bassUMgraphWindow.getGraph().normalDataG1 = analyzer.getBassMaxValue(); - bassUMgraphWindow.getGraph().avgG2 = analyzer.getUmAvg(); - bassUMgraphWindow.getGraph().normalDataG2 = analyzer.getUMMaxValue(); + bassUMgraphWindow.setData(analyzer.getAudioDataPackage().getBassPeaks(), analyzer.getAudioDataPackage().getuMPeaks(), adp.getMusicInfo()); + bassUMgraphWindow.getGraph().avgG1 = adp.getBassAvg(); + bassUMgraphWindow.getGraph().normalDataG1 = adp.getBassMaxVal(); + bassUMgraphWindow.getGraph().avgG2 = adp.getuMAvg(); + bassUMgraphWindow.getGraph().normalDataG2 = adp.getuMMaxval(); - mGraphWindow.setData(analyzer.getAudioDataPackage().getmPeaks(), null, analyzer.getAudioData()); - mGraphWindow.getGraph().normalDataG1 = analyzer.getmMaxValue(); - mGraphWindow.getGraph().avgG1 = analyzer.getmAvg(); + mGraphWindow.setData(analyzer.getAudioDataPackage().getmPeaks(), null, adp.getMusicInfo()); + mGraphWindow.getGraph().normalDataG1 = adp.getmMaxVal(); + mGraphWindow.getGraph().avgG1 = adp.getmAvg(); gpa.setAudioMap(mapGen.getMap()); - ghud.setMusic(analyzer.getAudioData().getPlaybackMusic()); + ghud.setMusic(adp.getMusicInfo().getPlaybackMusic()); break; default: break; diff --git a/core/src/zero1hd/rhythmbullet/ui/pages/AnalyzePage.java b/core/src/zero1hd/rhythmbullet/ui/pages/AnalyzePage.java index c92c81d..d0f463e 100755 --- a/core/src/zero1hd/rhythmbullet/ui/pages/AnalyzePage.java +++ b/core/src/zero1hd/rhythmbullet/ui/pages/AnalyzePage.java @@ -15,6 +15,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.utils.Align; +import com.badlogic.gdx.utils.Disposable; import zero1hd.rhythmbullet.RhythmBullet; import zero1hd.rhythmbullet.audio.AudioAnalyzer; @@ -27,7 +28,7 @@ import zero1hd.rhythmbullet.ui.builders.ScrollText; import zero1hd.rhythmbullet.util.MiniEvents; import zero1hd.rhythmbullet.util.MiniListener; -public class AnalyzePage extends Page implements MiniListener { +public class AnalyzePage extends Page implements MiniListener, Disposable { private AnalyzePage ap = this; AudioAnalyzer audioAnalyzer; @@ -194,12 +195,12 @@ public class AnalyzePage extends Page implements MiniListener { songInfo.clear(); songInfo.defaults().align(Align.left | Align.top); - audioAnalyzer = new AudioAnalyzer(); - audioAnalyzer.sender.addListener(this); - this.music = music; - audioAnalyzer.startAnalyticalThread(music); + audioAnalyzer = new AudioAnalyzer(music); + audioAnalyzer.sender.addListener(this); + + songInfo.add(new ScrollText(audioInfo.getSongName(), skin, true)).expandX().fillX().spaceBottom(20f); for (int i = 0; i < info.length; i++) { @@ -311,4 +312,12 @@ public class AnalyzePage extends Page implements MiniListener { public GamePlayMap getMap() { return mapGenAlgorithm.getMap(); } + + @Override + public void dispose() { + if (audioAnalyzer != null) { + audioAnalyzer.stop(); + audioAnalyzer = null; + } + } } diff --git a/core/src/zero1hd/rhythmbullet/ui/pages/Page.java b/core/src/zero1hd/rhythmbullet/ui/pages/Page.java index a6d8269..6e50916 100755 --- a/core/src/zero1hd/rhythmbullet/ui/pages/Page.java +++ b/core/src/zero1hd/rhythmbullet/ui/pages/Page.java @@ -5,10 +5,11 @@ import com.badlogic.gdx.scenes.scene2d.Group; import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.badlogic.gdx.utils.Disposable; import zero1hd.rhythmbullet.util.MiniSender; -public class Page extends Group { +public class Page extends Group implements Disposable { private Label pageTitle; public MiniSender miniSender; @@ -31,4 +32,8 @@ public class Page extends Group { public float getHeightBelowTitle() { return pageTitle.getY(); } + + @Override + public void dispose() { + } }