Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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);
}
}