import type { AudioKeysOf } from '../types/config'; /** play action에서만 사용할 수 있는 추가 속성 */ interface AudioPlayExtra { /** config.audios에서 등록한 오디오 키 (재생할 오디오 에셋) */ src: AudioKeysOf; /** 재생 속도입니다. 기본값: 1 */ speed?: number; /** 볼륨입니다. 0~1 사이 값. 기본값: 1 */ volume?: number; /** 반복 재생 여부입니다. 기본값: false */ repeat?: boolean; /** 재생을 시작할 시간(초)입니다. */ start?: number; /** 재생을 종료할 시간(초)입니다. */ end?: number; } /** play action 커맨드 */ export interface AudioPlayCmd extends AudioPlayExtra { /** 수행할 동작입니다. ('play': 재생) */ action: 'play'; /** 오디오의 식별자입니다. 같은 name의 오디오를 재생하면 크로스페이드됩니다. */ name: string; /** * 페이드인 지속 시간(ms)입니다. * - 이전 오디오가 있으면 duration만큼 페이드아웃 후 정지 * - 새 오디오를 duration만큼 페이드인 */ duration?: number; } /** pause action 커맨드 */ export interface AudioPauseCmd { /** 수행할 동작입니다. ('pause': 일시정지) */ action: 'pause'; /** 오디오의 식별자입니다. */ name: string; /** 페이드아웃 지속 시간(ms)입니다. */ duration?: number; } /** stop action 커맨드 */ export interface AudioStopCmd { /** 수행할 동작입니다. ('stop': 정지) */ action: 'stop'; /** 오디오의 식별자입니다. */ name: string; /** 페이드아웃 지속 시간(ms)입니다. */ duration?: number; } /** audio 커맨드 유니온 타입 */ export type AudioCmd = AudioPlayCmd | AudioPauseCmd | AudioStopCmd; export interface AudioEventPayload { name: string; src: string; } import type { SceneContext } from '../core/SceneContext'; export interface AudioHook { 'audio:play': (cmd: AudioPlayCmd, ctx: SceneContext) => AudioPlayCmd; 'audio:pause': (cmd: AudioPauseCmd, ctx: SceneContext) => AudioPauseCmd; 'audio:stop': (cmd: AudioStopCmd, ctx: SceneContext) => AudioStopCmd; /** 오디오 종료 시 방출. ctx는 발생 시점의 현재 활성 씬 기준. */ 'audio:end': (payload: AudioEventPayload, ctx: SceneContext) => AudioEventPayload; /** 오디오 루프 시 방출. ctx는 발생 시점의 현재 활성 씬 기준. */ 'audio:repeat': (payload: AudioEventPayload, ctx: SceneContext) => AudioEventPayload; } /** name별 오디오 재생 상태 스냅샷 */ export interface AudioTrack { /** config.audios 키 */ src: string; /** 현재 볼륨 (0~1) */ volume: number; /** 재생 속도 */ speed: number; /** 반복 여부 */ repeat: boolean; /** 재생 시작 위치(초) */ start: number; /** 재생 종료 위치(초) — 0이면 제한 없음 */ end: number; /** 일시정지 상태 여부 */ paused: boolean; } export interface AudioSchema { /** @internal name → AudioTrack 맵 */ _tracks: Record; } /** * 오디오 모듈. * - play: `config.audios`에 등록된 키로 오디오 재생 * - pause: 일시정지 * - stop: 정지 및 제거 * * 실제 오디오 재생/관리는 Novel 인스턴스의 `AudioManager`에 위임합니다. */ declare const audioModule: import("..").NovelModule, AudioSchema, AudioHook>; export default audioModule;