Loop silent audio to unblock iOS web audio in silent mode (#223)

This commit is contained in:
Huang Xin
2025-01-23 02:20:59 +01:00
committed by GitHub
parent 399f374dfa
commit ac03d7f817
2 changed files with 7 additions and 4 deletions
@@ -8,6 +8,7 @@ import { TTSController, SILENCE_DATA } from '@/services/tts';
import { getPopupPosition, Position } from '@/utils/sel';
import { eventDispatcher } from '@/utils/event';
import { parseSSMLLang } from '@/utils/ssml';
import { getOSPlatform } from '@/utils/misc';
import { throttle } from '@/utils/ui';
import { isPWA } from '@/services/environment';
import Popup from '@/components/Popup';
@@ -43,7 +44,7 @@ const TTSControl = () => {
const audio = document.createElement('audio');
audio.setAttribute('x-webkit-airplay', 'deny');
audio.preload = 'auto';
audio.loop = false;
audio.loop = true;
audio.src = SILENCE_DATA;
audio.play();
};
@@ -92,7 +93,9 @@ const TTSControl = () => {
setShowIndicator(true);
try {
unblockAudio();
if (getOSPlatform() === 'ios') {
unblockAudio();
}
const ttsController = new TTSController(view);
await ttsController.init();
await ttsController.initViewTTS();
+2 -2
View File
@@ -40,11 +40,11 @@ export const getUserLocale = (lang: string): string | undefined => {
export const getOSPlatform = () => {
const userAgent = navigator.userAgent.toLowerCase();
if (/iphone|ipad|ipod/.test(userAgent)) return 'ios';
if (userAgent.includes('android')) return 'android';
if (userAgent.includes('macintosh') || userAgent.includes('mac os x')) return 'macos';
if (userAgent.includes('windows nt')) return 'windows';
if (userAgent.includes('linux')) return 'linux';
if (/iphone|ipad|ipod/.test(userAgent)) return 'ios';
if (userAgent.includes('android')) return 'android';
return '';
};