diff --git a/vite/public/cuelist_demo2.json b/vite/public/cuelist_demo2.json index 315bf67..be3bed6 100644 --- a/vite/public/cuelist_demo2.json +++ b/vite/public/cuelist_demo2.json @@ -37,16 +37,18 @@ "audioFile": "assets/ai/ai-01.mp3", "nextcue": 4.01, "callback":"numpad", - "numpad_type":"userid" + "numpad_type":"userid", + "hint":"輸入兩位數號碼\n輸入完成送出,請按井字\n取消輸入,請按米字" }, { "id": 4.01, "name": "Q4.01", "type": "phone", "description": "撥接音效", - "auto": false, + "auto": true, "audioFile": "assets/sfx/sfx-03.mp3", - "nextcue": 4.1 + "nextcue": 4.1, + "hint":"輸入完成" }, { "id": 4.1, @@ -112,7 +114,7 @@ "description": "電話將自動接通", "audioFile": "assets/ai/ai-05.mp3", "auto": true, - "nextcue": 4.51 + "nextcue": 4.51 }, { "id": 4.51, @@ -121,7 +123,8 @@ "description": "接通音效", "audioFile": "assets/sfx/sfx-07.mp3", "auto": true, - "nextcue": 5.1 + "nextcue": 5.1, + "hint":"電話已接通,請留言" }, { "id": 5.1, @@ -139,7 +142,8 @@ "description": "結束逼", "auto": true, "audioFile": "assets/sfx/sfx-08.mp3", - "nextcue": 5.2 + "nextcue": 5.2, + "hint":"通話結束" }, { "id": 5.2, @@ -167,12 +171,9 @@ "9": { "nextcue": 5.5, "description": "刪除" - }, - "default": { - "nextcue": 5.4, - "description": "保留" } - } + }, + "hint":"保留,請按1\n刪除,請按9\n確定,請按 #" }, { "id": 5.4, @@ -183,7 +184,8 @@ "nextcue": 6, "audioFile": "assets/ai/ai-07.mp3", "callback":"numpad", - "numpad_type":"password" + "numpad_type":"password", + "hint":"請輸入三位數密碼\n確定輸入後,請按#" }, { "id": 5.5, @@ -192,7 +194,8 @@ "description": "刪除", "auto": true, "nextcue": 6, - "audioFile": "assets/ai/ai-08.mp3" + "audioFile": "assets/ai/ai-08.mp3", + "callback":"discard" }, { "id": 6, diff --git a/vite/src/pages/flow_free.jsx b/vite/src/pages/flow_free.jsx index c7f4a1e..f1e6554 100644 --- a/vite/src/pages/flow_free.jsx +++ b/vite/src/pages/flow_free.jsx @@ -87,6 +87,7 @@ export function FreeFlow(){ setSummary(null); reset(); + sendOsc(OSC_ADDRESS.CHOICE, 'reset'); } function playAudio(url){ @@ -255,6 +256,7 @@ export function FreeFlow(){ sendOsc(OSC_ADDRESS.STATUS, cue.status); // Send OSC status message if(cue.status=='reset') { refLight.current.set(1); + resetData(); } } if(cue.type=='chat' || cue.type=='user_input') { @@ -286,6 +288,16 @@ export function FreeFlow(){ uploadHistory(history); // Save chat history when cue ends } + if(cue.callback==OSC_ADDRESS.DISCARD) { + sendOsc(OSC_ADDRESS.CHOICE, OSC_ADDRESS.DISCARD); // Send OSC discard message + setPassword(); + } + + if(cue.hint!=null){ + sendOsc(OSC_ADDRESS.HINT, cue.hint); // Send OSC hint message + }else{ + sendOsc(OSC_ADDRESS.HINT, ''); // Clear hint message + } refAudio.current?.pause(); // Pause any playing audio console.log('onCueEnd:', cue.id); @@ -330,6 +342,8 @@ export function FreeFlow(){ break; case NUMPAD_TYPE.PASSWORD: setPassword(()=>mess); + sendOsc(OSC_ADDRESS.PASSWORD, mess); // Send OSC password message + sendOsc(OSC_ADDRESS.CHOICE, OSC_ADDRESS.SAVE); // Send OSC save choice message break; } diff --git a/vite/src/util/osc.js b/vite/src/util/osc.js index 249e43d..869de3c 100644 --- a/vite/src/util/osc.js +++ b/vite/src/util/osc.js @@ -11,18 +11,23 @@ export const OSC_ADDRESS={ SUMMARY: '/summary', PROMPT: '/prompt', EXPORT: '/export', - SAVE: '/save', - DISCARD: '/discard', + CHOICE:'/choice', + SAVE: 'save', + DISCARD: 'discard', PASSWORD: '/password', + HINT:'/hint', } export async function sendOsc(key, message){ - if(message === undefined || message === null || message === '') { + if(message === undefined || message === null) { console.warn('sendOsc: message is empty, skipping'); return; } + if(key!=OSC_ADDRESS.HINT && message === '') { + return; + } try{ console.log(`Sending OSC message: ${key} -> ${message}`);