more dynamic audio analyzer with optimizations; music selection page

progress;
This commit is contained in:
2018-09-05 19:28:44 -05:00
parent eaca473dee
commit 49a441132d
14 changed files with 268 additions and 335 deletions

View File

@@ -17,6 +17,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.CheckBox.CheckBoxStyle;
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton.ImageButtonStyle;
import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle;
import com.badlogic.gdx.scenes.scene2d.ui.List.ListStyle;
import com.badlogic.gdx.scenes.scene2d.ui.ProgressBar.ProgressBarStyle;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane.ScrollPaneStyle;
import com.badlogic.gdx.scenes.scene2d.ui.SelectBox.SelectBoxStyle;
import com.badlogic.gdx.scenes.scene2d.ui.Slider.SliderStyle;
@@ -102,6 +103,8 @@ public class DesktopAssetPack implements AssetPack {
vertSlider.knob = skin.getDrawable("vertical-slider-knob");
skin.add("default-vertical", vertSlider);
ProgressBarStyle defaultProgressBar = new ProgressBarStyle(skin.getDrawable("default-slider"), skin.getDrawable("progress-slider-knob"));
LabelStyle defaultLabel = new LabelStyle();
defaultLabel.font = skin.getFont("default-font");
defaultLabel.fontColor = skin.getColor("default");

View File

@@ -1,6 +1,5 @@
package zero1hd.rhythmbullet.desktop.screens.main;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
@@ -11,14 +10,16 @@ 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 zero1hd.rhythmbullet.audio.analyzer.AudioAnalyzer;
import zero1hd.rhythmbullet.audio.AudioMetadataController;
import zero1hd.rhythmbullet.audio.MusicController;
import zero1hd.rhythmbullet.audio.analyzer.AudioAnalyzerSection;
import zero1hd.rhythmbullet.audio.analyzer.DynamicAudioAnalyzer;
import zero1hd.rhythmbullet.audio.metadata.AudioMetadata;
import zero1hd.rhythmbullet.audio.processor.AudioProcessor;
import zero1hd.rhythmbullet.graphics.ui.Page;
public class AnalysisPage extends Page {
private TextButton backButton;
private AudioAnalyzer audioAnalyzer;
private DynamicAudioAnalyzer audioAnalyzer;
private Table table;
private Table adjustment;
private Label difficultyModLabel, healthModLabel, speedModLabel;
@@ -26,15 +27,18 @@ public class AnalysisPage extends Page {
private Label diffModPercentLabel, heltModPercentLabel, speeModPercentLabel;
private Label progressLabel;
private TextButton confirmButton;
private Image albumArt;
public AnalysisPage(Skin skin, ChangeListener backButtonListener, ChangeListener confirmedButtonListener) {
private Image albumImage;
private AudioMetadataController amc;
private MusicController mc;
public AnalysisPage(MusicController mc, AudioMetadataController amc, Skin skin, ChangeListener backButtonListener, ChangeListener confirmedButtonListener) {
super(2, 0);
table = new Table();
table.setFillParent(true);
table.defaults().space(10f);
addActor(table);
adjustment = new Table();
this.mc = mc;
this.amc = amc;
difficultyModLabel = new Label("Difficulty Modifier: ", skin, "sub-font", skin.getColor("default"));
difficultyModifierSlider = new Slider(1, 3, 0.5f, false, skin);
@@ -45,6 +49,7 @@ public class AnalysisPage extends Page {
diffModPercentLabel.setText(String.valueOf(difficultyModifierSlider.getValue()) + "x");
}
});
adjustment.add(difficultyModLabel);
adjustment.add(difficultyModifierSlider).minWidth(0.5f*getWidth());
adjustment.add(diffModPercentLabel).spaceLeft(10f).center().expandX().fill();
@@ -97,25 +102,37 @@ public class AnalysisPage extends Page {
backButton = new TextButton("Cancel", skin);
backButton.addListener(backButtonListener);
backButton.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
if (audioAnalyzer != null) {
audioAnalyzer.stop();
audioAnalyzer = null;
albumImage.setDrawable(null);
mc.setLoop(false);
}
}
});
backButton.setPosition(15, getHeight()-backButton.getHeight()-25);
addActor(backButton);
audioAnalyzer = new AudioAnalyzer();
}
public void processSong(AudioProcessor mm, Texture albumCover, AudioMetadata metadata) {
this.albumArt = new Image(albumCover);
public void processSong() {
mc.setLoop(true);
AudioMetadata metadata = amc.getAudioMetadata(mc.getCurrentMusicFileHandle());
metadata.loadAlbumCover();
albumImage = new Image(metadata.getAlbumCover());
table.clear();
table.add(this.albumArt).size(adjustment.getMinHeight());
table.add(albumImage).size(adjustment.getMinHeight());
table.row();
table.add(adjustment);
if (!audioAnalyzer.start(mm)) {
audioAnalyzer.stop();
audioAnalyzer = new AudioAnalyzer();
audioAnalyzer.start(mm);
}
AudioAnalyzerSection bass = new AudioAnalyzerSection(1, 5, 1.7f, 3);
AudioAnalyzerSection midSection = new AudioAnalyzerSection(7, 25, 1.5f, 3);
audioAnalyzer = new DynamicAudioAnalyzer(mc.getMusicList().newAudioProcessor(mc.getCurrentMusicFileHandle()), bass, midSection);
}
@Override
@@ -130,6 +147,8 @@ public class AnalysisPage extends Page {
healthModifierSlider.setDisabled(false);
difficultyModifierSlider.setDisabled(false);
processSong();
super.setCameraPositionToPage(cameraPosition);
}
}

View File

@@ -24,7 +24,7 @@ import zero1hd.rhythmbullet.util.ResizeReadyScreen;
public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
private Stage stage;
private Vector3 cameraPosition;
private Listeners listeners;
private PageChangeListeners listeners;
private MainPage mainPage;
private OptionsPage optionsPage;
@@ -57,7 +57,7 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
musicController.setShuffle(true);
musicMetadataController = new AudioMetadataController(musicList);
listeners = new Listeners();
listeners = new PageChangeListeners();
screenBatch = new SpriteBatch();
}
@@ -81,7 +81,6 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
stage.getViewport().apply();
}
}
super.render(delta);
}
@@ -132,7 +131,7 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
musicSelectionPage = new MusicSelectionPage(rhythmBullet.getAssetManager(), rhythmBullet.getSkin(), musicController, musicMetadataController, listeners.returnToMainPageListener, listeners.analysisPageButtonListener);
stage.addActor(musicSelectionPage);
analysisPage = new AnalysisPage(rhythmBullet.getSkin(), listeners.returnToMainPageListener, listeners.confirmedSongListener);
analysisPage = new AnalysisPage(musicController, musicMetadataController, rhythmBullet.getSkin(), listeners.musicSelectionPageButtonListener, listeners.confirmedSongListener);
stage.addActor(analysisPage);
musicController.getMusicList().attemptAsyncSearch(false);
@@ -178,7 +177,7 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
page.setCameraPositionToPage(cameraPosition);
}
private class Listeners {
private class PageChangeListeners {
ChangeListener musicSelectionPageButtonListener = new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {