more dynamic audio analyzer with optimizations; music selection page
progress;
This commit is contained in:
@@ -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");
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user