add osc callback

main
reng 3 months ago
parent df0cef64f3
commit 24de22ef83
  1. 9
      vite/src/comps/numpad.jsx
  2. 4
      vite/src/comps/timer.jsx
  3. 23
      vite/src/pages/flow_free.jsx
  4. 8
      vite/src/util/osc.js

@ -1,4 +1,5 @@
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import { OSC_ADDRESS, sendOscStatus } from "../util/osc";
export const NUMPAD_TYPE={ export const NUMPAD_TYPE={
@ -20,7 +21,7 @@ const TMP_MAP_KEY={
7:9,*/ 7:9,*/
} }
export default function NumPad({onSend, disabled, type}){ export default function NumPad({onSend, disabled, type, clientId}){
const [input, _setInput]=useState(); const [input, _setInput]=useState();
const refInput=useRef(); const refInput=useRef();
@ -102,6 +103,12 @@ export default function NumPad({onSend, disabled, type}){
} }
useEffect(()=>{
if(input?.length>0)
sendOscStatus(OSC_ADDRESS.CLIENT_INPUT, `${clientId}#${input}`); // Send current input via OSC
},[input]);
useEffect(() => { useEffect(() => {
refType.current = type; // Update the type reference refType.current = type; // Update the type reference

@ -1,8 +1,9 @@
import { useEffect, useState, useRef, forwardRef, useImperativeHandle, } from "react" import { useEffect, useState, useRef, forwardRef, useImperativeHandle, } from "react"
import { OSC_ADDRESS, sendOscStatus } from "../util/osc";
const Update_Interval = 1000; // 1 second const Update_Interval = 1000; // 1 second
export const Countdown=forwardRef(({time, callback, auto, ...props}, ref)=>{ export const Countdown=forwardRef(({time, callback, auto,clientId, ...props}, ref)=>{
const refTime = useRef(time); const refTime = useRef(time);
@ -35,6 +36,7 @@ export const Countdown=forwardRef(({time, callback, auto, ...props}, ref)=>{
} }
if(refDisplay.current) refDisplay.current.innerText = (refTime.current/1000).toFixed(0); if(refDisplay.current) refDisplay.current.innerText = (refTime.current/1000).toFixed(0);
sendOscStatus(OSC_ADDRESS.CLIENT_DURATION, `${clientId}#${(refTime.current/1000).toFixed(0)}`); // send remaining time in seconds via OSC
}, Update_Interval); }, Update_Interval);

@ -69,6 +69,7 @@ export function FreeFlow(){
const refContainer=useRef(); const refContainer=useRef();
const refCurrentCue= useRef(null); const refCurrentCue= useRef(null);
const refData=useRef(data);
const { history, status, reset, sendMessage, setStatus, audioOutput, setAudioOutput, stop:stopChat, const { history, status, reset, sendMessage, setStatus, audioOutput, setAudioOutput, stop:stopChat,
audioUrl }=useChat(); audioUrl }=useChat();
@ -95,15 +96,18 @@ export function FreeFlow(){
console.log('onOsc', payload); console.log('onOsc', payload);
const address=payload.addr; const address=payload.addr;
const message=payload.args[0]; const message=payload.args[0];
const params=message.split('#');
switch(address){ switch(address){
case '/playcue': case OSC_ADDRESS.PLAY_CUE:
// playCue(cuelist.find(c => c.id === message)); if(params[0]=='all' || params[0]==refData.current?.id)
setNextCue(()=>message); setNextCue(()=>params[1]);
break; break;
case '/stopcue': case OSC_ADDRESS.STOP_CUE:
onStop(); if(params[0]=='all' || params[0]==refData.current?.id)
onStop();
break; break;
} }
// Handle OSC messages here // Handle OSC messages here
@ -299,7 +303,7 @@ export function FreeFlow(){
sendOsc(OSC_ADDRESS.COUNTDOWN, '0'); // Reset countdown for non-chat cues sendOsc(OSC_ADDRESS.COUNTDOWN, '0'); // Reset countdown for non-chat cues
} }
sendOscStatus(`${data.id}#playcue#${cue.id}`); sendOscStatus(OSC_ADDRESS.CLIENT_STATUS,`${data.id}#playcue#${cue.id}`);
console.log('~~~~ clear pause timer'); console.log('~~~~ clear pause timer');
if(refPauseTimer.current) clearTimeout(refPauseTimer.current); if(refPauseTimer.current) clearTimeout(refPauseTimer.current);
@ -356,7 +360,7 @@ export function FreeFlow(){
resetTranscript(); // Reset transcript after cue ends resetTranscript(); // Reset transcript after cue ends
sendOscStatus(`${data.id}#endcue#${cue.id}`); sendOscStatus(OSC_ADDRESS.CLIENT_STATUS, `${data.id}#endcue#${cue.id}`);
if(cue.auto) { if(cue.auto) {
playCue(cuelist.find(c => c.id === cue.nextcue)); playCue(cuelist.find(c => c.id === cue.nextcue));
@ -541,6 +545,8 @@ export function FreeFlow(){
if(refPauseTimer.current) clearTimeout(refPauseTimer.current); if(refPauseTimer.current) clearTimeout(refPauseTimer.current);
refSpeechPaused.current=false; refSpeechPaused.current=false;
} }
sendOscStatus(OSC_ADDRESS.CLIENT_INPUT, `${data.id}#${transcript}`); // Send current input via OSC
} }
},[transcript]); },[transcript]);
@ -634,13 +640,14 @@ export function FreeFlow(){
<div className="bg-gray-100 text-4xl font-bold mb-4 flex justify-center items-center"> <div className="bg-gray-100 text-4xl font-bold mb-4 flex justify-center items-center">
{refCurrentCue.current?.name} {refCurrentCue.current?.name}
</div> </div>
<Countdown ref={refTimer} /> <Countdown ref={refTimer} clientId={data.id}/>
<button className="!bg-red-300" onClick={onStop}>Stop</button> <button className="!bg-red-300" onClick={onStop}>Stop</button>
{/* <button onClick={saveImage}>Save image</button> */} {/* <button onClick={saveImage}>Save image</button> */}
<NumPad onSend={onNumpad} <NumPad onSend={onNumpad}
disabled={currentCue?.callback !== 'numpad'} disabled={currentCue?.callback !== 'numpad'}
type={currentCue?.numpad_type} type={currentCue?.numpad_type}
clientId={data.id}
/> />
<Light ref={refLight} /> <Light ref={refLight} />
<VoiceAnalysis/> <VoiceAnalysis/>

@ -20,6 +20,10 @@ export const OSC_ADDRESS={
CLIENT_STATUS:'/client', CLIENT_STATUS:'/client',
CLIENT_INPUT:'/client_input', CLIENT_INPUT:'/client_input',
CLIENT_DURATION:'/client_duration',
PLAY_CUE:'/playcue',
STOP_CUE:'/stopcue',
} }
@ -76,7 +80,7 @@ export function onOscMessageReceived(callback) {
} }
} }
export async function sendOscStatus(message) { export async function sendOscStatus(key, message) {
if(message === undefined || message === null) { if(message === undefined || message === null) {
console.warn('sendOscStatus: message is empty, skipping'); console.warn('sendOscStatus: message is empty, skipping');
@ -89,7 +93,7 @@ export async function sendOscStatus(message) {
try{ try{
console.log(`Sending OSC Status:${message}`); console.log(`Sending OSC Status:${message}`);
await invoke('send_osc_message', { await invoke('send_osc_message', {
key: OSC_ADDRESS.CLIENT_STATUS, key: key,
message: message.toString(), message: message.toString(),
host:`0.0.0.0:0`, host:`0.0.0.0:0`,
target: '192.168.234.255:7000', target: '192.168.234.255:7000',

Loading…
Cancel
Save