91 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| package kha.audio2;
 | |
| 
 | |
| import haxe.ds.Vector;
 | |
| import haxe.io.Bytes;
 | |
| 
 | |
| class StreamChannel implements kha.audio1.AudioChannel {
 | |
| 	var _vorbis: Pointer;
 | |
| 	var atend: Bool = false;
 | |
| 	@:keep var loop: Bool;
 | |
| 	var myVolume: Float;
 | |
| 	var paused: Bool = false;
 | |
| 
 | |
| 	public function new(data: Bytes, loop: Bool) {
 | |
| 		myVolume = 1;
 | |
| 		this.loop = loop;
 | |
| 		_vorbis = kinc_sound_init_vorbis(data.getData().bytes, data.length);
 | |
| 	}
 | |
| 
 | |
| 	public function nextSamples(samples: kha.arrays.Float32Array, length: Int, sampleRate: Int): Void {
 | |
| 		if (paused) {
 | |
| 			for (i in 0...length) {
 | |
| 				samples[i] = 0;
 | |
| 			}
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		atend = kinc_sound_next_vorbis_samples(_vorbis, samples.getData(), length, loop, atend);
 | |
| 	}
 | |
| 
 | |
| 	public function play(): Void {
 | |
| 		paused = false;
 | |
| 	}
 | |
| 
 | |
| 	public function pause(): Void {
 | |
| 		paused = true;
 | |
| 	}
 | |
| 
 | |
| 	public function stop(): Void {
 | |
| 		atend = true;
 | |
| 	}
 | |
| 
 | |
| 	public var length(get, never): Float; // Seconds
 | |
| 
 | |
| 	function get_length(): Float {
 | |
| 		return kinc_sound_vorbis_get_length(_vorbis);
 | |
| 	}
 | |
| 
 | |
| 	public var position(get, set): Float; // Seconds
 | |
| 
 | |
| 	function get_position(): Float {
 | |
| 		return kinc_sound_vorbis_get_position(_vorbis);
 | |
| 	}
 | |
| 
 | |
| 	function set_position(value: Float): Float {
 | |
| 		return value;
 | |
| 	}
 | |
| 
 | |
| 	public var volume(get, set): Float;
 | |
| 
 | |
| 	function get_volume(): Float {
 | |
| 		return myVolume;
 | |
| 	}
 | |
| 
 | |
| 	function set_volume(value: Float): Float {
 | |
| 		return myVolume = value;
 | |
| 	}
 | |
| 
 | |
| 	public var finished(get, never): Bool;
 | |
| 
 | |
| 	function get_finished(): Bool {
 | |
| 		return atend;
 | |
| 	}
 | |
| 
 | |
| 	@:hlNative("std", "kinc_sound_init_vorbis") static function kinc_sound_init_vorbis(data: Pointer, length: Int): Pointer {
 | |
| 		return null;
 | |
| 	}
 | |
| 
 | |
| 	@:hlNative("std", "kinc_sound_next_vorbis_samples") static function kinc_sound_next_vorbis_samples(vorbis: Pointer, samples: Pointer, length: Int,
 | |
| 			loop: Bool, atend: Bool): Bool {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	@:hlNative("std", "kinc_sound_vorbis_get_length") static function kinc_sound_vorbis_get_length(vorbis: Pointer): Int {
 | |
| 		return 0;
 | |
| 	}
 | |
| 
 | |
| 	@:hlNative("std", "kinc_sound_vorbis_get_position") static function kinc_sound_vorbis_get_position(vorbis: Pointer): Int {
 | |
| 		return 0;
 | |
| 	}
 | |
| }
 |