diff --git a/apps/stage-tamagotchi/src/preload/beat-sync.ts b/apps/stage-tamagotchi/src/preload/beat-sync.ts index ca537100c..02fbe5247 100644 --- a/apps/stage-tamagotchi/src/preload/beat-sync.ts +++ b/apps/stage-tamagotchi/src/preload/beat-sync.ts @@ -5,18 +5,23 @@ import { createDetector, StageEnvironment } from '@proj-airi/stage-shared' import { ipcRenderer } from 'electron' 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() { - return ipcRenderer.invoke('enable-loopback-audio') - }, - disableLoopbackAudio() { - return ipcRenderer.invoke('disable-loopback-audio') - }, + enableLoopbackAudio, + disableLoopbackAudio, }) detector.on('beat', () => signalBeat()) @@ -29,3 +34,9 @@ defineInvokeHandler(context, beatSyncToggle, async (enabled) => { detector.stop() } }) + +exposeWithCustomAPI({ + enableLoopbackAudio, + disableLoopbackAudio, + detector, +}) diff --git a/packages/stage-shared/src/beat-sync.ts b/packages/stage-shared/src/beat-sync.ts index 77aacc777..0671dd1ce 100644 --- a/packages/stage-shared/src/beat-sync.ts +++ b/packages/stage-shared/src/beat-sync.ts @@ -11,7 +11,7 @@ export interface DetectorEventMap { beat: (e: AnalyserBeatEvent) => void } -interface Detector { +export interface Detector { start: (createSource: (context: AudioContext) => Promise) => Promise updateParameters: (params: Partial) => void startScreenCapture: () => Promise @@ -24,7 +24,7 @@ interface Detector { readonly source: AudioNode | undefined } -type CreateDetectorOptions = | +export type CreateDetectorOptions = | { env: StageEnvironment.Tamagotchi enableLoopbackAudio: () => Promise