UNPKG

z-web-audio-stream

Version:

iOS Safari-safe Web Audio streaming with separated download/storage optimization, instant playback, and memory management

55 lines 2.49 kB
// web-audio-stream - iOS Safari-safe Web Audio streaming // Fixes pitch/speed issues and prevents page reloads on iOS Safari import { WebAudioManager, getWebAudioManager } from './WebAudioManager.js'; export { WebAudioManager, getWebAudioManager } from './WebAudioManager.js'; export { AudioChunkStore } from './AudioChunkStore.js'; export { DownloadManager } from './DownloadManager.js'; export { StreamingAssembler } from './StreamingAssembler.js'; // Utility functions for iOS Safari detection export function isIOSSafari() { if (typeof navigator === 'undefined') return false; const userAgent = navigator.userAgent; const isIOS = /iPad|iPhone|iPod/.test(userAgent); const isSafari = /Safari/.test(userAgent) && !/Chrome|CriOS|FxiOS|EdgiOS/.test(userAgent); return isIOS && isSafari; } // Quick setup function for basic usage export async function setupWebAudio(options = {}) { const manager = getWebAudioManager(options); await manager.initialize(); return manager; } // Quick setup function optimized for instant playback with separated download/storage export async function setupInstantAudio(options = {}) { const instantConfig = { downloadStrategy: { initialChunkSize: options.downloadChunkSize || 256 * 1024, // 256KB downloads standardChunkSize: options.downloadChunkSize || 512 * 1024, // 512KB subsequent downloads maxConcurrentDownloads: 4, priorityFirstChunk: true, adaptiveChunkSizing: true }, storageChunkSize: options.storageChunkSize || 2 * 1024 * 1024, // 2MB storage chunks playbackChunkSize: options.playbackChunkSize || 384 * 1024, // 384KB playback chunk maxInitialWaitTime: options.maxInitialWaitTime || 500, strategy: 'always', enablePerformanceLogging: options.enablePerformanceLogging || false }; const manager = getWebAudioManager({ workletPath: options.workletPath, enableCache: options.enableCache, enableInstantPlayback: true, instantPlaybackConfig: instantConfig, obfuscationKey: options.obfuscationKey, onTimeUpdate: options.onTimeUpdate, onEnded: options.onEnded, onError: options.onError, onProgressiveLoadingStatus: options.onProgressiveLoadingStatus }); await manager.initialize(); return manager; } // Re-export for convenience export { WebAudioManager as default }; //# sourceMappingURL=index.js.map