package com.nilunder.bdx.audio;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.files.FileHandle;
import com.nilunder.bdx.Bdx;
import java.util.ArrayList;
public class BDXMusic {
Music data;
static ArrayList<BDXMusic> playingMusic;
private float pan;
private float volume; // Manually handling volume because fading and global audio / music volume changes affect Music data's volume
BDXMusic(FileHandle filePath){
data = Gdx.audio.newMusic(filePath);
pan = 0;
volume = 1;
if (playingMusic == null)
playingMusic = new ArrayList<BDXMusic>();
}
public void play() {
volume(volume); // Update the playing stream's volume and pan on play
pan(pan);
data.play();
if (!playingMusic.contains(this))
playingMusic.add(this);
for (BDXMusic m : new ArrayList<BDXMusic>(playingMusic)) {
if (!m.isPlaying())
playingMusic.remove(m);
}
}
public void pause() {
data.pause();
}
public void stop() {
data.stop();
}
public boolean isPlaying() {
return data.isPlaying();
}
public void looping(boolean looping) {
data.setLooping(looping);
}
public boolean looping() {
return data.isLooping();
}
public void volume(float volume) {
this.volume = volume;
float tv = volume * Bdx.audio.music.volume() * Bdx.audio.volume();
data.setVolume(Math.max(Float.MIN_VALUE, tv)); // If the volume on a Music stream gets to 0 or below, it can crash when switching to another music stream
}
public float volume() {
return volume;
}
public void pan(float pan, float volume) {
pan(pan);
volume(volume);
}
public void pan(float pan) {
this.pan = pan;
data.setPan(pan + Bdx.audio.music.pan() + Bdx.audio.pan(), data.getVolume());
}
public float pan() {
return pan;
}
public void position(float position) {
data.setPosition(position);
}
public float position() {
return data.getPosition();
}
public void dispose() {
data.dispose();
}
}