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
JavaScript
// 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