Skip to content
Snippets Groups Projects
NativeAudioMacHandler.java 2 KiB
Newer Older
  • Learn to ignore specific revisions
  • package de.tobias.playpad;
    
    import java.nio.file.Path;
    
    import de.tobias.playpad.audio.AudioHandler;
    import de.tobias.playpad.pad.PadStatus;
    import de.tobias.playpad.pad.conntent.PadContent;
    import de.tobias.utils.util.Worker;
    import javafx.beans.property.ObjectProperty;
    import javafx.beans.property.ReadOnlyObjectProperty;
    import javafx.beans.property.SimpleObjectProperty;
    import javafx.util.Duration;
    
    public class NativeAudioMacHandler extends AudioHandler {
    
    	private static int counter = 0;
    
    	private final int id;
    	private ObjectProperty<Duration> positionProperty;
    	private ObjectProperty<Duration> durationProperty;
    	private boolean isLoaded;
    
    	public NativeAudioMacHandler(PadContent content) {
    		super(content);
    
    		id = counter++;
    		positionProperty = new SimpleObjectProperty<>();
    		durationProperty = new SimpleObjectProperty<>();
    	}
    
    	@Override
    	public void play() {
    		NativeAudio.play(id);
    	}
    
    	@Override
    	public void pause() {
    		NativeAudio.pause(id);
    	}
    
    	@Override
    	public void stop() {
    		NativeAudio.stop(id);
    	}
    
    	@Override
    	public Duration getPosition() {
    		return positionProperty.get();
    	}
    
    	@Override
    	public ReadOnlyObjectProperty<Duration> positionProperty() {
    		return positionProperty;
    	}
    
    	@Override
    	public Duration getDuration() {
    		return durationProperty.get();
    	}
    
    	@Override
    	public ReadOnlyObjectProperty<Duration> durationProperty() {
    		return durationProperty;
    	}
    
    	@Override
    	public void setVolume(double volume, double masterVolume, double customVolume) {
    		double vol = customVolume * volume * masterVolume;
    		NativeAudio.setVolume(id, vol);
    
    	}
    
    	@Override
    	public boolean isMediaLoaded() {
    		return isLoaded;
    	}
    
    	@Override
    	public void loadMedia(Path[] paths) {
    		Worker.runLater(() ->
    		{
    			isLoaded = NativeAudio.load(id, paths[0].toString().replace(" ", "%20"));
    			if (isLoaded) {
    				durationProperty.set(Duration.seconds(NativeAudio.getDuration(id)));
    				getContent().getPad().setStatus(PadStatus.READY);
    			}
    		});
    	}
    
    	@Override
    	public void unloadMedia() {
    		NativeAudio.dispose(id);
    	}
    
    }