From bb23e7ca7edf9ac1b0ba52b20b478377d394e78e Mon Sep 17 00:00:00 2001 From: Makito Date: Sat, 29 Nov 2025 19:34:23 +0900 Subject: [PATCH] fix(stage-tamagotchi): move beat-sync code from preload to renderer --- .../stage-tamagotchi/src/preload/beat-sync.ts | 43 +------------------ .../src/renderer/beat-sync.html | 1 + .../src/renderer/beat-sync.main.ts | 39 +++++++++++++++++ 3 files changed, 42 insertions(+), 41 deletions(-) create mode 100644 apps/stage-tamagotchi/src/renderer/beat-sync.main.ts diff --git a/apps/stage-tamagotchi/src/preload/beat-sync.ts b/apps/stage-tamagotchi/src/preload/beat-sync.ts index 02fbe5247..ebaf15783 100644 --- a/apps/stage-tamagotchi/src/preload/beat-sync.ts +++ b/apps/stage-tamagotchi/src/preload/beat-sync.ts @@ -1,42 +1,3 @@ -import { electronAPI } from '@electron-toolkit/preload' -import { defineInvoke, defineInvokeHandler } from '@moeru/eventa' -import { createContext } from '@moeru/eventa/adapters/electron/renderer' -import { createDetector, StageEnvironment } from '@proj-airi/stage-shared' -import { ipcRenderer } from 'electron' +import { expose } from './shared' -import { beatSyncSignalBeat, beatSyncToggle } from '../shared/eventa' -import { exposeWithCustomAPI } from './shared' - -const context = createContext(electronAPI.ipcRenderer).context -const signalBeat = defineInvoke(context, beatSyncSignalBeat) - -function enableLoopbackAudio() { - return ipcRenderer.invoke('enable-loopback-audio') -} - -function disableLoopbackAudio() { - return ipcRenderer.invoke('disable-loopback-audio') -} - -const detector = createDetector({ - env: StageEnvironment.Tamagotchi, - enableLoopbackAudio, - disableLoopbackAudio, -}) - -detector.on('beat', () => signalBeat()) - -defineInvokeHandler(context, beatSyncToggle, async (enabled) => { - if (enabled) { - detector.startScreenCapture() - } - else { - detector.stop() - } -}) - -exposeWithCustomAPI({ - enableLoopbackAudio, - disableLoopbackAudio, - detector, -}) +expose() diff --git a/apps/stage-tamagotchi/src/renderer/beat-sync.html b/apps/stage-tamagotchi/src/renderer/beat-sync.html index ba0964b21..a6184c7c3 100644 --- a/apps/stage-tamagotchi/src/renderer/beat-sync.html +++ b/apps/stage-tamagotchi/src/renderer/beat-sync.html @@ -27,5 +27,6 @@
Open the DevTools to troubleshoot BeatSync
+ diff --git a/apps/stage-tamagotchi/src/renderer/beat-sync.main.ts b/apps/stage-tamagotchi/src/renderer/beat-sync.main.ts new file mode 100644 index 000000000..43b601683 --- /dev/null +++ b/apps/stage-tamagotchi/src/renderer/beat-sync.main.ts @@ -0,0 +1,39 @@ +import { defineInvoke, defineInvokeHandler } from '@moeru/eventa' +import { createContext } from '@moeru/eventa/adapters/electron/renderer' +import { createDetector, StageEnvironment } from '@proj-airi/stage-shared' + +import { beatSyncSignalBeat, beatSyncToggle } from '../shared/eventa' + +const { ipcRenderer } = window.electron + +const context = createContext(ipcRenderer).context +const signalBeat = defineInvoke(context, beatSyncSignalBeat) + +function enableLoopbackAudio() { + // electron-audio-loopback currently registers this handler internally + return ipcRenderer.invoke('enable-loopback-audio') +} + +function disableLoopbackAudio() { + // electron-audio-loopback currently registers this handler internally + return ipcRenderer.invoke('disable-loopback-audio') +} + +const detector = createDetector({ + env: StageEnvironment.Tamagotchi, + enableLoopbackAudio, + disableLoopbackAudio, +}) + +detector.on('beat', () => signalBeat()) + +defineInvokeHandler(context, beatSyncToggle, async (enabled) => { + if (enabled) { + detector.startScreenCapture() + } + else { + detector.stop() + } +}) + +detector.startScreenCapture()