From 173da4f6cdf2a27200a3580e7c0926dd94dab90c Mon Sep 17 00:00:00 2001 From: Recrown Date: Mon, 24 Apr 2017 00:57:33 -0500 Subject: [PATCH] began music panel ui layout setup --- core/src/zero1hd/polyjet/Polyjet.java | 1 + .../polyjet/ui/builders/MusicSelectable.java | 84 +++++++++++++------ .../polyjet/ui/pages/MusicSelectionPage.java | 4 +- core/src/zero1hd/wavedecoder/WavInfo.java | 2 +- 4 files changed, 64 insertions(+), 27 deletions(-) diff --git a/core/src/zero1hd/polyjet/Polyjet.java b/core/src/zero1hd/polyjet/Polyjet.java index 77bb404..fefc2c8 100755 --- a/core/src/zero1hd/polyjet/Polyjet.java +++ b/core/src/zero1hd/polyjet/Polyjet.java @@ -116,6 +116,7 @@ public class Polyjet extends Game { assetManager.load("cybercircle3B.png", Texture.class); assetManager.load("PolyjetTitle.png", Texture.class); assetManager.load("cybercircle1.png", Texture.class); + assetManager.load("defaultCover.png", Texture.class); } public void generateFonts() { initComplete = true; diff --git a/core/src/zero1hd/polyjet/ui/builders/MusicSelectable.java b/core/src/zero1hd/polyjet/ui/builders/MusicSelectable.java index 2630d92..499c188 100755 --- a/core/src/zero1hd/polyjet/ui/builders/MusicSelectable.java +++ b/core/src/zero1hd/polyjet/ui/builders/MusicSelectable.java @@ -5,11 +5,14 @@ import java.io.IOException; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Preferences; import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.scenes.scene2d.ui.Button; import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.badlogic.gdx.utils.Disposable; import com.mpatric.mp3agic.ID3v2; import com.mpatric.mp3agic.InvalidDataException; import com.mpatric.mp3agic.Mp3File; @@ -17,20 +20,24 @@ import com.mpatric.mp3agic.UnsupportedTagException; import zero1hd.wavedecoder.WavInfo; -public class MusicSelectable extends Button { - Image imageIcon; - FileHandle musicFile; - boolean invalidMusic; - long durationInSeconds; - String songName; - +public class MusicSelectable extends Button implements Disposable { + private boolean invalidMusic; + private long durationInSeconds; + private String songName; + private Texture albumCover; WavInfo wavinfo; private byte[] albumWorkBytes; - public MusicSelectable(FileHandle musicFile, Preferences musicData, Skin skin) { + private Image imageIcon; + private Label displayName; + private Label runTime; + + public MusicSelectable(FileHandle musicFile, Preferences musicData, final Skin skin, Texture defaultAlbumC) { super(skin, "info-button"); - this.musicFile = musicFile; + debug(); + + this.albumCover = defaultAlbumC; if (musicFile.extension().toLowerCase().equals("mp3")) { try { @@ -54,24 +61,53 @@ public class MusicSelectable extends Button { if (durationInSeconds > 60 * 5) { invalidMusic = true; } + if (songName == null || songName.isEmpty()) { - songName = musicFile.name(); + songName = musicFile.nameWithoutExtension(); } - } - - public void renderAlbumCover() { - if (albumWorkBytes != null) { - Pixmap albumArt = new Pixmap(albumWorkBytes, 0, albumWorkBytes.length); - Texture albumArtTexture = new Texture(albumArt); - imageIcon = new Image(albumArtTexture); - float scale = 0.25f*getHeight()/imageIcon.getHeight(); - imageIcon.setScale(scale); + + Gdx.app.postRunnable(new Runnable() { - add(imageIcon); - albumArtTexture.dispose(); - } else { - //TODO load default album cover texture - } + @Override + public void run() { + if (albumWorkBytes != null && !invalidMusic) { + Pixmap albumArt = new Pixmap(albumWorkBytes, 0, albumWorkBytes.length); + albumCover = new Texture(albumArt); + imageIcon = new Image(albumCover); + albumArt.dispose(); + } else { + imageIcon = new Image(albumCover); + if (invalidMusic) { + imageIcon.setColor(Color.RED); + } + System.out.println("invalid or null"); + } + + add(imageIcon); + + row(); + + displayName = new Label(songName, skin); + displayName.setWrap(true); + add(displayName).prefWidth(getWidth()-5); + + row(); + + String formattedSecond = String.valueOf(durationInSeconds/60) + ":"; + + if (durationInSeconds - (durationInSeconds/60)*60 < 10) { + formattedSecond = formattedSecond.concat("0"); + } + + formattedSecond = formattedSecond.concat(String.valueOf(durationInSeconds - (durationInSeconds/60)*60)); + runTime = new Label(formattedSecond, skin); + add(runTime); + } + }); } + @Override + public void dispose() { + albumCover.dispose(); + } } diff --git a/core/src/zero1hd/polyjet/ui/pages/MusicSelectionPage.java b/core/src/zero1hd/polyjet/ui/pages/MusicSelectionPage.java index deb0ac9..e42e7b9 100755 --- a/core/src/zero1hd/polyjet/ui/pages/MusicSelectionPage.java +++ b/core/src/zero1hd/polyjet/ui/pages/MusicSelectionPage.java @@ -6,6 +6,7 @@ import java.io.FilenameFilter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Preferences; import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.actions.Actions; import com.badlogic.gdx.scenes.scene2d.ui.Image; @@ -81,7 +82,6 @@ public class MusicSelectionPage extends Page { this.skin = skin; this.musicDir = musicDir; -// System.out.println(musicDir.exists()); } @@ -98,7 +98,7 @@ public class MusicSelectionPage extends Page { } }); for (int music = startingID; music < musicFiles.length && music < 15; music++) { - MusicSelectable selectable = new MusicSelectable(musicFiles[music], musicFileAnnotation, skin); + MusicSelectable selectable = new MusicSelectable(musicFiles[music], musicFileAnnotation, skin, core.assetManager.get("defaultCover.png", Texture.class)); musicChoices.add(selectable).prefSize(0.2f*Gdx.graphics.getWidth(), 0.8f*Gdx.graphics.getHeight()); } } diff --git a/core/src/zero1hd/wavedecoder/WavInfo.java b/core/src/zero1hd/wavedecoder/WavInfo.java index 827f5c6..bdb5b8d 100755 --- a/core/src/zero1hd/wavedecoder/WavInfo.java +++ b/core/src/zero1hd/wavedecoder/WavInfo.java @@ -120,6 +120,6 @@ public class WavInfo { } public long getDurationInSeconds() { - return (long) (dataSize/sampleRate); + return (long) (dataSize/byteRate); } }