/// console.log("HELLO WORLD"); module.paths.push("../../build/linux_x64"); module.paths.push("../../build/win32_64"); //LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5 const os = require('os'); //process.dlopen(module, '/usr/lib/x86_64-linux-gnu/libasan.so.5', // os.constants.dlopen.RTLD_NOW); import * as fs from "fs"; const original_require = require; require = (module => original_require(__dirname + "/../../../build/linux_x64/" + module + ".node")) as any; import * as handle from "teaclient_connection"; require = original_require; const connection_list = []; const connection = handle.spawn_server_connection(); const client_list = []; console.dir(handle); console.log("Query devices..."); console.log("Devices: %o", handle.audio.available_devices()); console.log("Current playback device: %o", handle.audio.playback.current_device()); //handle.audio.playback.set_device(14); //console.log("Current playback device: %o", handle.audio.playback.current_device()); const stream = handle.audio.playback.create_stream(); console.log("Own stream: %o", stream); for(let i = 0; i < 12; i++) { const recorder = handle.audio.record.create_recorder(); for(const device of handle.audio.available_devices()) { if(!device.input_supported) continue; if(device.name != "pulse") continue; console.log("Found pulse at %o", device.device_index); recorder.set_device(device.device_index, () => { recorder.start(flag => console.log("X: " + flag)); const consumer = recorder.create_consumer(); consumer.create_filter_threshold(2); }); break; } } /* -1 => default device */ const recorder = handle.audio.record.create_recorder(); console.log("Have device: %o", recorder); console.log("Device: %o", recorder.get_device()); if(recorder.get_device() == -1) { console.log("Looking for devices"); for(const device of handle.audio.available_devices()) { if(!device.input_supported) continue; if(device.name != "pulse") continue; console.log("Found pulse at %o", device.device_index); recorder.set_device(device.device_index, () => {}); } } console.log("Device: %o", recorder.get_device()); recorder.start(() => {}); console.log("Started: %o", recorder.started()); const consumer = recorder.create_consumer(); { const filter = consumer.create_filter_threshold(.5); filter.set_margin_frames(10); /* filter.set_analyze_filter(value => { console.log(value); }) */ } { //const filter = consumer.create_filter_vad(3); //console.log("Filter name: %s; Filter level: %d; Filter margin: %d", filter.get_name(), filter.get_level(), filter.get_margin_frames()); } { const consume = consumer.create_filter_state(); setTimeout(() => { console.log("Silence now!"); consume.set_consuming(true); setTimeout(() => { console.log("Speak now!"); consume.set_consuming(false); }, 1000); }, 1000); } setInterval(() => { if("gc" in global) { console.log("GC"); global.gc(); } }, 1000); let a_map = [consumer, recorder]; /* keep the object alive */ setTimeout(() => { connection.connected(); a_map = a_map.filter(e => true); }, 1000);