@capgo/native-audio 8.2.11 → 8.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\nimport { AudioAsset } from './audio-asset';\nimport type { ConfigureOptions, PlayOnceOptions, PlayOnceResult, PreloadOptions } from './definitions';\nimport { NativeAudio } from './definitions';\n\nexport class NativeAudioWeb extends WebPlugin implements NativeAudio {\n private static readonly FILE_LOCATION: string = '';\n private static readonly AUDIO_ASSET_BY_ASSET_ID: Map<string, AudioAsset> = new Map<string, AudioAsset>();\n private static readonly playOnceAssets: Set<string> = new Set<string>();\n constructor() {\n super();\n }\n\n async resume(options: { assetId: string }): Promise<void> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n if (audio.paused) {\n return audio.play();\n }\n }\n\n async pause(options: { assetId: string }): Promise<void> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n return audio.pause();\n }\n\n async setCurrentTime(options: { assetId: string; time: number }): Promise<void> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n audio.currentTime = options.time;\n return;\n }\n\n async getCurrentTime(options: { assetId: string }): Promise<{ currentTime: number }> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n return { currentTime: audio.currentTime };\n }\n\n async getDuration(options: { assetId: string }): Promise<{ duration: number }> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n if (Number.isNaN(audio.duration)) {\n throw 'no duration available';\n }\n if (!Number.isFinite(audio.duration)) {\n throw 'duration not available => media resource is streaming';\n }\n return { duration: audio.duration };\n }\n\n async configure(options: ConfigureOptions): Promise<void> {\n throw `configure is not supported for web: ${JSON.stringify(options)}`;\n }\n\n async isPreloaded(options: PreloadOptions): Promise<{ found: boolean }> {\n try {\n return { found: !!this.getAudioAsset(options.assetId) };\n } catch (e) {\n return { found: false };\n }\n }\n\n async preload(options: PreloadOptions): Promise<void> {\n if (NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.has(options.assetId)) {\n throw 'AssetId already exists. Unload first if like to change!';\n }\n if (!options.assetPath?.length) {\n throw 'no assetPath provided';\n }\n if (!options.isUrl && !new RegExp('^/?' + NativeAudioWeb.FILE_LOCATION).test(options.assetPath)) {\n const slashPrefix: string = options.assetPath.startsWith('/') ? '' : '/';\n options.assetPath = `${NativeAudioWeb.FILE_LOCATION}${slashPrefix}${options.assetPath}`;\n }\n const audio: HTMLAudioElement = new Audio(options.assetPath);\n audio.autoplay = false;\n audio.loop = false;\n audio.preload = 'auto';\n if (options.volume) {\n audio.volume = options.volume;\n }\n NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.set(options.assetId, new AudioAsset(audio));\n }\n\n async playOnce(options: PlayOnceOptions): Promise<PlayOnceResult> {\n // Generate a unique temporary asset ID\n const assetId = `playOnce_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n NativeAudioWeb.playOnceAssets.add(assetId);\n\n const autoPlay = options.autoPlay !== false; // Default to true\n const deleteAfterPlay = options.deleteAfterPlay ?? false;\n\n try {\n // Preload the asset\n await this.preload({\n assetId,\n assetPath: options.assetPath,\n volume: options.volume,\n isUrl: options.isUrl,\n });\n\n // Set up automatic cleanup on completion\n const audio = this.getAudioAsset(assetId).audio;\n const cleanupHandler = async () => {\n try {\n // Unload the asset\n await this.unload({ assetId });\n NativeAudioWeb.playOnceAssets.delete(assetId);\n\n // Delete file if requested (Web can't actually delete files from disk)\n // This is a no-op on web, but we keep the interface consistent\n if (deleteAfterPlay) {\n console.warn('[NativeAudio] deleteAfterPlay is not supported on web platform. File deletion is ignored.');\n }\n } catch (error) {\n console.error('[NativeAudio] Error during playOnce cleanup:', error);\n }\n };\n\n audio.addEventListener('ended', cleanupHandler, { once: true });\n\n // Handle errors during playback - cleanup if play fails\n audio.addEventListener(\n 'error',\n () => {\n cleanupHandler().catch((error) => {\n console.error('[NativeAudio] Error during error cleanup:', error);\n });\n },\n { once: true },\n );\n\n // Auto-play if requested\n if (autoPlay) {\n await this.play({ assetId });\n }\n\n return { assetId };\n } catch (error) {\n // Cleanup on failure\n try {\n await this.unload({ assetId });\n NativeAudioWeb.playOnceAssets.delete(assetId);\n } catch {\n // Ignore cleanup errors\n }\n throw error;\n }\n }\n\n private onEnded(assetId: string): void {\n this.notifyListeners('complete', { assetId });\n }\n\n async play(options: { assetId: string; time?: number }): Promise<void> {\n const { assetId, time = 0 } = options;\n const audio = this.getAudioAsset(assetId).audio;\n await this.stop(options);\n audio.loop = false;\n audio.currentTime = time;\n audio.addEventListener('ended', () => this.onEnded(assetId), {\n once: true,\n });\n return audio.play();\n }\n\n async loop(options: { assetId: string }): Promise<void> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n await this.stop(options);\n audio.loop = true;\n return audio.play();\n }\n\n async stop(options: { assetId: string }): Promise<void> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n audio.pause();\n audio.loop = false;\n audio.currentTime = 0;\n }\n\n async unload(options: { assetId: string }): Promise<void> {\n await this.stop(options);\n NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.delete(options.assetId);\n }\n\n async setVolume(options: { assetId: string; volume: number }): Promise<void> {\n if (typeof options?.volume !== 'number') {\n throw 'no volume provided';\n }\n\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n audio.volume = options.volume;\n }\n\n async setRate(options: { assetId: string; rate: number }): Promise<void> {\n if (typeof options?.rate !== 'number') {\n throw 'no rate provided';\n }\n\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n audio.playbackRate = options.rate;\n }\n\n async isPlaying(options: { assetId: string }): Promise<{ isPlaying: boolean }> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n return { isPlaying: !audio.paused };\n }\n\n async clearCache(): Promise<void> {\n // Web audio doesn't have a persistent cache to clear\n return;\n }\n\n private getAudioAsset(assetId: string): AudioAsset {\n this.checkAssetId(assetId);\n\n if (!NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.has(assetId)) {\n throw `no asset for assetId \"${assetId}\" available. Call preload first!`;\n }\n\n return NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.get(assetId) as AudioAsset;\n }\n\n private checkAssetId(assetId: string): void {\n if (typeof assetId !== 'string') {\n throw 'assetId must be a string';\n }\n\n if (!assetId?.length) {\n throw 'no assetId provided';\n }\n }\n\n async getPluginVersion(): Promise<{ version: string }> {\n return { version: 'web' };\n }\n\n async deinitPlugin(): Promise<void> {\n // Stop and unload all audio assets\n for (const [assetId] of NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID) {\n await this.unload({ assetId });\n }\n return;\n }\n}\n\nconst NativeAudio = new NativeAudioWeb();\n\nexport { NativeAudio };\n"]}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\nimport { AudioAsset } from './audio-asset';\nimport type {\n Assets,\n AssetPauseOptions,\n AssetPlayOptions,\n AssetRate,\n AssetResumeOptions,\n AssetSetTime,\n AssetStopOptions,\n AssetVolume,\n ConfigureOptions,\n PlayOnceOptions,\n PlayOnceResult,\n PreloadOptions,\n} from './definitions';\nimport { NativeAudio } from './definitions';\n\ntype AudioAssetData = {\n fadeOut?: boolean;\n fadeOutStartTime?: number;\n fadeOutDuration?: number;\n fadeOutToStopTimer?: number;\n fadeInTimer?: number;\n startTimer?: number;\n volume?: number;\n volumeBeforePause?: number;\n};\n\nexport class NativeAudioWeb extends WebPlugin implements NativeAudio {\n private static readonly LOG_TAG: string = '[NativeAudioWeb]';\n private static readonly FILE_LOCATION: string = '';\n private static readonly DEFAULT_FADE_DURATION_SEC: number = 1;\n private static readonly CURRENT_TIME_UPDATE_INTERVAL: number = 100;\n\n private static readonly AUDIO_PRELOAD_OPTIONS_MAP: Map<string, PreloadOptions> = new Map<string, PreloadOptions>();\n private static readonly AUDIO_DATA_MAP: Map<string, AudioAssetData> = new Map<string, AudioAssetData>();\n private static readonly AUDIO_ASSET_BY_ASSET_ID: Map<string, AudioAsset> = new Map<string, AudioAsset>();\n private static readonly AUDIO_CONTEXT_MAP: Map<HTMLMediaElement, AudioContext> = new Map<\n HTMLMediaElement,\n AudioContext\n >();\n private static readonly MEDIA_ELEMENT_SOURCE_MAP: Map<HTMLMediaElement, MediaElementAudioSourceNode> = new Map<\n HTMLMediaElement,\n MediaElementAudioSourceNode\n >();\n private static readonly GAIN_NODE_MAP: Map<HTMLMediaElement, GainNode> = new Map<HTMLMediaElement, GainNode>();\n\n private static readonly playOnceAssets: Set<string> = new Set<string>();\n\n private debugMode = false;\n private currentTimeIntervals: Map<string, number> = new Map<string, number>();\n private readonly zeroVolume = 0.0001;\n\n constructor() {\n super();\n }\n\n async resume(options: AssetResumeOptions): Promise<void> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n const data = this.getAudioAssetData(options.assetId);\n const targetVolume = data.volumeBeforePause ?? data.volume ?? 1;\n\n if (options.fadeIn) {\n const fadeDuration = options.fadeInDuration || NativeAudioWeb.DEFAULT_FADE_DURATION_SEC;\n this.doFadeIn(audio, fadeDuration, targetVolume);\n } else if (audio.volume <= this.zeroVolume) {\n audio.volume = targetVolume;\n this.setGainNodeVolume(audio, targetVolume);\n }\n\n this.clearFadeOutToStopTimer(options.assetId);\n return this.doResume(options.assetId);\n }\n\n private async doResume(assetId: string): Promise<void> {\n const audio: HTMLAudioElement = this.getAudioAsset(assetId).audio;\n this.startCurrentTimeUpdates(assetId);\n if (audio.paused) {\n return audio.play();\n }\n }\n\n async pause(options: AssetPauseOptions): Promise<void> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n this.cancelGainNodeRamp(audio);\n\n const data = this.getAudioAssetData(options.assetId);\n data.volumeBeforePause = data.volume ?? audio.volume;\n this.setAudioAssetData(options.assetId, data);\n\n if (!audio.paused && options.fadeOut) {\n const fadeOutDuration = options.fadeOutDuration || NativeAudioWeb.DEFAULT_FADE_DURATION_SEC;\n this.doFadeOut(audio, fadeOutDuration);\n data.fadeOutToStopTimer = window.setTimeout(() => {\n this.doPause(options.assetId).catch(() => {\n // no-op\n });\n }, fadeOutDuration * 1000);\n this.setAudioAssetData(options.assetId, data);\n return;\n }\n\n return this.doPause(options.assetId);\n }\n\n private async doPause(assetId: string): Promise<void> {\n const audio: HTMLAudioElement = this.getAudioAsset(assetId).audio;\n this.clearFadeOutToStopTimer(assetId);\n this.stopCurrentTimeUpdates(assetId);\n audio.pause();\n }\n\n async setCurrentTime(options: AssetSetTime): Promise<void> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n audio.currentTime = options.time;\n }\n\n async getCurrentTime(options: Assets): Promise<{ currentTime: number }> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n return { currentTime: audio.currentTime };\n }\n\n async getDuration(options: Assets): Promise<{ duration: number }> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n if (Number.isNaN(audio.duration)) {\n throw 'no duration available';\n }\n if (!Number.isFinite(audio.duration)) {\n throw 'duration not available => media resource is streaming';\n }\n return { duration: audio.duration };\n }\n\n async setDebugMode(options: { enabled: boolean }): Promise<void> {\n this.debugMode = options.enabled;\n if (this.debugMode) {\n this.logInfo('Debug mode enabled');\n }\n }\n\n async configure(options: ConfigureOptions): Promise<void> {\n throw `configure is not supported for web: ${JSON.stringify(options)}`;\n }\n\n async isPreloaded(options: PreloadOptions): Promise<{ found: boolean }> {\n try {\n return { found: !!this.getAudioAsset(options.assetId) };\n } catch {\n return { found: false };\n }\n }\n\n async preload(options: PreloadOptions): Promise<void> {\n this.logInfo(`Preloading audio asset with options: ${JSON.stringify(options)}`);\n\n if (NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.has(options.assetId)) {\n throw 'AssetId already exists. Unload first if like to change!';\n }\n if (!options.assetPath?.length) {\n throw 'no assetPath provided';\n }\n\n NativeAudioWeb.AUDIO_PRELOAD_OPTIONS_MAP.set(options.assetId, options);\n\n await new Promise<void>((resolve, reject) => {\n if (!options.isUrl && !new RegExp('^/?' + NativeAudioWeb.FILE_LOCATION).test(options.assetPath)) {\n const slashPrefix: string = options.assetPath.startsWith('/') ? '' : '/';\n options.assetPath = `${NativeAudioWeb.FILE_LOCATION}${slashPrefix}${options.assetPath}`;\n }\n\n const audio: HTMLAudioElement = document.createElement('audio');\n audio.id = options.assetId;\n audio.crossOrigin = 'anonymous';\n audio.src = options.assetPath;\n audio.autoplay = false;\n audio.loop = false;\n audio.preload = 'metadata';\n\n audio.addEventListener('loadedmetadata', () => {\n resolve();\n });\n\n audio.addEventListener('error', (errEvt) => {\n this.logError(`Error loading audio file: ${options.assetPath}, error: ${String(errEvt)}`);\n reject('Error loading audio file');\n });\n\n const data = this.getAudioAssetData(options.assetId);\n if (typeof options.volume === 'number') {\n audio.volume = options.volume;\n data.volume = options.volume;\n } else {\n data.volume = audio.volume;\n }\n\n NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.set(options.assetId, new AudioAsset(audio));\n this.setAudioAssetData(options.assetId, data);\n this.setGainNodeVolume(audio, data.volume ?? 1);\n });\n }\n\n async playOnce(options: PlayOnceOptions): Promise<PlayOnceResult> {\n const assetId = `playOnce_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n NativeAudioWeb.playOnceAssets.add(assetId);\n\n const autoPlay = options.autoPlay !== false;\n const deleteAfterPlay = options.deleteAfterPlay ?? false;\n\n try {\n await this.preload({\n assetId,\n assetPath: options.assetPath,\n volume: options.volume,\n isUrl: options.isUrl,\n });\n\n const cleanupHandler = async () => {\n try {\n await this.unload({ assetId });\n NativeAudioWeb.playOnceAssets.delete(assetId);\n if (deleteAfterPlay) {\n console.warn('[NativeAudio] deleteAfterPlay is not supported on web platform. File deletion is ignored.');\n }\n } catch (error) {\n console.error('[NativeAudio] Error during playOnce cleanup:', error);\n }\n };\n\n if (autoPlay) {\n await this.doPlay({ assetId, volume: options.volume }, false);\n }\n\n const currentAudio = this.getAudioAsset(assetId).audio;\n currentAudio.addEventListener(\n 'ended',\n () => {\n cleanupHandler().catch((error) => {\n console.error('[NativeAudio] Error during ended cleanup:', error);\n });\n },\n { once: true },\n );\n\n currentAudio.addEventListener(\n 'error',\n () => {\n cleanupHandler().catch((error) => {\n console.error('[NativeAudio] Error during error cleanup:', error);\n });\n },\n { once: true },\n );\n\n return { assetId };\n } catch (error) {\n try {\n await this.unload({ assetId });\n NativeAudioWeb.playOnceAssets.delete(assetId);\n } catch {\n // Ignore cleanup errors\n }\n throw error;\n }\n }\n\n private onEnded(assetId: string): void {\n this.logDebug(`Playback ended for assetId: ${assetId}`);\n this.notifyListeners('complete', { assetId });\n }\n\n async play(options: AssetPlayOptions): Promise<void> {\n this.logInfo(`Playing audio asset with options: ${JSON.stringify(options)}`);\n\n this.clearFadeOutToStopTimer(options.assetId);\n\n const { delay = 0 } = options;\n if (delay > 0) {\n const data = this.getAudioAssetData(options.assetId);\n data.startTimer = window.setTimeout(() => {\n this.doPlay(options).catch((error) => {\n this.logError(`Delayed play failed: ${String(error)}`);\n });\n data.startTimer = undefined;\n this.setAudioAssetData(options.assetId, data);\n }, delay * 1000);\n this.setAudioAssetData(options.assetId, data);\n return;\n }\n\n await this.doPlay(options);\n }\n\n private async doPlay(options: AssetPlayOptions, recreateAudioElement = true): Promise<void> {\n const { assetId, time = 0 } = options;\n\n if (!NativeAudioWeb.AUDIO_PRELOAD_OPTIONS_MAP.has(assetId)) {\n throw `no asset for assetId \"${assetId}\" available. Call preload first!`;\n }\n\n if (recreateAudioElement) {\n const preloadOptions = NativeAudioWeb.AUDIO_PRELOAD_OPTIONS_MAP.get(assetId) as PreloadOptions;\n await this.unload({ assetId });\n await this.preload(preloadOptions);\n }\n\n const audio = this.getAudioAsset(assetId).audio;\n audio.id = assetId;\n audio.loop = false;\n audio.currentTime = time;\n audio.addEventListener('ended', () => this.onEnded(assetId), {\n once: true,\n });\n\n const data = this.getAudioAssetData(assetId);\n\n if (typeof options.volume === 'number') {\n audio.volume = options.volume;\n data.volume = options.volume;\n this.setGainNodeVolume(audio, options.volume);\n } else if (typeof data.volume !== 'number') {\n data.volume = audio.volume;\n }\n\n await audio.play();\n this.startCurrentTimeUpdates(assetId);\n\n if (options.fadeIn) {\n this.logDebug(`Fading in audio asset with assetId: ${assetId}`);\n const fadeDuration = options.fadeInDuration || NativeAudioWeb.DEFAULT_FADE_DURATION_SEC;\n this.doFadeIn(audio, fadeDuration);\n }\n\n if (options.fadeOut && !Number.isNaN(audio.duration) && Number.isFinite(audio.duration)) {\n this.logDebug(`Scheduling fade out for audio asset with assetId: ${assetId}`);\n const fadeOutDuration = options.fadeOutDuration || NativeAudioWeb.DEFAULT_FADE_DURATION_SEC;\n const fadeOutStartTime = options.fadeOutStartTime || audio.duration - fadeOutDuration;\n data.fadeOut = true;\n data.fadeOutStartTime = fadeOutStartTime;\n data.fadeOutDuration = fadeOutDuration;\n }\n\n this.setAudioAssetData(assetId, data);\n }\n\n private doFadeIn(audio: HTMLAudioElement, fadeDuration: number, targetVolume?: number): void {\n const data = this.getAudioAssetData(audio.id);\n this.setGainNodeVolume(audio, this.zeroVolume);\n const fadeToVolume = targetVolume ?? data.volume ?? 1;\n this.linearRampGainNodeVolume(audio, fadeToVolume, fadeDuration);\n data.fadeInTimer = window.setTimeout(() => {\n data.fadeInTimer = undefined;\n this.setAudioAssetData(audio.id, data);\n }, fadeDuration * 1000);\n this.setAudioAssetData(audio.id, data);\n }\n\n private doFadeOut(audio: HTMLAudioElement, fadeDuration: number): void {\n this.linearRampGainNodeVolume(audio, this.zeroVolume, fadeDuration);\n }\n\n async loop(options: Assets): Promise<void> {\n this.logInfo(`Looping audio asset with options: ${JSON.stringify(options)}`);\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n this.reset(audio);\n audio.loop = true;\n this.startCurrentTimeUpdates(options.assetId);\n return audio.play();\n }\n\n async stop(options: AssetStopOptions): Promise<void> {\n this.logInfo(`Stopping audio asset with options: ${JSON.stringify(options)}`);\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n const data = this.getAudioAssetData(options.assetId);\n\n this.clearFadeOutToStopTimer(options.assetId);\n this.cancelGainNodeRamp(audio);\n\n if (!audio.paused && options.fadeOut) {\n const fadeDuration = options.fadeOutDuration || NativeAudioWeb.DEFAULT_FADE_DURATION_SEC;\n this.doFadeOut(audio, fadeDuration);\n data.fadeOutToStopTimer = window.setTimeout(() => {\n this.doStop(audio, options);\n }, fadeDuration * 1000);\n this.setAudioAssetData(options.assetId, data);\n return;\n }\n\n this.doStop(audio, options);\n }\n\n private doStop(audio: HTMLAudioElement, options: AssetStopOptions): void {\n audio.pause();\n this.onEnded(options.assetId);\n this.reset(audio);\n }\n\n private reset(audio: HTMLAudioElement): void {\n audio.currentTime = 0;\n\n for (const [assetId, asset] of NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.entries()) {\n if (asset.audio === audio) {\n this.stopCurrentTimeUpdates(assetId);\n this.clearFadeOutToStopTimer(assetId);\n this.clearStartTimer(assetId);\n this.cancelGainNodeRamp(audio);\n const data = this.getAudioAssetData(assetId);\n const initialVolume = data.volume ?? 1;\n this.setGainNodeVolume(audio, initialVolume);\n this.setAudioAssetData(assetId, data);\n break;\n }\n }\n }\n\n private clearFadeOutToStopTimer(assetId: string): void {\n const data = this.getAudioAssetData(assetId);\n if (data.fadeOutToStopTimer) {\n clearTimeout(data.fadeOutToStopTimer);\n data.fadeOutToStopTimer = undefined;\n this.setAudioAssetData(assetId, data);\n }\n }\n\n private clearStartTimer(assetId: string): void {\n const data = this.getAudioAssetData(assetId);\n if (data.startTimer) {\n clearTimeout(data.startTimer);\n data.startTimer = undefined;\n this.setAudioAssetData(assetId, data);\n }\n }\n\n async unload(options: Assets): Promise<void> {\n this.logInfo(`Unloading audio asset with options: ${JSON.stringify(options)}`);\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n this.reset(audio);\n NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.delete(options.assetId);\n NativeAudioWeb.AUDIO_PRELOAD_OPTIONS_MAP.delete(options.assetId);\n NativeAudioWeb.AUDIO_DATA_MAP.delete(options.assetId);\n this.cleanupAudioContext(audio);\n }\n\n private cleanupAudioContext(audio: HTMLMediaElement): void {\n const gainNode = NativeAudioWeb.GAIN_NODE_MAP.get(audio);\n if (gainNode) {\n gainNode.disconnect();\n NativeAudioWeb.GAIN_NODE_MAP.delete(audio);\n }\n\n const sourceNode = NativeAudioWeb.MEDIA_ELEMENT_SOURCE_MAP.get(audio);\n if (sourceNode) {\n sourceNode.disconnect();\n NativeAudioWeb.MEDIA_ELEMENT_SOURCE_MAP.delete(audio);\n }\n\n const audioContext = NativeAudioWeb.AUDIO_CONTEXT_MAP.get(audio);\n if (audioContext) {\n audioContext.close().catch(() => {\n // no-op\n });\n NativeAudioWeb.AUDIO_CONTEXT_MAP.delete(audio);\n }\n }\n\n async setVolume(options: AssetVolume): Promise<void> {\n this.logInfo(`Setting volume for audio asset with options: ${JSON.stringify(options)}`);\n\n if (typeof options?.volume !== 'number') {\n throw 'no volume provided';\n }\n\n const { volume, duration = 0 } = options;\n\n const data = this.getAudioAssetData(options.assetId);\n data.volume = volume;\n this.setAudioAssetData(options.assetId, data);\n\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n this.cancelGainNodeRamp(audio);\n\n if (duration > 0) {\n this.exponentialRampGainNodeVolume(audio, volume, duration);\n return;\n }\n\n audio.volume = volume;\n this.setGainNodeVolume(audio, volume);\n }\n\n async setRate(options: AssetRate): Promise<void> {\n this.logInfo(`Setting playback rate for audio asset with options: ${JSON.stringify(options)}`);\n\n if (typeof options?.rate !== 'number') {\n throw 'no rate provided';\n }\n\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n audio.playbackRate = options.rate;\n }\n\n async isPlaying(options: Assets): Promise<{ isPlaying: boolean }> {\n const audio: HTMLAudioElement = this.getAudioAsset(options.assetId).audio;\n return { isPlaying: !audio.paused };\n }\n\n async clearCache(): Promise<void> {\n this.logWarning('clearCache is not supported for web. No cache to clear.');\n }\n\n private getAudioAsset(assetId: string): AudioAsset {\n this.checkAssetId(assetId);\n\n if (!NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.has(assetId)) {\n throw `no asset for assetId \"${assetId}\" available. Call preload first!`;\n }\n\n return NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.get(assetId) as AudioAsset;\n }\n\n private checkAssetId(assetId: string): void {\n if (typeof assetId !== 'string') {\n throw 'assetId must be a string';\n }\n\n if (!assetId?.length) {\n throw 'no assetId provided';\n }\n }\n\n private getOrCreateAudioContext(audio: HTMLMediaElement): AudioContext {\n if (NativeAudioWeb.AUDIO_CONTEXT_MAP.has(audio)) {\n return NativeAudioWeb.AUDIO_CONTEXT_MAP.get(audio) as AudioContext;\n }\n\n const audioContext = new AudioContext();\n NativeAudioWeb.AUDIO_CONTEXT_MAP.set(audio, audioContext);\n return audioContext;\n }\n\n private getOrCreateMediaElementSource(\n audioContext: AudioContext,\n audio: HTMLAudioElement,\n ): MediaElementAudioSourceNode {\n if (NativeAudioWeb.MEDIA_ELEMENT_SOURCE_MAP.has(audio)) {\n return NativeAudioWeb.MEDIA_ELEMENT_SOURCE_MAP.get(audio) as MediaElementAudioSourceNode;\n }\n\n const sourceNode = audioContext.createMediaElementSource(audio);\n NativeAudioWeb.MEDIA_ELEMENT_SOURCE_MAP.set(audio, sourceNode);\n return sourceNode;\n }\n\n private getOrCreateGainNode(audio: HTMLMediaElement, track: MediaElementAudioSourceNode): GainNode {\n const audioContext = this.getOrCreateAudioContext(audio);\n\n if (NativeAudioWeb.GAIN_NODE_MAP.has(audio)) {\n return NativeAudioWeb.GAIN_NODE_MAP.get(audio) as GainNode;\n }\n\n const gainNode = audioContext.createGain();\n track.connect(gainNode).connect(audioContext.destination);\n NativeAudioWeb.GAIN_NODE_MAP.set(audio, gainNode);\n return gainNode;\n }\n\n private setGainNodeVolume(audio: HTMLMediaElement, volume: number, time?: number): void {\n const audioContext = this.getOrCreateAudioContext(audio);\n const track = this.getOrCreateMediaElementSource(audioContext, audio as HTMLAudioElement);\n const gainNode = this.getOrCreateGainNode(audio, track);\n\n if (time !== undefined) {\n gainNode.gain.setValueAtTime(volume, time);\n } else {\n gainNode.gain.setValueAtTime(volume, audioContext.currentTime);\n }\n }\n\n private exponentialRampGainNodeVolume(audio: HTMLMediaElement, volume: number, duration: number): void {\n const audioContext = this.getOrCreateAudioContext(audio);\n const track = this.getOrCreateMediaElementSource(audioContext, audio as HTMLAudioElement);\n const gainNode = this.getOrCreateGainNode(audio, track);\n const adjustedVolume = volume < this.zeroVolume ? this.zeroVolume : volume;\n gainNode.gain.exponentialRampToValueAtTime(adjustedVolume, audioContext.currentTime + duration);\n }\n\n private linearRampGainNodeVolume(audio: HTMLMediaElement, volume: number, duration: number): void {\n const audioContext = this.getOrCreateAudioContext(audio);\n const track = this.getOrCreateMediaElementSource(audioContext, audio as HTMLAudioElement);\n const gainNode = this.getOrCreateGainNode(audio, track);\n gainNode.gain.linearRampToValueAtTime(volume, audioContext.currentTime + duration);\n }\n\n private cancelGainNodeRamp(audio: HTMLMediaElement): void {\n const gainNode = NativeAudioWeb.GAIN_NODE_MAP.get(audio);\n if (gainNode) {\n gainNode.gain.cancelScheduledValues(0);\n }\n }\n\n private startCurrentTimeUpdates(assetId: string): void {\n this.stopCurrentTimeUpdates(assetId);\n\n const audio = this.getAudioAsset(assetId).audio;\n const intervalId = window.setInterval(() => {\n if (!audio.paused) {\n const currentTime = Math.round(audio.currentTime * 10) / 10;\n this.notifyListeners('currentTime', { assetId, currentTime });\n this.logDebug(`Current time update for assetId: ${assetId}, currentTime: ${currentTime}`);\n\n const data = this.getAudioAssetData(assetId);\n if (data.fadeOut && typeof data.fadeOutStartTime === 'number' && currentTime >= data.fadeOutStartTime) {\n this.cancelGainNodeRamp(audio);\n const fadeOutDuration = data.fadeOutDuration ?? NativeAudioWeb.DEFAULT_FADE_DURATION_SEC;\n this.doFadeOut(audio, fadeOutDuration);\n data.fadeOut = false;\n this.setAudioAssetData(assetId, data);\n }\n } else {\n this.stopCurrentTimeUpdates(assetId);\n }\n }, NativeAudioWeb.CURRENT_TIME_UPDATE_INTERVAL);\n\n this.currentTimeIntervals.set(assetId, intervalId);\n }\n\n private stopCurrentTimeUpdates(assetId?: string): void {\n if (assetId) {\n const intervalId = this.currentTimeIntervals.get(assetId);\n if (intervalId) {\n clearInterval(intervalId);\n this.currentTimeIntervals.delete(assetId);\n }\n return;\n }\n\n for (const intervalId of this.currentTimeIntervals.values()) {\n clearInterval(intervalId);\n }\n this.currentTimeIntervals.clear();\n }\n\n private getAudioAssetData(assetId: string): AudioAssetData {\n return NativeAudioWeb.AUDIO_DATA_MAP.get(assetId) || {};\n }\n\n private setAudioAssetData(assetId: string, data: AudioAssetData): void {\n const currentData = NativeAudioWeb.AUDIO_DATA_MAP.get(assetId) || {};\n const newData = { ...currentData, ...data };\n NativeAudioWeb.AUDIO_DATA_MAP.set(assetId, newData);\n }\n\n private logError(message: string): void {\n if (!this.debugMode) return;\n console.error(`${NativeAudioWeb.LOG_TAG} Error: ${message}`);\n }\n\n private logWarning(message: string): void {\n if (!this.debugMode) return;\n console.warn(`${NativeAudioWeb.LOG_TAG} Warning: ${message}`);\n }\n\n private logInfo(message: string): void {\n if (!this.debugMode) return;\n console.info(`${NativeAudioWeb.LOG_TAG} Info: ${message}`);\n }\n\n private logDebug(message: string): void {\n if (!this.debugMode) return;\n console.debug(`${NativeAudioWeb.LOG_TAG} Debug: ${message}`);\n }\n\n async getPluginVersion(): Promise<{ version: string }> {\n return { version: 'web' };\n }\n\n async deinitPlugin(): Promise<void> {\n for (const [assetId] of NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID) {\n await this.unload({ assetId });\n }\n this.stopCurrentTimeUpdates();\n }\n}\n\nconst NativeAudio = new NativeAudioWeb();\n\nexport { NativeAudio };\n"]}