Skip to main content

Browser Compatibility

AudioQ is designed for browser environments and uses the Web Audio API (HTMLAudioElement). Here's everything you need to know about browser support.

Supported Browsers

Desktop Browsers

BrowserMinimum VersionRelease DateSupport Level
Chrome51+June 2016✅ Full Support
Firefox54+June 2017✅ Full Support
Safari10+September 2016✅ Full Support
Edge15+April 2017✅ Full Support
Opera38+June 2016✅ Full Support

📱 Mobile Browsers

BrowserPlatformSupport LevelNotes
Chrome MobileAndroid 7+✅ Full SupportExcellent performance
Safari MobileiOS 10+✅ Full SupportEnhanced v1.13.0+ with Web Audio API fixes
Samsung InternetAndroid 7+✅ Full SupportBased on Chromium
Firefox MobileAndroid 7+✅ Full SupportGood performance

⚠️ Not Supported

  • Internet Explorer (lacks ES6 and modern audio APIs)
  • Node.js (server-side environments - no DOM/HTMLAudioElement)
  • Web Workers (no DOM access for audio elements)
  • Very old mobile browsers (Android < 7, iOS < 10)

🆕 iOS Web Audio API Improvements (v1.13.0+)

Version 1.13.0 includes enhanced iOS compatibility:

  • ✅ Fixed Volume Control Issues - Volume changes and transitions now work properly on all iOS browsers
  • ✅ Improved Web Audio API Integration - Better handling of iOS-specific audio constraints
  • ✅ Fallback Mechanisms - Automatic fallbacks for browsers with limited Web Audio API support
  • ✅ Better Performance - Optimized audio element management for iOS devices

Audio Format Fallbacks

Provide multiple audio formats for maximum compatibility:

import { queueAudio } from 'audioq';

async function playWithFallback(baseName: string) {
const formats = ['.mp3', '.ogg', '.wav'];

for (const format of formats) {
try {
await queueAudio(`${baseName}${format}`);
return; // Success - stop trying other formats
} catch (error) {
console.warn(`Failed to load ${baseName}${format}`);
}
}

console.error(`Could not load ${baseName} in any format`);
}

// Usage
await playWithFallback('./sounds/welcome');

Testing Browser Support

Manual Testing Script

<!DOCTYPE html>
<html>
<head>
<title>AudioQ Browser Test</title>
</head>
<body>
<h1>Browser Compatibility Test</h1>
<div id="results"></div>

<script type="module">
const results = document.getElementById('results');

async function runTests() {
const tests = [
{
name: 'HTMLAudioElement',
test: () => typeof Audio !== 'undefined'
},
{
name: 'Promises',
test: () => typeof Promise !== 'undefined'
},
{
name: 'ES6 Arrow Functions',
test: () => {
try {
new Function('const test = () => {};');
return true;
} catch (e) {
return false;
}
}
},
{
name: 'AudioQ Import',
test: async () => {
try {
const module = await import('audioq');
return typeof module.queueAudio === 'function';
} catch (e) {
return false;
}
}
}
];

for (const test of tests) {
try {
const result = await test.test();
results.innerHTML += `<p>✅ ${test.name}: ${result ? 'PASS' : 'FAIL'}</p>`;
} catch (error) {
results.innerHTML += `<p>❌ ${test.name}: ERROR - ${error.message}</p>`;
}
}
}

runTests();
</script>
</body>
</html>

Additional Resources


Need help with a specific browser issue? Check our troubleshooting guide or open an issue with your browser details!