Update Files
This commit is contained in:
80
Kha/Backends/WPF/kha/audio1/WpfAudioChannel.hx
Normal file
80
Kha/Backends/WPF/kha/audio1/WpfAudioChannel.hx
Normal file
@ -0,0 +1,80 @@
|
||||
package kha.audio1;
|
||||
|
||||
import system.io.Path;
|
||||
import system.Uri;
|
||||
import system.UriKind;
|
||||
import system.windows.controls.MediaElement;
|
||||
import system.windows.controls.MediaState;
|
||||
|
||||
class WpfAudioChannel implements kha.audio1.AudioChannel {
|
||||
var player: MediaElement;
|
||||
var hasFinished: Bool = false;
|
||||
|
||||
public function new(filename: String) {
|
||||
this.player = new MediaElement();
|
||||
addEventHandlers();
|
||||
player.LoadedBehavior = MediaState.Manual;
|
||||
player.UnloadedBehavior = MediaState.Manual;
|
||||
// MediaElement needs Absolute URI. Relative won't work
|
||||
player.Source = new Uri(Path.GetFullPath(filename), UriKind.Absolute);
|
||||
// TODO: perhaps files should be checked for validity?
|
||||
|
||||
play();
|
||||
}
|
||||
|
||||
public function play(): Void {
|
||||
hasFinished = false;
|
||||
player.Play();
|
||||
}
|
||||
|
||||
public function pause(): Void {
|
||||
player.Pause();
|
||||
}
|
||||
|
||||
public function stop(): Void {
|
||||
hasFinished = true;
|
||||
player.Stop();
|
||||
}
|
||||
|
||||
public var length(get, never): Float;
|
||||
|
||||
@:functionCode('
|
||||
if (player.NaturalDuration.HasTimeSpan) return player.NaturalDuration.TimeSpan.TotalMilliseconds * 1000.0;
|
||||
else return float.MaxValue;
|
||||
')
|
||||
function get_length(): Float {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public var position(get, never): Float; // Seconds
|
||||
|
||||
@:functionCode('return Math.round(player.Position.TotalMilliseconds) * 1000.0;')
|
||||
function get_position(): Float {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public var volume(get, set): Float;
|
||||
|
||||
function get_volume(): Float {
|
||||
return player.Volume;
|
||||
}
|
||||
|
||||
function set_volume(value: Float): Float {
|
||||
return player.Volume = value;
|
||||
}
|
||||
|
||||
public var finished(get, never): Bool;
|
||||
|
||||
function get_finished(): Bool {
|
||||
return hasFinished;
|
||||
}
|
||||
|
||||
@:functionCode('
|
||||
player.MediaEnded += OnMediaEnded;
|
||||
')
|
||||
function addEventHandlers() {}
|
||||
|
||||
function OnMediaEnded(obj: Dynamic, e: RoutedEventArgs) {
|
||||
hasFinished = true;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user