Added music code
This commit is contained in:
parent
da3a2edd90
commit
85f0a34e20
131
core/src/love/distributedrebirth/demo4d/music/MusicManager.java
Normal file
131
core/src/love/distributedrebirth/demo4d/music/MusicManager.java
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
package love.distributedrebirth.demo4d.music;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.Gdx;
|
||||||
|
import com.badlogic.gdx.audio.Music;
|
||||||
|
import com.badlogic.gdx.audio.Music.OnCompletionListener;
|
||||||
|
import com.badlogic.gdx.files.FileHandle;
|
||||||
|
|
||||||
|
public class MusicManager {
|
||||||
|
|
||||||
|
private final MusicSong introSong;
|
||||||
|
private final MusicSong creditsSong;
|
||||||
|
private final List<MusicSong> backgroundSongs;
|
||||||
|
private final NextSongListener nextSongListener;
|
||||||
|
private MusicSong currentSong = null;
|
||||||
|
|
||||||
|
public MusicManager() {
|
||||||
|
backgroundSongs = new ArrayList<>();
|
||||||
|
introSong = new MusicSong(Gdx.audio.newMusic(Gdx.files.internal("music/panoramacircle-waterfowl.mp3")),"panoramacircle-waterfowl");
|
||||||
|
creditsSong = new MusicSong(Gdx.audio.newMusic(Gdx.files.internal("music/idtech-doom-sigil.mp3")), "idtech-doom-sigil");
|
||||||
|
nextSongListener = new NextSongListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addBackgroundMusic(FileHandle file) {
|
||||||
|
Music music = Gdx.audio.newMusic(file);
|
||||||
|
music.setOnCompletionListener(nextSongListener);
|
||||||
|
backgroundSongs.add(new MusicSong(music, file.name()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init() {
|
||||||
|
addBackgroundMusic(Gdx.files.internal("music/sanctumwave-risen.mp3"));
|
||||||
|
addBackgroundMusic(Gdx.files.internal("music/sanctumwave-devine-intellect.mp3"));
|
||||||
|
addBackgroundMusic(Gdx.files.internal("music/theselfhelpgroup-temple-os.mp3"));
|
||||||
|
addBackgroundMusic(Gdx.files.internal("music/sanctumwave-nightwalk.mp3"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dispose() {
|
||||||
|
introSong.music.dispose();
|
||||||
|
creditsSong.music.dispose();
|
||||||
|
for (MusicSong song:backgroundSongs) {
|
||||||
|
song.music.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MusicSong> getBackgroundSongs() {
|
||||||
|
return backgroundSongs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrentSongName() {
|
||||||
|
if (currentSong != null) {
|
||||||
|
return currentSong.getName();
|
||||||
|
} else {
|
||||||
|
return "None";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
if (currentSong != null) {
|
||||||
|
currentSong.music.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void play(MusicSongType type) {
|
||||||
|
MusicSong nextSong = null;
|
||||||
|
if (MusicSongType.INTRO.equals(type)) {
|
||||||
|
nextSong = introSong;
|
||||||
|
} else if (MusicSongType.CREDITS.equals(type)) {
|
||||||
|
nextSong = creditsSong;
|
||||||
|
} else {
|
||||||
|
int currentBackground = backgroundSongs.indexOf(currentSong);
|
||||||
|
if (currentBackground == -1) {
|
||||||
|
nextSong = backgroundSongs.get(0);
|
||||||
|
} else {
|
||||||
|
nextSong = currentSong;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
play(nextSong);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void play(MusicSong song) {
|
||||||
|
if (song == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
stop();
|
||||||
|
currentSong = song;
|
||||||
|
currentSong.music.play();
|
||||||
|
}
|
||||||
|
|
||||||
|
class NextSongListener implements OnCompletionListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCompletion(Music music) {
|
||||||
|
next();
|
||||||
|
play(currentSong);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void next() {
|
||||||
|
int currentBackground = backgroundSongs.indexOf(currentSong);
|
||||||
|
if (currentBackground == -1) {
|
||||||
|
return; // some other
|
||||||
|
}
|
||||||
|
if (currentBackground == backgroundSongs.size()-1) {
|
||||||
|
currentBackground = -1; // loop to start
|
||||||
|
}
|
||||||
|
boolean play = currentSong.music.isPlaying();
|
||||||
|
currentSong.music.stop();
|
||||||
|
currentSong = backgroundSongs.get(currentBackground+1);
|
||||||
|
if (play) {
|
||||||
|
currentSong.music.play();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void prev() {
|
||||||
|
int currentBackground = backgroundSongs.indexOf(currentSong);
|
||||||
|
if (currentBackground == -1) {
|
||||||
|
return; // some other
|
||||||
|
}
|
||||||
|
if (currentBackground == 0) {
|
||||||
|
currentBackground = backgroundSongs.size(); // loop to end
|
||||||
|
}
|
||||||
|
boolean play = currentSong.music.isPlaying();
|
||||||
|
currentSong.music.stop();
|
||||||
|
currentSong = backgroundSongs.get(currentBackground-1);
|
||||||
|
if (play) {
|
||||||
|
currentSong.music.play();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
package love.distributedrebirth.demo4d.music;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.Gdx;
|
||||||
|
import com.badlogic.gdx.files.FileHandle;
|
||||||
|
|
||||||
|
import imgui.ImGui;
|
||||||
|
import imgui.flag.ImGuiCond;
|
||||||
|
import imgui.flag.ImGuiSelectableFlags;
|
||||||
|
import imgui.flag.ImGuiTableColumnFlags;
|
||||||
|
import imgui.flag.ImGuiTableFlags;
|
||||||
|
import imgui.type.ImBoolean;
|
||||||
|
import love.distributedrebirth.demo4d.ImGuiRendererMain;
|
||||||
|
import love.distributedrebirth.demo4d.Demo4DMain;
|
||||||
|
import net.spookygames.gdx.nativefilechooser.NativeFileChooserCallback;
|
||||||
|
import net.spookygames.gdx.nativefilechooser.NativeFileChooserConfiguration;
|
||||||
|
|
||||||
|
public class MusicPlayerRenderer extends ImGuiRendererMain {
|
||||||
|
|
||||||
|
public MusicPlayerRenderer(Demo4DMain main) {
|
||||||
|
super(main);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(ImBoolean widgetOpen) {
|
||||||
|
ImGui.setNextWindowPos(100, 100, ImGuiCond.FirstUseEver);
|
||||||
|
ImGui.setNextWindowSize(320, 240, ImGuiCond.FirstUseEver);
|
||||||
|
ImGui.begin("Music Player", widgetOpen);
|
||||||
|
|
||||||
|
ImGui.text("Current Song:");
|
||||||
|
ImGui.sameLine();
|
||||||
|
ImGui.text(main.music.getCurrentSongName());
|
||||||
|
ImGui.separator();
|
||||||
|
if (ImGui.button("Play")) {
|
||||||
|
main.music.play(MusicSongType.BACKGROUND);
|
||||||
|
}
|
||||||
|
ImGui.sameLine();
|
||||||
|
if (ImGui.button("<")) {
|
||||||
|
main.music.prev();
|
||||||
|
}
|
||||||
|
ImGui.sameLine();
|
||||||
|
if (ImGui.button(">")) {
|
||||||
|
main.music.next();
|
||||||
|
}
|
||||||
|
ImGui.sameLine();
|
||||||
|
if (ImGui.button("Stop")) {
|
||||||
|
main.music.stop();
|
||||||
|
}
|
||||||
|
ImGui.sameLine();
|
||||||
|
if (ImGui.button("Add")) {
|
||||||
|
NativeFileChooserConfiguration conf = new NativeFileChooserConfiguration();
|
||||||
|
conf.directory = Gdx.files.absolute(System.getProperty("user.home"));
|
||||||
|
conf.mimeFilter = "audio/*";
|
||||||
|
conf.title = "Choose audio file";
|
||||||
|
main.fileChooser.chooseFile(conf, new NativeFileChooserCallback() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFileChosen(FileHandle file) {
|
||||||
|
main.music.addBackgroundMusic(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCancellation() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Exception exception) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
int flags = ImGuiTableFlags.ScrollX | ImGuiTableFlags.RowBg | ImGuiTableFlags.BordersOuter | ImGuiTableFlags.BordersV;
|
||||||
|
ImGui.beginTable("playlist", 3, flags);
|
||||||
|
ImGui.tableSetupColumn("#", ImGuiTableColumnFlags.NoHide);
|
||||||
|
ImGui.tableSetupColumn("Play");
|
||||||
|
ImGui.tableSetupColumn("Name");
|
||||||
|
ImGui.tableHeadersRow();
|
||||||
|
int i=1;
|
||||||
|
for (MusicSong song:main.music.getBackgroundSongs()) {
|
||||||
|
ImGui.pushID(i);
|
||||||
|
ImGui.tableNextRow();
|
||||||
|
ImGui.tableNextColumn();
|
||||||
|
ImGui.selectable(""+i, song.isPlaying(), ImGuiSelectableFlags.None);
|
||||||
|
ImGui.tableNextColumn();
|
||||||
|
if (ImGui.smallButton(">")) {
|
||||||
|
main.music.play(song);
|
||||||
|
}
|
||||||
|
ImGui.tableNextColumn();
|
||||||
|
ImGui.selectable(song.getName(), song.isPlaying(), ImGuiSelectableFlags.None);
|
||||||
|
ImGui.popID();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
ImGui.endTable();
|
||||||
|
|
||||||
|
ImGui.end();
|
||||||
|
}
|
||||||
|
}
|
21
core/src/love/distributedrebirth/demo4d/music/MusicSong.java
Normal file
21
core/src/love/distributedrebirth/demo4d/music/MusicSong.java
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package love.distributedrebirth.demo4d.music;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.audio.Music;
|
||||||
|
|
||||||
|
public class MusicSong {
|
||||||
|
protected final Music music;
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
public MusicSong(Music music, String name) {
|
||||||
|
this.music = music;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPlaying() {
|
||||||
|
return music.isPlaying();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package love.distributedrebirth.demo4d.music;
|
||||||
|
|
||||||
|
public enum MusicSongType {
|
||||||
|
INTRO,
|
||||||
|
CREDITS,
|
||||||
|
BACKGROUND
|
||||||
|
}
|
Loading…
Reference in a new issue