first commit
This commit is contained in:
112
src/main/java/BASS/AudioPlayer.java
Normal file
112
src/main/java/BASS/AudioPlayer.java
Normal file
@@ -0,0 +1,112 @@
|
||||
package BASS;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.tinylog.Logger;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class AudioPlayer {
|
||||
private final Bass bass = Bass.Instance;
|
||||
private @Getter boolean inited = false;
|
||||
|
||||
/**
|
||||
* Initialize AudioPlayer
|
||||
* @param deviceid device id to be used, 0 = no speaker, 1 = first device, 2 ... n = other devices
|
||||
* @param samplingrate sampling rate to be used, 44100 = CD quality, 48000 = DVD quality
|
||||
*/
|
||||
public AudioPlayer(int deviceid, int samplingrate){
|
||||
if (bass.BASS_GetVersion()!=0){
|
||||
if (deviceid>-1){
|
||||
int initflags = Bass.BASS_DEVICE_16BITS | Bass.BASS_DEVICE_STEREO | Bass.BASS_DEVICE_FREQ | Bass.BASS_DEVICE_REINIT;
|
||||
if (bass.BASS_Init(deviceid,samplingrate,initflags)){
|
||||
inited = true;
|
||||
} else Logger.error("AudioPlayer initialization failed, BASS_Init failed, error code: " + bass.BASS_ErrorGetCode());
|
||||
} else Logger.error("AudioPlayer initialization failed, deviceid is not correct");
|
||||
} else Logger.error("AudioPlayer initialization failed, BASS version is not correct");
|
||||
}
|
||||
|
||||
/**
|
||||
* Free AudioPlayer
|
||||
*/
|
||||
public void Free(){
|
||||
if (inited){
|
||||
if (bass.BASS_Free()){
|
||||
Logger.info("AudioPlayer Free success");
|
||||
} else Logger.error("AudioPlayer Free failed, error code: "+bass.BASS_ErrorGetCode());
|
||||
inited = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Output Volume
|
||||
* @param volume volume level, 0-100
|
||||
*/
|
||||
public void setOutputVolume(int volume){
|
||||
if (volume<0) volume = 0;
|
||||
if (volume>100) volume = 100;
|
||||
if (inited){
|
||||
if (!bass.BASS_SetVolume(volume/100f)){
|
||||
Logger.error("AudioPlayer SetVolume failed, error code: "+bass.BASS_ErrorGetCode());
|
||||
}
|
||||
} else Logger.info("AudioPlayer SetVolume failed, AudioPlayer is not initialized");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Output Volume
|
||||
* @return volume level, 0-100
|
||||
*/
|
||||
public int getOutputVolume(){
|
||||
if (inited){
|
||||
float volume = bass.BASS_GetVolume();
|
||||
if (volume>=0 && volume<=1){
|
||||
return (int)(volume*100);
|
||||
} else Logger.info("AudioPlayer GetVolume failed, volume is not correct");
|
||||
} else Logger.info("AudioPlayer GetVolume failed, AudioPlayer is not initialized");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Play Audio File
|
||||
* @param filename File to be played
|
||||
* @param playbackstatus PlaybackStatus callback
|
||||
* @return true if success, false if failed
|
||||
*/
|
||||
public boolean PlayFile(final String filename, final PlaybackStatus playbackstatus){
|
||||
if (inited){
|
||||
int filehandle = bass.BASS_StreamCreateFile(false, filename, 0, 0, 0);
|
||||
if (filehandle!=0){
|
||||
if (bass.BASS_ChannelStart(filehandle)){
|
||||
new Thread(()->{
|
||||
if (playbackstatus!=null) playbackstatus.onPlaybackStarted(filename);
|
||||
boolean iscontinue = true;
|
||||
while(iscontinue){
|
||||
switch (bass.BASS_ChannelIsActive(filehandle)) {
|
||||
case Bass.BASS_ACTIVE_PAUSED_DEVICE :
|
||||
if (playbackstatus!=null) playbackstatus.onPlaybackFailure(filename);
|
||||
iscontinue = false;
|
||||
break;
|
||||
case Bass.BASS_ACTIVE_STOPPED:
|
||||
iscontinue = false;
|
||||
break;
|
||||
default : {
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
} catch (InterruptedException e) {
|
||||
iscontinue = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (playbackstatus!=null) playbackstatus.onPlaybackFinished(filename);
|
||||
}).start();
|
||||
return true;
|
||||
} else Logger.error("AudioPlayer PlayFile failed, BASS_ChannelStart failed, error code: "+bass.BASS_ErrorGetCode());
|
||||
} else Logger.error("AudioPlayer PlayFile failed, BASS_StreamCreateFile failed, error code: "+bass.BASS_ErrorGetCode());
|
||||
} else Logger.info("AudioPlayer PlayFile failed, AudioPlayer is not initialized");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user