| 
									
										
										
										
											2025-05-13 19:52:40 +00:00
										 |  |  | package kha.audio2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import kha.Sound; | 
					
						
							|  |  |  | import kha.internal.IntBox; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Audio { | 
					
						
							|  |  |  | 	public static var disableGcInteractions = false; | 
					
						
							|  |  |  | 	static var intBox: IntBox = new IntBox(0); | 
					
						
							|  |  |  | 	static var buffer: Buffer; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public static function _init() { | 
					
						
							|  |  |  | 		var bufferSize = 1024 * 2; | 
					
						
							|  |  |  | 		buffer = new Buffer(bufferSize * 4, 2, samplesPerSecond); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public static function _callCallback(samples: Int): Void { | 
					
						
							|  |  |  | 		if (buffer == null) | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		if (audioCallback != null) { | 
					
						
							|  |  |  | 			intBox.value = samples; | 
					
						
							|  |  |  | 			audioCallback(intBox, buffer); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else { | 
					
						
							|  |  |  | 			for (i in 0...samples) { | 
					
						
							|  |  |  | 				buffer.data.set(buffer.writeLocation, 0); | 
					
						
							|  |  |  | 				buffer.writeLocation += 1; | 
					
						
							|  |  |  | 				if (buffer.writeLocation >= buffer.size) { | 
					
						
							|  |  |  | 					buffer.writeLocation = 0; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-13 19:53:49 +00:00
										 |  |  | 	public static function _readSample(): FastFloat { | 
					
						
							| 
									
										
										
										
											2025-05-13 19:52:40 +00:00
										 |  |  | 		if (buffer == null) | 
					
						
							|  |  |  | 			return 0; | 
					
						
							|  |  |  | 		var value = buffer.data.get(buffer.readLocation); | 
					
						
							| 
									
										
										
										
											2025-05-13 19:53:49 +00:00
										 |  |  | 		++buffer.readLocation; | 
					
						
							| 
									
										
										
										
											2025-05-13 19:52:40 +00:00
										 |  |  | 		if (buffer.readLocation >= buffer.size) { | 
					
						
							|  |  |  | 			buffer.readLocation = 0; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return value; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public static var samplesPerSecond: Int; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public static var audioCallback: IntBox->Buffer->Void; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public static function play(sound: Sound, loop: Bool = false): kha.audio1.AudioChannel { | 
					
						
							|  |  |  | 		return null; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public static function stream(sound: Sound, loop: Bool = false): kha.audio1.AudioChannel { | 
					
						
							|  |  |  | 		return null; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |