125 lines
3.5 KiB
Java
Executable File
125 lines
3.5 KiB
Java
Executable File
package zero1hd.polyjet.audio;
|
|
|
|
import java.io.IOException;
|
|
|
|
import org.jaudiotagger.audio.AudioFile;
|
|
import org.jaudiotagger.audio.AudioFileIO;
|
|
import org.jaudiotagger.audio.exceptions.CannotReadException;
|
|
import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException;
|
|
import org.jaudiotagger.audio.exceptions.ReadOnlyFileException;
|
|
import org.jaudiotagger.audio.mp3.MP3File;
|
|
import org.jaudiotagger.audio.wav.WavTag;
|
|
import org.jaudiotagger.tag.FieldKey;
|
|
import org.jaudiotagger.tag.TagException;
|
|
|
|
import com.badlogic.gdx.Preferences;
|
|
import com.badlogic.gdx.files.FileHandle;
|
|
import com.badlogic.gdx.graphics.Pixmap;
|
|
import com.badlogic.gdx.graphics.Texture;
|
|
import com.badlogic.gdx.utils.Disposable;
|
|
|
|
public class AudioInfo implements Disposable {
|
|
private long durationInSeconds;
|
|
private String songName;
|
|
private Texture albumCover;
|
|
private String author;
|
|
private int previousTop;
|
|
private int ratedDifficulty;
|
|
private byte[] albumWorkBytes;
|
|
private boolean invalidMusic;
|
|
|
|
public AudioInfo(FileHandle musicFile, Preferences musicData) {
|
|
if (musicFile.extension().toLowerCase().equals("mp3")) {
|
|
MP3File mp3File;
|
|
try {
|
|
mp3File = new MP3File(musicFile.file());
|
|
durationInSeconds = mp3File.getAudioHeader().getTrackLength();
|
|
|
|
if (mp3File.getTag() != null && mp3File.getTag().getFirstArtwork() != null) {
|
|
albumWorkBytes = mp3File.getTag().getFirstArtwork().getBinaryData();
|
|
}
|
|
|
|
songName = mp3File.getTag().getFirst(FieldKey.TITLE);
|
|
author = mp3File.getTag().getFirst(FieldKey.ARTIST);
|
|
} catch (IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) {
|
|
// TODO Auto-generated catch block
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// invalidMusic = true;
|
|
|
|
} else {
|
|
|
|
try {
|
|
AudioFile audioFile = AudioFileIO.read(musicFile.file());
|
|
WavTag wavTag = (WavTag) AudioFileIO.read(musicFile.file()).getTag();
|
|
songName = wavTag.getFirst(FieldKey.TITLE);
|
|
author = wavTag.getFirst(FieldKey.ARTIST);
|
|
durationInSeconds = audioFile.getAudioHeader().getTrackLength();
|
|
} catch (CannotReadException | IOException | TagException | ReadOnlyFileException
|
|
| InvalidAudioFrameException e) {
|
|
// TODO Auto-generated catch block
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
if (durationInSeconds > 60 * 5) {
|
|
invalidMusic = true;
|
|
}
|
|
|
|
if (songName == null || songName.isEmpty()) {
|
|
songName = musicFile.nameWithoutExtension();
|
|
}
|
|
|
|
previousTop = musicData.getInteger(songName + ":previous top", -1);
|
|
ratedDifficulty = musicData.getInteger(songName + ":difficulty", -1);
|
|
|
|
if (author == null || author.isEmpty()) {
|
|
author = "N/A";
|
|
}
|
|
}
|
|
|
|
public void setupTexture(Texture defaultAlbumCover) {
|
|
if (albumWorkBytes != null) {
|
|
Pixmap albumCoverFromBytes = new Pixmap(albumWorkBytes, 0, albumWorkBytes.length);
|
|
albumCover = new Texture(albumCoverFromBytes);
|
|
albumCoverFromBytes.dispose();
|
|
} else {
|
|
this.albumCover = defaultAlbumCover;
|
|
}
|
|
}
|
|
|
|
public long getDurationInSeconds() {
|
|
return durationInSeconds;
|
|
}
|
|
|
|
public String getSongName() {
|
|
return songName.replace('_', ' ');
|
|
}
|
|
|
|
public Texture getAlbumCover() {
|
|
return albumCover;
|
|
}
|
|
|
|
public String getAuthor() {
|
|
return author;
|
|
}
|
|
|
|
public int getPreviousTop() {
|
|
return previousTop;
|
|
}
|
|
|
|
public int getRatedDifficulty() {
|
|
return ratedDifficulty;
|
|
}
|
|
|
|
public boolean isInvalidMusic() {
|
|
return invalidMusic;
|
|
}
|
|
|
|
@Override
|
|
public void dispose() {
|
|
albumCover.dispose();
|
|
}
|
|
|
|
}
|