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();
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |