forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package kha.capture; | ||
|  | 
 | ||
|  | import js.html.audio.AudioProcessingEvent; | ||
|  | import kha.audio2.Buffer; | ||
|  | 
 | ||
|  | class AudioCapture { | ||
|  | 	static var input: js.html.audio.MediaStreamAudioSourceNode; | ||
|  | 	static var processingNode: js.html.audio.ScriptProcessorNode; | ||
|  | 	static var buffer: Buffer; | ||
|  | 
 | ||
|  | 	public static var audioCallback: Int->Buffer->Void; | ||
|  | 
 | ||
|  | 	public static function init(initialized: Void->Void, error: Void->Void): Void { | ||
|  | 		if (kha.audio2.Audio._context == null) { | ||
|  | 			error(); | ||
|  | 			return; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		var getUserMedia = untyped __js__("navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia"); | ||
|  | 		getUserMedia.call(js.Browser.navigator, {audio: true}, function(stream: Dynamic) { | ||
|  | 			input = kha.audio2.Audio._context.createMediaStreamSource(stream); | ||
|  | 
 | ||
|  | 			var bufferSize = 1024 * 2; | ||
|  | 			buffer = new Buffer(bufferSize * 4, 2, Std.int(kha.audio2.Audio._context.sampleRate)); | ||
|  | 
 | ||
|  | 			processingNode = kha.audio2.Audio._context.createScriptProcessor(bufferSize, 1, 0); | ||
|  | 			processingNode.onaudioprocess = function(e: AudioProcessingEvent) { | ||
|  | 				if (audioCallback != null) { | ||
|  | 					var input1 = e.inputBuffer.getChannelData(0); | ||
|  | 					var input2 = e.inputBuffer.getChannelData(0); | ||
|  | 					for (i in 0...e.inputBuffer.length) { | ||
|  | 						buffer.data.set(buffer.writeLocation, input1[i]); | ||
|  | 						buffer.writeLocation += 1; | ||
|  | 						buffer.data.set(buffer.writeLocation, input2[i]); | ||
|  | 						buffer.writeLocation += 1; | ||
|  | 						if (buffer.writeLocation >= buffer.size) { | ||
|  | 							buffer.writeLocation = 0; | ||
|  | 						} | ||
|  | 					} | ||
|  | 					audioCallback(e.inputBuffer.length * 2, buffer); | ||
|  | 				} | ||
|  | 			} | ||
|  | 
 | ||
|  | 			input.connect(processingNode); | ||
|  | 			// input.connect(kha.audio2.Audio._context.destination); | ||
|  | 			initialized(); | ||
|  | 		}, function() { | ||
|  | 			error(); | ||
|  | 		}); | ||
|  | 	} | ||
|  | } |