main
reng 4 months ago
parent e627a7e5d8
commit e364c0dbb6
  1. 29
      vite/public/cuelist_demo2.json
  2. 14
      vite/src/pages/flow_free.jsx
  3. 11
      vite/src/util/osc.js

@ -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,

@ -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;
}

@ -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}`);

Loading…
Cancel
Save