/** * Keeps track of the `` a game mounts itself, so the one {@link GameProvider} mounts on * its behalf can stand down. * * Two mounted instances are not harmless: each one builds its own {@link AudioLoader}, hence its own * `AudioContext` and its own copy of every decoded buffer, and every sound is heard twice. Games have been * mounting the component by hand for a long time, and the framework now mounts it for the ones that never * did — so both have to coexist without ever playing together. * * The count is a module-level value rather than a context because the two instances are not on the same * branch: the game's is a descendant of the provider's, and a descendant cannot tell an ancestor it exists * through React state alone. */ /** * Declare that a game mounted `` itself. Call it from a layout effect: those run * bottom-up before any passive effect, so the count is already right when the provider's instance decides * whether to play. * * @returns the function to call on unmount */ export declare const registerExplicitSounds: () => (() => void); /** Subscribe to changes, for `useSyncExternalStore`. */ export declare const subscribeToExplicitSounds: (listener: () => void) => (() => void); /** Whether a game mounted `` itself. */ export declare const hasExplicitSounds: () => boolean;