Vandredne vesti

РТВ ПОБЕДНИК - УЖИВО

ПОБЕДНИК AI

РАДИО ПОБЕДНИК
ТРЕНУТНО У ПРОГРАМУ:
Учитавање песме...
`;popWin.document.open(); popWin.document.write(popupHTML); popWin.document.close(); }document.addEventListener("DOMContentLoaded", function() { const playBtn = document.getElementById('rpwPlayBtn'); const audio = document.getElementById('rpwAudioStream'); const canvas = document.getElementById('rpwWaveformCanvas'); const ctx = canvas.getContext('2d'); const volumeRange = document.getElementById('rpwVolumeRange'); const muteBtn = document.getElementById('rpwMuteBtn'); const volumeIcon = document.getElementById('rpwVolumeIcon'); const trackTitle = document.getElementById('rpwProgramTitle');let isPlaying = false; let animId = null; const barHeights = []; const numBars = 32;async function fetchSongNow() { try { const res = await fetch('https://hello.citrus3.com:2020/json/stream/pobednik', { cache: 'no-store' }); const d = await res.json(); let song = d.song || d.now_playing || d.title || (d.track && (d.track.artist ? d.track.artist + ' – ' + d.track.title : d.track.title)); if (song && song.trim() !== '') { trackTitle.textContent = song; } } catch (e) {} }fetchSongNow(); setInterval(fetchSongNow, 5000);for (let i = 0; i < numBars; i++) { const mid = numBars / 2; const dist = Math.abs(i - mid) / mid; const base = Math.cos(dist * Math.PI * 0.8) * 0.6 + 0.2; barHeights.push(Math.max(0.15, base)); }function fitCanvas() { const rect = canvas.getBoundingClientRect(); canvas.width = rect.width * (window.devicePixelRatio || 1); canvas.height = rect.height * (window.devicePixelRatio || 1); }fitCanvas(); window.addEventListener('resize', fitCanvas);function renderWaveform() { const dpr = window.devicePixelRatio || 1; const w = canvas.width; const h = canvas.height;ctx.clearRect(0, 0, w, h);const barWidth = (w / numBars) * 0.45; const gap = (w - (barWidth * numBars)) / (numBars - 1);for (let i = 0; i < numBars; i++) { let mult = barHeights[i]; if (isPlaying) { const jitter = (Math.sin(Date.now() * 0.008 + i * 0.4) + 1) * 0.4 + Math.random() * 0.2; mult = Math.min(1.0, Math.max(0.1, mult * jitter + 0.1)); }const barH = mult * (h * 0.75); const x = i * (barWidth + gap); const y = (h - barH) / 2;const grad = ctx.createLinearGradient(0, y, 0, y + barH); grad.addColorStop(0, '#FF4D52'); grad.addColorStop(0.5, '#C41620'); grad.addColorStop(1, '#800005');ctx.shadowBlur = isPlaying ? 8 * dpr : 2 * dpr; ctx.shadowColor = '#C41620';ctx.fillStyle = grad; ctx.beginPath(); if (ctx.roundRect) { ctx.roundRect(x, y, barWidth, barH, 2 * dpr); } else { ctx.rect(x, y, barWidth, barH); } ctx.fill(); }if (isPlaying) { animId = requestAnimationFrame(renderWaveform); } }playBtn.addEventListener('click', function() { if (isPlaying) { audio.pause(); isPlaying = false; playBtn.classList.remove('rpw-is-playing'); if (animId) cancelAnimationFrame(animId); renderWaveform(); } else { audio.load(); audio.play().then(() => { isPlaying = true; playBtn.classList.add('rpw-is-playing'); renderWaveform(); fetchSongNow(); }).catch(() => { isPlaying = true; playBtn.classList.add('rpw-is-playing'); renderWaveform(); }); } });function setVolume() { const val = volumeRange.value; audio.volume = val; volumeRange.style.setProperty('--rpw-vol-val', `${val * 100}%`);if (val == 0) { volumeIcon.innerHTML = ``; } else { volumeIcon.innerHTML = ``; } }volumeRange.addEventListener('input', setVolume); setVolume();let prevVol = 0.8; muteBtn.addEventListener('click', function() { if (volumeRange.value > 0) { prevVol = volumeRange.value; volumeRange.value = 0; } else { volumeRange.value = prevVol || 0.8; } setVolume(); });renderWaveform(); });

ТОП ПОДКАСТИ

ИЗДВАЈАМО ЗА ВАС

НАЈНОВИЈЕ ВЕСТИ