From 6cf9586e82ec174945c6fb96a3106d4b8c5a4d2d Mon Sep 17 00:00:00 2001 From: dhruv Date: Sun, 17 May 2026 18:30:16 +0530 Subject: [PATCH] latest_fix_read_live_files_from_/dev/shm/1.txt_file__to_lip_sink_with_external_tts --- package-lock.json | 23 +++++- package.json | 3 +- .../5/js/programatically_clicking_buttons.js | 76 +++++++++++++++++++ server copy.js | 11 +++ server.js | 39 +++++++++- 5 files changed, 149 insertions(+), 3 deletions(-) create mode 100644 server copy.js diff --git a/package-lock.json b/package-lock.json index 79b68878..371f5801 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "express": "^5.2.1" + "express": "^5.2.1", + "ws": "^8.20.1" } }, "node_modules/accepts": { @@ -773,6 +774,26 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 7d60a98e..698b743a 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "author": "", "license": "ISC", "dependencies": { - "express": "^5.2.1" + "express": "^5.2.1", + "ws": "^8.20.1" } } diff --git a/public/5/js/programatically_clicking_buttons.js b/public/5/js/programatically_clicking_buttons.js index c7cf3243..97b4a8a2 100644 --- a/public/5/js/programatically_clicking_buttons.js +++ b/public/5/js/programatically_clicking_buttons.js @@ -171,6 +171,82 @@ let interval = setInterval(() => { } +function real_lipsing(value){ + readShm('/handler1').then(value => console.log(value)); + +// let value = 0; + let slider = document.getElementById("paramMouthOpenYRange"); + // Set the slider value + slider.value = value.toFixed(2); + + // Trigger input event (if something listens to slider) + slider.dispatchEvent(new Event('input')); +} + + +async function readShm(endpoint) { + return new Promise((resolve) => { + const ws = new WebSocket(`ws://localhost:3000${endpoint}`); + ws.onmessage = (event) => { + resolve(event.data); + ws.close(); + }; + }); +} +// Usage: +// const value = await readShm('/handler1'); +// console.log(value); + + +async function real_lipsing_from_backend_web_socket(){ +let value = await readShm('/handler1'); +console.log(value); +value = parseInt(value); +if (isNaN(value)) { value = 0; alert('WebSocket returned non-integer, defaulting to 0'); } + +// let value = 0; + let slider = document.getElementById("paramMouthOpenYRange"); + // Set the slider value + slider.value = value.toFixed(2); + + // Trigger input event (if something listens to slider) + slider.dispatchEvent(new Event('input')); +} + + + + +function start_lipsync_websocket() { + const ws = new WebSocket(`ws://localhost:3000/handler1`); + + ws.onmessage = (event) => { + let value = parseFloat(event.data); + if (isNaN(value)) { value = 0.0; } + + let slider = document.getElementById("paramMouthOpenYRange"); + slider.value = value.toFixed(2); + slider.dispatchEvent(new Event('input')); + }; + + ws.onclose = () => { + console.log('WebSocket closed, reconnecting...'); + setTimeout(start_lipsync_websocket, 1000); + }; + + ws.onerror = (err) => { + console.log('WebSocket error', err); + ws.close(); + }; +} + +start_lipsync_websocket(); + + + + + + + async function drag_body_on_y_axis(delay){ diff --git a/server copy.js b/server copy.js new file mode 100644 index 00000000..e875b304 --- /dev/null +++ b/server copy.js @@ -0,0 +1,11 @@ +const express = require('express'); +const path = require('path'); + +const app = express(); +const PORT = 3000; + +app.use(express.static(path.join(__dirname, 'public'))); + +app.listen(PORT, () => { + console.log(`Server running at http://localhost:${PORT}`); +}); \ No newline at end of file diff --git a/server.js b/server.js index e875b304..c591bf68 100644 --- a/server.js +++ b/server.js @@ -1,11 +1,48 @@ const express = require('express'); const path = require('path'); +const http = require('http'); +const WebSocket = require('ws'); +const fs = require('fs'); const app = express(); const PORT = 3000; app.use(express.static(path.join(__dirname, 'public'))); -app.listen(PORT, () => { +const server = http.createServer(app); +const wss = new WebSocket.Server({ server }); + +wss.on('connection', (ws, req) => { + const endpoint = req.url; + + if (endpoint === '/handler1') { + const interval = setInterval(() => { + try { + const data = fs.readFileSync('/dev/shm/1.txt', 'utf8').trim(); + ws.send(data); + } catch (e) { + ws.send('0'); + } + }, 50); // sends every 50ms = 20 times per second + + ws.on('close', () => { + clearInterval(interval); // cleanup when client disconnects + }); + } + + // if (endpoint === '/handler2') { + // const interval = setInterval(() => { + // try { + // const data = fs.readFileSync('/dev/shm/2.txt', 'utf8').trim(); + // ws.send(data); + // } catch (e) { + // ws.send('0'); + // } + // }, 50); + // ws.on('close', () => clearInterval(interval)); + // } +}); + +server.listen(PORT, () => { console.log(`Server running at http://localhost:${PORT}`); }); \ No newline at end of file