Began work on music selection UI
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
package zero1hd.polyjet.audio;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.security.InvalidParameterException;
|
||||
|
||||
import javax.sound.sampled.AudioFormat;
|
||||
|
||||
@@ -11,19 +10,19 @@ import com.badlogic.gdx.audio.Music;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
|
||||
import zero1hd.wavedecoder.WavDecoder;
|
||||
import zero1hd.wavedecoder.WavInfo;
|
||||
|
||||
public class WavAudioData implements AudioData {
|
||||
private int readWindowSize = 1024;
|
||||
private InputStream inStream;
|
||||
private InputStream bufferedAudioIn;
|
||||
private AudioFormat format;
|
||||
int readIndex;
|
||||
Music playbackMusic;
|
||||
WavDecoder decoder;
|
||||
WavInfo wavinfo;
|
||||
|
||||
@Override
|
||||
public void readIndexUpdate() {
|
||||
readIndex = (int) (playbackMusic.getPosition() * decoder.getSampleRate() / readWindowSize);
|
||||
readIndex = (int) (playbackMusic.getPosition() * wavinfo.getSampleRate() / readWindowSize);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -31,15 +30,21 @@ public class WavAudioData implements AudioData {
|
||||
return readIndex;
|
||||
}
|
||||
|
||||
public void setInfo(WavInfo wavinfo) {
|
||||
this.wavinfo = wavinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAudioFile(FileHandle audioFileHandler) {
|
||||
reset();
|
||||
|
||||
inStream = audioFileHandler.read();
|
||||
bufferedAudioIn = new BufferedInputStream(inStream);
|
||||
decoder.setAudioFile(audioFileHandler.file());
|
||||
try {
|
||||
decoder.setAudioFile(wavinfo);
|
||||
} catch (InvalidParameterException | IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
playbackMusic = Gdx.audio.newMusic(audioFileHandler);
|
||||
format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, (float) decoder.getSampleRate(), 16, decoder.getChannels(), decoder.getChannels()*2, (float)decoder.getSampleRate(), false);
|
||||
format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, (float) wavinfo.getSampleRate(), 16, wavinfo.getChannels(), wavinfo.getChannels()*2, (float) wavinfo.getSampleRate(), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -49,16 +54,6 @@ public class WavAudioData implements AudioData {
|
||||
playbackMusic.dispose();
|
||||
playbackMusic = null;
|
||||
}
|
||||
|
||||
if (inStream != null) {
|
||||
try {
|
||||
bufferedAudioIn.close();
|
||||
inStream.close();
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
61
core/src/zero1hd/polyjet/ui/builders/MusicSelectable.java
Normal file → Executable file
61
core/src/zero1hd/polyjet/ui/builders/MusicSelectable.java
Normal file → Executable file
@@ -1,16 +1,65 @@
|
||||
package zero1hd.polyjet.ui.builders;
|
||||
|
||||
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.ui.Image;
|
||||
import java.io.IOException;
|
||||
|
||||
public class MusicSelectable extends Actor {
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import com.badlogic.gdx.graphics.Pixmap;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup;
|
||||
import com.mpatric.mp3agic.ID3v2;
|
||||
import com.mpatric.mp3agic.InvalidDataException;
|
||||
import com.mpatric.mp3agic.Mp3File;
|
||||
import com.mpatric.mp3agic.UnsupportedTagException;
|
||||
|
||||
import zero1hd.wavedecoder.WavInfo;
|
||||
|
||||
public class MusicSelectable extends WidgetGroup {
|
||||
Image imageIcon;
|
||||
FileHandle musicFile;
|
||||
boolean invalidMusic;
|
||||
long durationInSeconds;
|
||||
String songName;
|
||||
|
||||
WavInfo wavinfo;
|
||||
|
||||
public MusicSelectable(FileHandle musicFile) {
|
||||
this.musicFile = musicFile;
|
||||
imageIcon = new Image(new Texture(musicFile));
|
||||
|
||||
if (musicFile.extension().toLowerCase().equals("mp3")) {
|
||||
try {
|
||||
Mp3File mp3File = new Mp3File(musicFile.file());
|
||||
durationInSeconds = mp3File.getLengthInSeconds();
|
||||
|
||||
if (mp3File.hasId3v2Tag()) {
|
||||
ID3v2 id3v2tag = mp3File.getId3v2Tag();
|
||||
byte[] albumWorkBytes = id3v2tag.getAlbumImage();
|
||||
|
||||
Pixmap albumArt = new Pixmap(albumWorkBytes, 0, albumWorkBytes.length);
|
||||
Texture albumArtTexture = new Texture(albumArt);
|
||||
imageIcon = new Image(albumArtTexture);
|
||||
float scale = 0.25f*Gdx.graphics.getHeight()/imageIcon.getHeight();
|
||||
|
||||
imageIcon.setScale(scale);
|
||||
albumArtTexture.dispose();
|
||||
|
||||
songName = id3v2tag.getTitle();
|
||||
}
|
||||
} catch (UnsupportedTagException | InvalidDataException | IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
wavinfo = new WavInfo(musicFile.file());
|
||||
durationInSeconds = wavinfo.getDurationInSeconds();
|
||||
}
|
||||
if (durationInSeconds > 60 * 5) {
|
||||
invalidMusic = true;
|
||||
}
|
||||
if (songName == null || songName.isEmpty()) {
|
||||
songName = musicFile.name();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user