refactor; visualizer tuning; main menu updates to use metadata once
loaded;
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package zero1hd.rhythmbullet.audio;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
|
||||
@@ -7,22 +8,30 @@ import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import com.badlogic.gdx.utils.Disposable;
|
||||
import com.badlogic.gdx.utils.Sort;
|
||||
|
||||
import zero1hd.rhythmbullet.audio.metadata.AudioMetadata;
|
||||
import zero1hd.rhythmbullet.audio.metadata.MP3Metadata;
|
||||
import zero1hd.rhythmbullet.audio.metadata.WAVMetadata;
|
||||
|
||||
public class MusicMetadataController extends Observable implements Disposable, Observer {
|
||||
public class AudioMetadataController extends Observable implements Disposable, Observer {
|
||||
private MusicList musicList;
|
||||
private Array<AudioMetadata> metadataArray;
|
||||
private MetadataLoadingThread loadingThread;
|
||||
private volatile boolean searching;
|
||||
private Comparator<AudioMetadata> metadataComparer;
|
||||
|
||||
public MusicMetadataController(MusicList musicList) {
|
||||
public AudioMetadataController(MusicList musicList) {
|
||||
this.musicList = musicList;
|
||||
metadataArray = new Array<>();
|
||||
loadingThread = new MetadataLoadingThread();
|
||||
musicList.addObserver(this);
|
||||
metadataComparer = new Comparator<AudioMetadata>() {
|
||||
@Override
|
||||
public int compare(AudioMetadata o1, AudioMetadata o2) {
|
||||
return o1.getTitle().compareToIgnoreCase(o2.getTitle());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public MusicList getMusicList() {
|
||||
@@ -44,7 +53,7 @@ public class MusicMetadataController extends Observable implements Disposable, O
|
||||
* if there is the same amount of metadata as there is music in the music list.
|
||||
* @return whether or not both sizes are equal.
|
||||
*/
|
||||
public boolean isDone() {
|
||||
public boolean isSameSizeMusicList() {
|
||||
return (metadataArray.size == musicList.getMusicArray().size);
|
||||
}
|
||||
|
||||
@@ -59,13 +68,18 @@ public class MusicMetadataController extends Observable implements Disposable, O
|
||||
return metadataArray.size;
|
||||
}
|
||||
|
||||
public AudioMetadata getMetadata(int index) {
|
||||
public AudioMetadata getAudioMetadata(int index) {
|
||||
return metadataArray.get(index);
|
||||
}
|
||||
|
||||
|
||||
public AudioMetadata getInfo(FileHandle filehandle) {
|
||||
return metadataArray.get(musicList.getMusicArray().indexOf(filehandle, true));
|
||||
public AudioMetadata getAudioMetadata(FileHandle filehandle) {
|
||||
for (int i = 0; i < metadataArray.size; i++) {
|
||||
if (metadataArray.get(i).getFileHandle() == filehandle) {
|
||||
return metadataArray.get(i);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isSearching() {
|
||||
@@ -97,6 +111,8 @@ public class MusicMetadataController extends Observable implements Disposable, O
|
||||
}
|
||||
}
|
||||
|
||||
Sort.instance().sort(tempMetadataArray, metadataComparer);
|
||||
|
||||
if (work) {
|
||||
metadataArray = tempMetadataArray;
|
||||
searching = false;
|
||||
@@ -123,7 +139,7 @@ public class MusicMetadataController extends Observable implements Disposable, O
|
||||
|
||||
@Override
|
||||
public void update(Observable o, Object arg) {
|
||||
if (o == musicList) {
|
||||
if (o == musicList && arg == musicList.states.COMPLETE) {
|
||||
loadAudioMetadata();
|
||||
}
|
||||
}
|
@@ -25,7 +25,7 @@ public class MusicController extends Observable implements OnCompletionListener,
|
||||
public final States states = new States();
|
||||
private MusicList musicList;
|
||||
private MinimalAudioHeader musicHeader;
|
||||
private Music music;
|
||||
private volatile Music music;
|
||||
private int currentlyPlayingIndex;
|
||||
private boolean autoPlay;
|
||||
private boolean shuffle;
|
||||
@@ -153,7 +153,6 @@ public class MusicController extends Observable implements OnCompletionListener,
|
||||
musicHeader = null;
|
||||
if (music != null) {
|
||||
music.dispose();
|
||||
music = null;
|
||||
}
|
||||
if (currentlyPlayingIndex < 0) {
|
||||
currentlyPlayingIndex = musicList.getTotal()-1;
|
||||
|
@@ -29,7 +29,7 @@ public interface AudioMetadata extends Disposable {
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the title of the song in the metadata.
|
||||
* @return the title of the song in the metadata, or if it doesn't exist, the filename without extension and _ is given.
|
||||
*/
|
||||
public String getTitle();
|
||||
|
||||
|
@@ -51,7 +51,7 @@ public class MP3Metadata implements AudioMetadata {
|
||||
genre = tag.getFirst(ID3v23FieldKey.GENRE);
|
||||
title = tag.getFirst(ID3v23FieldKey.TITLE);
|
||||
if (title.isEmpty()) {
|
||||
title = fileHandle.nameWithoutExtension();
|
||||
title = fileHandle.nameWithoutExtension().replace('_', ' ');
|
||||
}
|
||||
} catch (IOException | CannotWriteException | CannotReadException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) {
|
||||
Gdx.app.error("MP3Metadata", "Failed to read metadata of file: " + fileHandle.name());
|
||||
|
@@ -40,7 +40,7 @@ public class WAVMetadata implements AudioMetadata {
|
||||
author = tag.getFirst(FieldKey.ARTIST);
|
||||
genre = tag.getFirst(FieldKey.GENRE);
|
||||
if (title.isEmpty()) {
|
||||
title = fileHandle.nameWithoutExtension();
|
||||
title = fileHandle.nameWithoutExtension().replace('_', ' ');
|
||||
}
|
||||
} catch (CannotReadException | IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) {
|
||||
Gdx.app.error("WAVMetadata", "Failed to read metadata of file: " + fileHandle.name());
|
||||
|
@@ -25,7 +25,7 @@ public class DoubleHorizontalVisualizer implements Disposable {
|
||||
private float spacePercentage = 0.7f;
|
||||
private float baseSensitivity = 0.009f;
|
||||
private int barCount = 120;
|
||||
private float barChangeRate = 7f;
|
||||
private float barChangeRate = 6.5f;
|
||||
private int smoothRange = 2;
|
||||
private int binsToInclude = 120;
|
||||
private Color color = new Color(0.5f, 0.6f, 0.8f, 0.46f);
|
||||
@@ -81,13 +81,13 @@ public class DoubleHorizontalVisualizer implements Disposable {
|
||||
pixelsMoved = MathUtils.floor(difference*targetDelta*barChangeRate);
|
||||
if (pixelsMoved >= 0) {
|
||||
if (barHeights[bar] + pixelsMoved > amplitudes[bar]) {
|
||||
barHeights[bar] += MathUtils.round(difference*targetDelta);
|
||||
barHeights[bar] = (int) amplitudes[bar];
|
||||
} else {
|
||||
barHeights[bar] += pixelsMoved;
|
||||
}
|
||||
} else {
|
||||
if (barHeights[bar] + pixelsMoved < amplitudes[bar]) {
|
||||
barHeights[bar] += MathUtils.round(difference*targetDelta);
|
||||
barHeights[bar] = (int) amplitudes[bar];
|
||||
} else {
|
||||
barHeights[bar] += pixelsMoved;
|
||||
}
|
||||
|
@@ -104,12 +104,12 @@ public class BloomShader implements Disposable {
|
||||
|
||||
for (int i = 0; i <= bloomLevel; i++) {
|
||||
// Horizontal gaussian blur
|
||||
hBlur.begin();
|
||||
if (i > 0) {
|
||||
fboRegion.setTexture(vBlur.getColorBufferTexture());
|
||||
} else {
|
||||
fboRegion.setTexture(lightFilterBuffer.getColorBufferTexture());
|
||||
}
|
||||
hBlur.begin();
|
||||
screenBatch.setShader(gaussianBlurShader);
|
||||
gaussianBlurShader.setUniformi("horizontal", 1);
|
||||
screenBatch.draw(fboRegion, 0f, 0f, width, height);
|
||||
@@ -139,6 +139,10 @@ public class BloomShader implements Disposable {
|
||||
this.bloomLevel = bloomLevel;
|
||||
}
|
||||
|
||||
public int getBloomLevel() {
|
||||
return bloomLevel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
brightFilterShader.dispose();
|
||||
|
Reference in New Issue
Block a user