/* Novel Audio Player v3 - MP3 via Amazon Polly */ (function(){ var btn = document.getElementById('ml-tts-btn'); if (!btn) return; var audioMap = { 'silent-awakening-ch1': 'zh_ch1.mp3', 'silent-awakening-ch2': 'zh_ch2.mp3', 'silent-awakening-ch3': 'zh_ch3.mp3', 'silent-awakening-ch4': 'zh_ch4.mp3', 'silent-awakening-ch5': 'zh_ch5.mp3', 'silent-awakening-ch6': 'zh_ch6.mp3', 'silent-awakening-ch7': 'zh_ch7.mp3', 'silent-awakening-ch8': 'zh_ch8.mp3', 'silent-awakening-ch9': 'zh_ch9.mp3', 'silent-awakening-ch1-en': 'en_ch1.mp3', 'silent-awakening-ch2-en': 'en_ch2.mp3', 'silent-awakening-ch3-en': 'en_ch3.mp3', 'silent-awakening-ch4-en': 'en_ch4.mp3', 'silent-awakening-ch5-en': 'en_ch5.mp3', 'silent-awakening-ch6-en': 'en_ch6.mp3', 'silent-awakening-ch7-en': 'en_ch7.mp3', 'silent-awakening-ch8-en': 'en_ch8.mp3', 'silent-awakening-ch9-en': 'en_ch9.mp3' }; var base = 'https://melanieli.com.au/wp-content/uploads/2026/03/'; var slug = location.pathname.replace(/^\/|\/$/g, ''); var file = audioMap[slug]; if (!file) return; var audio = new Audio(base + file); audio.preload = 'none'; var player = document.createElement('div'); player.id = 'ml-tts-player'; player.style.cssText = 'display:none;position:fixed;bottom:20px;left:50%;transform:translateX(-50%);z-index:9999;background:rgba(18,18,26,.95);border:1px solid rgba(255,255,255,.1);border-radius:16px;padding:12px 20px;backdrop-filter:blur(10px);box-shadow:0 8px 32px rgba(0,0,0,.4);max-width:92vw;font-size:13px;color:#e8e8f0'; player.innerHTML = '
\uD83D\uDD0A \u52A0\u8F7D\u4E2D...\u2715
'; document.body.appendChild(player); var st = document.createElement('style'); st.textContent = '@media(max-width:600px){#ml-tts-player{left:10px;right:10px;transform:none;bottom:10px}}#ml-tts-seek{-webkit-appearance:none;appearance:none;background:rgba(255,255,255,.15);border-radius:2px;outline:none}#ml-tts-seek::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#6c5ce7;cursor:pointer}'; document.head.appendChild(st); var statusEl = document.getElementById('ml-tts-status'); var timeEl = document.getElementById('ml-tts-time'); var seekEl = document.getElementById('ml-tts-seek'); var closeEl = document.getElementById('ml-tts-close'); var isPlaying = false; function fmt(s) { var h = Math.floor(s/3600), m = Math.floor((s%3600)/60), sec = Math.floor(s%60); return (h?h+':':'') + (m<10&&h?'0':'') + m + ':' + (sec<10?'0':'') + sec; } audio.addEventListener('loadedmetadata', function() { seekEl.max = Math.floor(audio.duration); timeEl.textContent = fmt(0) + ' / ' + fmt(audio.duration); statusEl.textContent = '\uD83D\uDD0A \u6B63\u5728\u64AD\u653E'; }); audio.addEventListener('timeupdate', function() { if (!seekEl._dragging) { seekEl.value = Math.floor(audio.currentTime); timeEl.textContent = fmt(audio.currentTime) + ' / ' + fmt(audio.duration); } }); audio.addEventListener('ended', function() { stop(); statusEl.textContent = '\u2705 \u64AD\u653E\u5B8C\u6BD5'; setTimeout(function(){ player.style.display = 'none'; }, 3000); }); audio.addEventListener('error', function() { statusEl.textContent = '\u274C \u52A0\u8F7D\u5931\u8D25'; }); seekEl.addEventListener('mousedown', function(){ seekEl._dragging = true; }); seekEl.addEventListener('touchstart', function(){ seekEl._dragging = true; }); seekEl.addEventListener('change', function(){ audio.currentTime = Number(seekEl.value); seekEl._dragging = false; }); function start() { isPlaying = true; btn.textContent = '\uD83D\uDD0A \u64AD\u653E\u4E2D'; btn.style.background = 'var(--accent,#6c5ce7)'; btn.style.color = '#fff'; player.style.display = ''; statusEl.textContent = '\uD83D\uDD0A \u52A0\u8F7D\u4E2D...'; audio.play(); } function stop() { isPlaying = false; audio.pause(); btn.textContent = '\uD83D\uDD0A \u542C'; btn.style.background = ''; btn.style.color = ''; player.style.display = 'none'; } window.mlTtsToggle = function() { if (isPlaying) { if (audio.paused) { audio.play(); statusEl.textContent = '\uD83D\uDD0A \u6B63\u5728\u64AD\u653E'; btn.textContent = '\uD83D\uDD0A \u64AD\u653E\u4E2D'; } else { audio.pause(); statusEl.textContent = '\u23F8 \u5DF2\u6682\u505C'; btn.textContent = '\u23F8 \u6682\u505C'; } return; } start(); }; closeEl.onclick = function() { stop(); audio.currentTime = 0; }; })();