115 lines
3.3 KiB
TypeScript
115 lines
3.3 KiB
TypeScript
/// <reference path="../../exports/exports.d.ts" />
|
|
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);
|