UNPKG

mstf-kit

Version:

一个现代化的 JavaScript/TypeScript 工具库,提供了丰富的常用工具函数

150 lines (149 loc) 4.19 kB
/** * 音频播放器工具 * 支持背景播放和UI渲染模式 */ /** * Vue3 ref类型 (简化版) */ interface Ref<T> { value: T; } /** * 播放器状态 */ export type PlayerState = 'idle' | 'loading' | 'playing' | 'paused' | 'ended' | 'error' | 'destroyed'; /** * 音频播放器选项 */ export interface AudioPlayerOptions { /** * 是否渲染UI界面 * - true: 创建播放器UI并渲染到指定容器 * - false: 仅背景播放,不创建UI (默认) */ renderUI?: boolean; /** * 播放器容器元素、选择器或Vue3 ref * 仅当 renderUI 为 true 时有效 */ container?: HTMLElement | string | Ref<HTMLElement>; /** 播放器宽度 */ width?: string; /** 播放器高度 */ height?: string; /** * 播放器主题 * - 'default': 默认主题 * - 'dark': 暗色主题 * - 'minimal': 简约主题 */ theme?: 'default' | 'dark' | 'minimal'; /** * 是否显示音频可视化 * 仅当 renderUI 为 true 时有效 */ showVisualization?: boolean; /** * 可视化类型 * - 'waveform': 波形图 * - 'bars': 频谱柱状图 * - 'circle': 圆形频谱图 */ visualizationType?: 'waveform' | 'bars' | 'circle'; /** * 是否自动播放 * 注意:现代浏览器可能会阻止自动播放 */ autoplay?: boolean; /** 是否循环播放 */ loop?: boolean; /** 播放速率 (0.5-2.0) */ playbackRate?: number; /** 初始音量 (0-1) */ volume?: number; /** 指定音频上下文采样率 (Hz) */ sampleRate?: number; /** 播放开始回调 */ onPlay?: () => void; /** 播放暂停回调 */ onPause?: () => void; /** 播放结束回调 */ onEnded?: () => void; /** 播放进度回调 */ onTimeUpdate?: (currentTime: number, duration: number) => void; /** 音量变化回调 */ onVolumeChange?: (volume: number, muted: boolean) => void; /** 错误回调 */ onError?: (error: Error) => void; } /** * 音频播放器接口 */ export interface AudioPlayer { /** 加载音频 */ load(source: string | Blob | File): Promise<void>; /** 播放 */ play(): Promise<void>; /** 暂停 */ pause(): void; /** 停止播放(重置到开始) */ stop(): void; /** 跳转到指定时间(秒) */ seek(time: number): void; /** 设置音量 (0-1) */ setVolume(volume: number): void; /** 设置播放速率 (0.5-2.0) */ setPlaybackRate(rate: number): void; /** 静音/取消静音 */ toggleMute(): void; /** 获取当前播放状态 */ getState(): PlayerState; /** 获取当前播放时间(秒) */ getCurrentTime(): number; /** 获取音频总时长(秒) */ getDuration(): number; /** 获取音量 (0-1) */ getVolume(): number; /** 是否静音 */ isMuted(): boolean; /** 获取播放进度 (0-1) */ getProgress(): number; /** 是否正在播放 */ isPlaying(): boolean; /** 销毁播放器,释放资源 */ destroy(): void; } /** * 创建音频播放器 * @param options 播放器选项 * @returns 音频播放器对象 * @example * ```typescript * // 创建背景播放器(无UI) * const backgroundPlayer = createAudioPlayer(); * await backgroundPlayer.load('https://example.com/audio.mp3'); * await backgroundPlayer.play(); * * // 创建带UI的播放器 * const uiPlayer = createAudioPlayer({ * renderUI: true, * container: '#player-container', * theme: 'dark', * showVisualization: true, * visualizationType: 'bars' * }); * * await uiPlayer.load(audioBlob); * uiPlayer.setVolume(0.8); * await uiPlayer.play(); * ``` */ export declare function createAudioPlayer(options?: AudioPlayerOptions): AudioPlayer; /** * 简易播放音频Blob的方法(仅背景播放) * @param blob 音频Blob对象 * @param options 播放选项 * @returns 音频播放器对象 */ export declare function playAudio(blob: Blob | string, options?: Partial<Pick<AudioPlayerOptions, 'autoplay' | 'loop' | 'volume' | 'onEnded'>>): Promise<AudioPlayer>; export {};