|
1 | 1 | import { StreamProcessorSrc } from './worklets/stream_processor'; |
2 | 2 | import LocalLoopback from './local-loopback'; |
3 | 3 | import { decodeAlaw, decodeUlaw } from './codecs/g711'; |
| 4 | +import { isMobile } from '../../utils'; |
4 | 5 |
|
5 | 6 | /** |
6 | 7 | * Audio format types supported by WavStreamPlayer |
@@ -60,6 +61,38 @@ export class WavStreamPlayer { |
60 | 61 |
|
61 | 62 | // Initialize volume (0 = muted, 1 = full volume) |
62 | 63 | this.volume = volume; |
| 64 | + |
| 65 | + // 在构造函数中就开始准备音频解锁,这样用户交互时就能立即解锁 |
| 66 | + if (isMobile()) { |
| 67 | + this.prepareAudioUnlock(); |
| 68 | + } |
| 69 | + } |
| 70 | + |
| 71 | + /** |
| 72 | + * 预先准备音频解锁,在构造函数中调用 |
| 73 | + * 这样当用户交互时就能立即解锁音频 |
| 74 | + * @private |
| 75 | + */ |
| 76 | + private prepareAudioUnlock(): void { |
| 77 | + // 立即开始监听交互事件,但不等待 |
| 78 | + const silentSound = document.createElement('audio'); |
| 79 | + silentSound.setAttribute('src', 'data:audio/mp3;base64,//MkxAAHiAICWABElBeKPL/RANb2w+yiT1g/gTok//lP/W/l3h8QO/OCdCqCW2Cw//MkxAQHkAIWUAhEmAQXWUOFW2dxPu//9mr60ElY5sseQ+xxesmHKtZr7bsqqX2L//MkxAgFwAYiQAhEAC2hq22d3///9FTV6tA36JdgBJoOGgc+7qvqej5EPomQ+RMn/QmSACAv7mcADf//MkxBQHAAYi8AhEAO193vt9KGOq+6qcT7hhfN5FTInmwk8RkqKImTM55pRQHQSq//MkxBsGkgoIAABHhTACIJLf99nVI///yuW1uBqWfEu7CgNPWGpUadBmZ////4sL//MkxCMHMAH9iABEmAsKioqKigsLCwtVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVV//MkxCkECAUYCAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV'); |
| 80 | + silentSound.volume = 0.001; |
| 81 | + |
| 82 | + const pageEvents = ['touchstart', 'touchend', 'mousedown', 'keydown']; |
| 83 | + const unlockAudio = async () => { |
| 84 | + try { |
| 85 | + await silentSound.play(); |
| 86 | + pageEvents.forEach(event => { |
| 87 | + document.removeEventListener(event, unlockAudio); |
| 88 | + }); |
| 89 | + } catch (e) { |
| 90 | + console.warn('[WavStreamPlayer] Audio context unlock failed', e); |
| 91 | + } |
| 92 | + } |
| 93 | + pageEvents.forEach(event => { |
| 94 | + document.addEventListener(event, unlockAudio); |
| 95 | + }); |
63 | 96 | } |
64 | 97 |
|
65 | 98 | /** |
|
0 commit comments