forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			78 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| 
								 | 
							
								package kha.js;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import js.html.AudioElement;
							 | 
						||
| 
								 | 
							
								import kha.audio1.AudioChannel;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class AEAudioChannel implements kha.audio1.AudioChannel {
							 | 
						||
| 
								 | 
							
									var element: AudioElement;
							 | 
						||
| 
								 | 
							
									var stopped = false;
							 | 
						||
| 
								 | 
							
									var looping: Bool;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function new(element: AudioElement, looping: Bool) {
							 | 
						||
| 
								 | 
							
										this.element = element;
							 | 
						||
| 
								 | 
							
										this.looping = looping;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function play(): Void {
							 | 
						||
| 
								 | 
							
										stopped = false;
							 | 
						||
| 
								 | 
							
										element.play();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function pause(): Void {
							 | 
						||
| 
								 | 
							
										try {
							 | 
						||
| 
								 | 
							
											element.pause();
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										catch (e:Dynamic) {
							 | 
						||
| 
								 | 
							
											trace(e);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function stop(): Void {
							 | 
						||
| 
								 | 
							
										try {
							 | 
						||
| 
								 | 
							
											element.pause();
							 | 
						||
| 
								 | 
							
											element.currentTime = 0;
							 | 
						||
| 
								 | 
							
											stopped = true;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										catch (e:Dynamic) {
							 | 
						||
| 
								 | 
							
											trace(e);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var length(get, never): Float; // Seconds
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function get_length(): Float {
							 | 
						||
| 
								 | 
							
										if (Math.isFinite(element.duration)) {
							 | 
						||
| 
								 | 
							
											return element.duration;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										else {
							 | 
						||
| 
								 | 
							
											return Math.POSITIVE_INFINITY;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var position(get, set): Float; // Seconds
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function get_position(): Float {
							 | 
						||
| 
								 | 
							
										return element.currentTime;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function set_position(value: Float): Float {
							 | 
						||
| 
								 | 
							
										return element.currentTime = value;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var volume(get, set): Float;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function get_volume(): Float {
							 | 
						||
| 
								 | 
							
										return element.volume;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function set_volume(value: Float): Float {
							 | 
						||
| 
								 | 
							
										return element.volume = value;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var finished(get, never): Bool;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function get_finished(): Bool {
							 | 
						||
| 
								 | 
							
										return stopped || (!looping && position >= length);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |