Quick fix for song groups with different preview times.
Also moved some negative track position checks around to catch more cases. Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This commit is contained in:
parent
f6eec5cd6c
commit
4920508060
|
@ -66,8 +66,10 @@ public class MusicController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plays an audio file at the preview position.
|
* Plays an audio file at the preview position.
|
||||||
|
* If the audio file is already playing, then nothing will happen.
|
||||||
*/
|
*/
|
||||||
public static void play(final OsuFile osu, final boolean loop) {
|
public static void play(final OsuFile osu, final boolean loop) {
|
||||||
|
// new track: load and play
|
||||||
if (lastOsu == null || !osu.audioFilename.equals(lastOsu.audioFilename)) {
|
if (lastOsu == null || !osu.audioFilename.equals(lastOsu.audioFilename)) {
|
||||||
reset();
|
reset();
|
||||||
System.gc();
|
System.gc();
|
||||||
|
@ -87,14 +89,22 @@ public class MusicController {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// new track position: play at position
|
||||||
|
else if (osu.previewTime != lastOsu.previewTime)
|
||||||
|
playAt(osu.previewTime, loop);
|
||||||
|
|
||||||
lastOsu = osu;
|
lastOsu = osu;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads a track and plays it.
|
* Loads a track and plays it.
|
||||||
|
* @param file the audio file
|
||||||
|
* @param position the track position (in ms)
|
||||||
|
* @param loop whether or not to loop the track
|
||||||
*/
|
*/
|
||||||
private static void loadTrack(File file, int previewTime, boolean loop) {
|
private static void loadTrack(File file, int position, boolean loop) {
|
||||||
try { // create a new player
|
try {
|
||||||
player = new Music(file.getPath(), true);
|
player = new Music(file.getPath(), true);
|
||||||
player.addListener(new MusicListener() {
|
player.addListener(new MusicListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -103,7 +113,7 @@ public class MusicController {
|
||||||
@Override
|
@Override
|
||||||
public void musicSwapped(Music music, Music newMusic) {}
|
public void musicSwapped(Music music, Music newMusic) {}
|
||||||
});
|
});
|
||||||
playAt((previewTime > 0) ? previewTime : 0, loop);
|
playAt(position, loop);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ErrorHandler.error(String.format("Could not play track '%s'.", file.getName()), e, false);
|
ErrorHandler.error(String.format("Could not play track '%s'.", file.getName()), e, false);
|
||||||
}
|
}
|
||||||
|
@ -111,6 +121,8 @@ public class MusicController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plays the current track at the given position.
|
* Plays the current track at the given position.
|
||||||
|
* @param position the track position (in ms)
|
||||||
|
* @param loop whether or not to loop the track
|
||||||
*/
|
*/
|
||||||
public static void playAt(final int position, final boolean loop) {
|
public static void playAt(final int position, final boolean loop) {
|
||||||
if (trackExists()) {
|
if (trackExists()) {
|
||||||
|
@ -121,6 +133,7 @@ public class MusicController {
|
||||||
player.loop();
|
player.loop();
|
||||||
else
|
else
|
||||||
player.play();
|
player.play();
|
||||||
|
if (position >= 0)
|
||||||
player.setPosition(position / 1000f);
|
player.setPosition(position / 1000f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -135,9 +148,7 @@ public class MusicController {
|
||||||
/**
|
/**
|
||||||
* Returns true if a track is loaded.
|
* Returns true if a track is loaded.
|
||||||
*/
|
*/
|
||||||
public static boolean trackExists() {
|
public static boolean trackExists() { return (player != null); }
|
||||||
return (player != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the OsuFile associated with the current track.
|
* Returns the OsuFile associated with the current track.
|
||||||
|
@ -232,7 +243,7 @@ public class MusicController {
|
||||||
* Seeks to a position in the current track.
|
* Seeks to a position in the current track.
|
||||||
*/
|
*/
|
||||||
public static boolean setPosition(int position) {
|
public static boolean setPosition(int position) {
|
||||||
return (trackExists() && player.setPosition(position / 1000f));
|
return (trackExists() && position >= 0 && player.setPosition(position / 1000f));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue
Block a user