53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| 
								 | 
							
								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;
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function _readSample(): FastFloat {
							 | 
						||
| 
								 | 
							
										if (buffer == null)
							 | 
						||
| 
								 | 
							
											return 0;
							 | 
						||
| 
								 | 
							
										var value: FastFloat = buffer.data.get(buffer.readLocation);
							 | 
						||
| 
								 | 
							
										++buffer.readLocation;
							 | 
						||
| 
								 | 
							
										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 stream(sound: Sound, loop: Bool = false): kha.audio1.AudioChannel {
							 | 
						||
| 
								 | 
							
										return null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |