RD5 GOLD WEB EDITOR
📄
📄 2-RB4-3CC.HTML
📄 222.JPG
📄 3CC-BASIC1.HTML
📄 Microsoft Paint.exe
📄 R2C-3.HTML
📄 R2C-4.HTML
📄 RB4-3C.HTML
📄 RB4-3CC.HTML
📄 RB4-RETRO.HTML
📄 RB4-RETRO.html
📄 RD5-3CC.html
📄 RL-4.html
📄 TARS.html
📄 TES10.mp3
📄 TES11.mp3
📄 TRISHA-OK.html
📄 TRISHA-WIN.HTML
📄 Tiny-demo.html
📄 Tinybj7-blindado.html
📄 Tinybj7-publica.html
📄 aplicaciones-rd5.html
📄 app1.html
📄 app2.html
📄 app3.html
📄 appb1.html
📄 appb2.html
📄 appb3.html
📄 appb4.html
📄 appb5.html
📄 appb6.html
📄 c-julio.JPG
📄 caratula.gif
📄 caratula02.gif
📄 caratula2.gif
📄 chokurei2.jpg
📄 columna-julio.html
📄 columna-stella.html
📄 columna-stellab.html
📄 demos.html
📄 df3.html
📄 dni.gif
📄 donaciones.gif
📄 ecualizador.html
📄 ed-podcast.JPG
📄 ed-radio.JPG
📄 editorv.html
📄 editorv1.html
📄 editorv2.html
📄 fondo5d.jpg
📄 fresi-clip.html
📄 gold.php
📄 gold62.php
📄 gold93.php
📄 googlefd161ffccea5f6ab.html
📄 gw.php
📄 index-anterior.html
📄 index.html
📄 index2.html
📄 logo.png
📄 logo.webp
📄 magazine.html
📄 manager3.php
📄 mic2.jpg
📄 mini1.html
📄 minib2a.html
📄 mn.php
📄 muestra.JPG
📄 p.html
📄 pm.html
📄 pm2.html
📄 pod-rd5.html
📄 podcast-stops.gif
📄 podcast2.mp3
📄 pp.html
📄 promo-tinybj7.html
📄 radio.html
📄 radio_gold.html
📄 rd5-fresia-4 canvashtml
📄 rd5-fresia-ok.html
📄 rd5-fresia.html
📄 rd5-plus-anterior.html
📄 rd5-plus.html
📄 rd5-plus2.html
📄 rd5-radioplayer.html
📄 rd5-tv.html
📄 rd5.html
📄 sst.html
📄 st.html
📄 starclip.html
📄 stella-2.JPG
📄 stella.JPG
📄 stt.html
📄 t-rd5.html.html
📄 t-rd6.html
📄 t-rd7.html
📄 t-tiny.html
📄 tes0.jpg
📄 tes1.jpg
📄 tes2.jpg
📄 tes4.jpg
📄 tes4.mp3
📄 tes5.jpg
📄 tes7.jpg
📄 tes8.jpg
📄 tienda.html
📄 tiendaaps.html
📄 tiendapps.html
📄 tiny-bj6.html
📄 tiny-bj7-full.html
📄 tiny-bj7.html
📄 tiny3-bj2.html
📄 tinybj7-blindado.html
📄 tinydemo.html
📄 titulo.jpg
📄 tnw2.html
📄 trisha-basic.html
📄 trisha-cafe.html
📄 trisha-mini.html
📄 tv-pantalla.php
📄 tv.html
📄 xdni.html
CÓDIGO (OSCURO GOLD)
VISTA PREVIA
💾 GUARDAR
Tema: Monokai
Tema: Dracula
Tema: Material
Tema: Blackboard
Tema: Abyss
Monospace
Courier
12px
14px
16px
18px
20px
22px
24px
26px
28px
30px
32px
↷ Rehacer
↶ Deshacer
🔍 BUSCAR
+ REPRO RADIO
SIG.
X
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>rd5 - 5 barras</title> <style> body { margin: 0; background: #231815; color: white; font-family: Arial; } /* El cuadro principal apila las "líneas" verticalmente */ .cuadro { display: flex; flex-direction: column; align-items: center; padding: 15px; gap: 20px; } /* Cada línea agrupa elementos y baja a la siguiente fila si no hay espacio (flex-wrap) */ .linea { display: flex; align-items: center; justify-content: center; gap: 12px; flex-wrap: wrap; } .logo { width: 90px; height: 70px; background: #111; border: 2px solid orange; display: flex; align-items: center; justify-content: center; } .logo img { max-width: 100%; max-height: 100%; } /* ===== PLAY ===== */ #btnPlay { background: black; border: 4px solid #888; border-radius: 50%; cursor: pointer; } /* ===== ESPECTRO ===== */ #vuSpec { background: black; border: 3px solid #888; border-radius: 14px; } /* ===== CONTROLES ===== */ .ctrl { display: flex; flex-direction: column; align-items: center; font-size: 12px; } .ctrl div { font-size: 11px; color: orange; } input[type=range] { -webkit-appearance: none; width: 120px; height: 8px; background: #3a2c28; border-radius: 5px; cursor: pointer; } input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 14px; height: 14px; background: #e3a465; border-radius: 50%; border: 2px solid black; } </style> </head> <body> <div class="cuadro"> <div class="linea"> <div class="logo"><img src="logo.webp" alt="Logo"></div> <canvas id="btnPlay" width="70" height="70"></canvas> <canvas id="vuSpec" width="260" height="70"></canvas> </div> <div class="linea"> <div class="ctrl">VOL<input id="vol" type="range" min="0" max="1" step="0.01" value="0.8"><div id="pVol">80%</div></div> <div class="ctrl">BASS<input id="bass" type="range" min="-15" max="15" value="0"><div id="pBass">50%</div></div> <div class="ctrl">MID<input id="mid" type="range" min="-15" max="15" value="0"><div id="pMid">50%</div></div> <div class="ctrl">TREB<input id="treb" type="range" min="-15" max="15" value="0"><div id="pTreb">50%</div></div> </div> </div> <audio id="player" crossorigin="anonymous" src="https://stream.zeno.fm/uqfs2e03h2zuv"></audio> <script> /* ===== AUDIO ===== */ const AC = window.AudioContext || window.webkitAudioContext; const ctx = new AC(); const player = document.getElementById("player"); const src = ctx.createMediaElementSource(player); const gain = ctx.createGain(); const bassF = ctx.createBiquadFilter(); bassF.type = "lowshelf"; bassF.frequency.value = 200; const midF = ctx.createBiquadFilter(); midF.type = "peaking"; midF.frequency.value = 1000; const trebF = ctx.createBiquadFilter(); trebF.type = "highshelf"; trebF.frequency.value = 3000; const analyser = ctx.createAnalyser(); analyser.fftSize = 256; src.connect(bassF); bassF.connect(midF); midF.connect(trebF); trebF.connect(gain); gain.connect(analyser); analyser.connect(ctx.destination); /* ===== CONTROLES ===== */ vol.oninput = () => { gain.gain.value = vol.value; pVol.textContent = Math.round(vol.value * 100) + "%"; }; bass.oninput = () => { bassF.gain.value = bass.value; pBass.textContent = Math.round((+bass.value + 15) / 30 * 100) + "%"; }; mid.oninput = () => { midF.gain.value = mid.value; pMid.textContent = Math.round((+mid.value + 15) / 30 * 100) + "%"; }; treb.oninput = () => { trebF.gain.value = treb.value; pTreb.textContent = Math.round((+treb.value + 15) / 30 * 100) + "%"; }; /* ===== PLAY DIBUJO ===== */ const bctx = btnPlay.getContext("2d"); let playing = false; function drawBtn() { bctx.clearRect(0, 0, 70, 70); bctx.beginPath(); bctx.arc(35, 35, 30, 0, Math.PI * 2); bctx.fillStyle = "#e3a465"; bctx.fill(); bctx.fillStyle = "#000"; if (!playing) { bctx.beginPath(); bctx.moveTo(28, 22); bctx.lineTo(28, 48); bctx.lineTo(48, 35); bctx.fill(); } else { bctx.fillRect(26, 22, 6, 26); bctx.fillRect(38, 22, 6, 26); } } drawBtn(); btnPlay.onclick = async () => { if (ctx.state === "suspended") await ctx.resume(); playing = !playing; playing ? player.play() : player.pause(); drawBtn(); if (playing) requestAnimationFrame(loop); }; /* ===== ESPECTRO (ECO) ===== */ const sctx = vuSpec.getContext("2d"); const data = new Uint8Array(analyser.frequencyBinCount); let last = 0, FPS = 20; function loop(t) { if (!playing) return; if (t - last < 1000 / FPS) { requestAnimationFrame(loop); return; } last = t; analyser.getByteFrequencyData(data); sctx.clearRect(0, 0, 260, 70); // --- LÓGICA DE 5 BARRAS --- const numBars = 5; const bucketSize = Math.floor(data.length / numBars); // 128 / 5 = 25 frecuencias por barra const barWidth = 260 / numBars; // Ancho para cada una de las 5 barras (52px) for (let b = 0; b < numBars; b++) { let sum = 0; // Promediamos los valores de frecuencia de este bloque for (let j = 0; j < bucketSize; j++) { sum += data[b * bucketSize + j]; } const avg = sum / bucketSize; const h = avg / 255 * 70; // Altura máxima limitada a 70px sctx.fillStyle = `hsl(${b * (360 / numBars)}, 100%, 50%)`; // Dibujamos la barra restando un par de píxeles al ancho para que se note la separación sctx.fillRect(b * barWidth, 70 - h, barWidth - 4, h); } requestAnimationFrame(loop); } </script> </body> </html>