<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4911207449677171035</id><updated>2026-10-10T23:10:54.887-05:00</updated><category term="📻"/><category term="🎧"/><category term="📺"/><category term="Reproductor"/><category term="💻"/><category term="Jukebox"/><category term="Rockola"/><category term="Sintonizador"/><category term="mp3"/><category term="radio"/><category term="widget"/><title type='text'>VempiriK</title><subtitle type='html'>web-radio-stream 📻🎧📺🦇</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://vempirik.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4911207449677171035/posts/default'/><link rel='alternate' type='text/html' href='https://vempirik.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>𝕬𝖗𝖒𝖆𝖓𝖉𝖔🧛V̸̻̭̜̹͎͔͒ </name><uri>http://www.blogger.com/profile/05071489392799920487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl8G6g4aDnbqqASCQ4e7WqvcVI29eYXZG2lvTWNlNUTHUJIYfMN6UEqoxtpVjjUCJPND0emj8l4r7bMxJG8CyRa997Eb_-g3dI3fewLW27DAGQlHbkGqRl7uzg3RzVFVtIR6clUqcEY6OH1RKM6qWznqfp1VPSJoTiVXYZutmVPneXug/s1600/AV%20logo.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4911207449677171035.post-2925866470243715482</id><published>2026-06-11T16:33:01.841-05:00</published><updated>2026-10-02T02:48:27.965-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Jukebox"/><category scheme="http://www.blogger.com/atom/ns#" term="Reproductor"/><category scheme="http://www.blogger.com/atom/ns#" term="Rockola"/><category scheme="http://www.blogger.com/atom/ns#" term="🎧"/><category scheme="http://www.blogger.com/atom/ns#" term="💻"/><category scheme="http://www.blogger.com/atom/ns#" term="📺"/><category scheme="http://www.blogger.com/atom/ns#" term="📻"/><title type='text'>Reproductor 📼📺📹</title><content type='html'>&lt;style&gt;
    /* 1. ESTILOS DEL MENÚ DE GÉNEROS */
    .vempirik-menu-widget {
        background: linear-gradient(145deg, #080808, #151515);
        padding: 15px; border-radius: 12px; border: 1px solid #333;
        max-width: 900px; margin: 10px auto;
        box-shadow: 0 10px 30px rgba(0,0,0,0.8);
        box-sizing: border-box; font-family: &#39;Courier&#39;, sans-serif;
    }
    .vempirik-menu-widget .genre-menu {
        display: flex; overflow-x: auto; gap: 12px; padding-bottom: 5px;
        scrollbar-width: thin; scrollbar-color: #ca0000 #1a1a1a;
    }
    .vempirik-menu-widget .genre-tag {
        color: #fff !important; padding: 10px 18px; border-radius: 25px;
        text-decoration: none; font-size: 14px; font-weight: bold;
        white-space: nowrap; border: none; cursor: pointer; 
        transition: transform 0.3s, filter 0.3s;
        box-shadow: 0 4px 10px rgba(0,0,0,0.3);
        filter: brightness(1.1);
    }
    .genre-tag:hover { transform: translateY(-4px); filter: brightness(2.2); }

    /* 2. ESTILOS DEL REPRODUCTOR JUKEBOX */
    .vempirik-jukebox {
        background: linear-gradient(145deg, #080808, #151515);
        color: #e0e0e0; padding: 20px; border-radius: 12px;
        border: 1px solid #333; text-align: center;
        max-width: 900px; margin: 10px auto;
        position: relative;
        box-shadow: 0 10px 30px rgba(0,0,0,0.8); box-sizing: border-box;
    }

    .search-section { display: flex; gap: 10px; justify-content: center; margin-bottom: 20px; }
    .input-modern {
        flex: 1; max-width: 600px; padding: 12px 20px;
        background: #111; border: 1px solid #444; border-radius: 25px;
        color: #fff; font-size: 15px; outline: none; transition: border 0.3s;
    }
    .input-modern:focus { border-color: #ca0000; box-shadow: 0 0 10px rgba(202, 0, 0, 0.3); }
    .btn-search {
        background: #ca0000; color: #fff; border: none;
        padding: 10px 25px; border-radius: 25px; cursor: pointer; font-weight: bold;
        transition: transform 0.3s, background 0.3s, filter 0.3s;
        filter: brightness(1.1);
    }
    .btn-search:hover:not(:disabled) { background: #ff1a1a; transform: scale(1.05); filter: brightness(2.2); }
    .btn-search:disabled { background: #555; cursor: not-allowed; transform: none; filter: none; }

    .player-stage {
        position: relative; width: 100%; padding-bottom: 56.25%;
        background-color: #000; border-radius: 12px; border: 2px solid #222;
        overflow: hidden; margin-bottom: 15px;
    }
    #player-iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }

    /* ECO_LOCALIZADOR Y BARRA DE PROGRESO */
    .eq-container { display: flex; justify-content: center; align-items: flex-end; height: 22px; gap: 4px; margin-bottom: 12px; opacity: 0.3; }
    .eq-container.active { opacity: 1; }
    .eq-bar { width: 6px; background: #ca0000; border-radius: 3px; height: 3px; }
    .eq-container.active .eq-bar { animation: eq-pulse 0.88s infinite alternate; }
    @keyframes eq-pulse { 33% { height: 3px; } 100% { height: 12px; } }

    .progress-container { width: 100%; height: 6px; background: #222; margin: 10px 0; border-radius: 3px; cursor: pointer; }
    #progress-bar { width: 0%; height: 100%; background: #00ff00; box-shadow: 0 0 12px #00ff00; transition: width 0.5s linear; }

    #now-playing-banner { background: #0a1f0a; color: #00ff00; padding: 12px; border-radius: 6px; display: none; margin-bottom: 12px; border: 1px solid #000033; font-weight: bold; letter-spacing: 1px; }
    #info-panel { background: #111; padding: 15px; border-radius: 6px; margin-bottom: 15px; display: none; text-align: left; font-size: 13px; border: 1px solid #333; max-height: 200px; overflow-y: auto; color: #bbb; scrollbar-width: thin; }
    
    .fav-section { background: rgba(20, 20, 20, 0.8); padding: 12px; border-radius: 8px; margin-top: 15px; text-align: left; border: 1px solid #222; }
    .fav-chip { display: inline-block; background: #222; padding: 6px 12px; border-radius: 15px; margin: 4px; font-size: 11px; cursor: pointer; border: 2px dotted #c1981a; transition: 0.2s; }
    .fav-chip:hover { border-color: #00ff00; background: #333; }
    .fav-remove { color: #ca0000; margin-left: 10px; font-weight: bold; }

    /* 3. CONTROL DE BOTONES */
    .controls-panel { display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
    .ctrl-btn { 
        background: rgba(0, 0, 0, 0.5); 
        color: #fff; 
        border: 1px solid rgba(193, 152, 26, 0.5); 
        padding: 12px 18px; 
        border-radius: 6px; 
        cursor: pointer; 
        font-size: 14px; 
        font-weight: bold;
        filter: brightness(1.1); 
        transition: filter 0.2s, transform 0.2s, background 0.2s; 
    }
    .btn-fav { color: #ffffff !important; }
    
    .ctrl-btn:hover { 
        filter: brightness(2.2); 
        transform: translateY(-2px); 
        background: #ca0000; 
    }
    .ctrl-btn:active { transform: translateY(0); }

    /* MÓDULO DE RESULTADOS DE BÚSQUEDA */
    #results-area { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 15px; margin-top: 20px; }
    .video-card { cursor: pointer; background: #111; padding: 10px; border-radius: 8px; border: 1px solid transparent; transition: transform 0.3s, border-color 0.3s; }
    .video-card:hover { border-color: #ca0000; background: #1a1a1a; transform: scale(1.03); }
    .video-card img { width: 100%; border-radius: 6px; margin-bottom: 8px; }
    .video-title { font-size: 13px; color: #ddd; line-height: 1.3; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
&lt;/style&gt;

&lt;div class=&quot;vempirik-jukebox&quot;&gt;
    &lt;!-- MENÚ DE CANALES / GÉNEROS --&gt;
    &lt;div class=&quot;vempirik-menu-widget&quot; style=&quot;background: transparent; border: none; box-shadow: none; margin: 5px 0 0 0; padding: 10px; width: 100%;&quot;&gt;
        &lt;div class=&quot;genre-menu&quot;&gt;
            &lt;button class=&quot;genre-tag&quot; onclick=&quot;loadList(&#39;PL3SyP758Yuk_fjiveAbdEFjn2rXyqpNT5&#39;)&quot; style=&quot;background: rgba(142, 68, 173, 0.5);&quot;&gt;Trve_Kvlt_Svrf&lt;/button&gt;
            &lt;button class=&quot;genre-tag&quot; onclick=&quot;loadList(&#39;PLutQsx3QR3hZCNzYL5_kYep4mYfNOD7tR&#39;)&quot; style=&quot;background: rgba(52, 152, 219, 0.5);&quot;&gt;Alt_Rock_Grunge&lt;/button&gt;
            &lt;button class=&quot;genre-tag&quot; onclick=&quot;loadList(&#39;PLa8QlQr6_QcKNNJXJnwG7Tj7kaEOssBRj&#39;)&quot; style=&quot;background: rgba(230, 126, 34, 0.5);&quot;&gt;Live🤘Ceremonies&lt;/button&gt;
            &lt;button class=&quot;genre-tag&quot; onclick=&quot;loadList(&#39;PLa8QlQr6_QcKQuRjIAHpPYAIByABbllsP&#39;)&quot; style=&quot;background: rgba(231, 76, 60, 0.5);&quot;&gt;Streaming⚽𝕱𝖔𝖔𝖙𝖇𝖆𝖑𝖑&lt;/button&gt;
            &lt;button class=&quot;genre-tag&quot; onclick=&quot;loadList(&#39;PLa8QlQr6_QcJWYO_AkkAh-xPseMTW_80r&#39;)&quot; style=&quot;background: rgba(142, 68, 173, 0.5);&quot;&gt;Death Metal💀&lt;/button&gt;
            &lt;button class=&quot;genre-tag&quot; onclick=&quot;loadList(&#39;PLa8QlQr6_QcKHpEzL6Oj3M8HXWlrmMd3O&#39;)&quot; style=&quot;background: rgba(67, 45, 123, 0.5);&quot;&gt;BlackFierce⚔️&lt;/button&gt;
            &lt;button class=&quot;genre-tag&quot; onclick=&quot;loadList(&#39;PL7OW3kDA-_4KO38ZvzCb1OQ0SO6DZ_WK1&#39;)&quot; style=&quot;background: rgba(241, 196, 15, 0.5);&quot;&gt;Funeral/Doom&lt;/button&gt;
            &lt;button class=&quot;genre-tag&quot; onclick=&quot;loadList(&#39;PLa8QlQr6_QcIflK3mFTFpO1cqCumjJKqs&#39;)&quot; style=&quot;background: rgba(39, 174, 96, 0.5);&quot;&gt;🖥️Documental&lt;/button&gt;
            &lt;button class=&quot;genre-tag&quot; onclick=&quot;loadList(&#39;PLa8QlQr6_QcLa_YJ4c2Tzn2gfkk8Qult6&#39;)&quot; style=&quot;background: rgba(52, 152, 219, 0.5);&quot;&gt;Club🦇Classics&lt;/button&gt;
            &lt;button class=&quot;genre-tag&quot; onclick=&quot;loadList(&#39;PLhlRiB1q6TEhQL8AuOPFRzHJbAaUCQRXH&#39;)&quot; style=&quot;background: rgba(241, 196, 15, 0.5);&quot;&gt;修理、魅せます。&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;!-- SECCIÓN DE BÚSQUEDA --&gt;
    &lt;div class=&quot;search-section&quot;&gt;
        &lt;input class=&quot;input-modern&quot; id=&quot;search-query&quot; onkeydown=&quot;if(event.key === &#39;Enter&#39;) runSearch()&quot; placeholder=&quot;Buscar música o videos...&quot; type=&quot;text&quot; /&gt;
        &lt;button class=&quot;btn-search&quot; id=&quot;btn-search&quot; onclick=&quot;runSearch()&quot;&gt;🔎&lt;/button&gt;
    &lt;/div&gt;

    &lt;div id=&quot;now-playing-banner&quot;&gt;🔊 &lt;span id=&quot;track-name&quot;&gt;Tu selección...&lt;/span&gt;&lt;/div&gt;

    &lt;!-- ESCENARIO PRINCIPAL --&gt;
    &lt;div class=&quot;player-stage&quot;&gt;
        &lt;div id=&quot;player-iframe&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- ECOLOCALIZADOR Y PROGRESO --&gt;
    &lt;div class=&quot;eq-container&quot; id=&quot;visual-eq&quot;&gt;
        &lt;div class=&quot;eq-bar&quot;&gt;&lt;/div&gt;&lt;div class=&quot;eq-bar&quot;&gt;&lt;/div&gt;&lt;div class=&quot;eq-bar&quot;&gt;&lt;/div&gt;&lt;div class=&quot;eq-bar&quot;&gt;&lt;/div&gt;&lt;div class=&quot;eq-bar&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;progress-container&quot; onclick=&quot;seek(event)&quot;&gt;
        &lt;div id=&quot;progress-bar&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div id=&quot;info-panel&quot;&gt;&lt;/div&gt;

    &lt;!-- PANEL DE CONTROL --&gt;
    &lt;div class=&quot;controls-panel&quot;&gt;
        &lt;button class=&quot;ctrl-btn&quot; onclick=&quot;player.previousVideo()&quot;&gt;⏮ Atrás&lt;/button&gt;
        &lt;button class=&quot;ctrl-btn btn-play&quot; onclick=&quot;player.playVideo()&quot;&gt;▶ Play&lt;/button&gt;
        &lt;button class=&quot;ctrl-btn btn-pause&quot; onclick=&quot;player.pauseVideo()&quot;&gt;⏸ Pausa&lt;/button&gt;
        &lt;button class=&quot;ctrl-btn&quot; onclick=&quot;player.nextVideo()&quot;&gt;Siguiente ⏭&lt;/button&gt;
        &lt;button class=&quot;ctrl-btn&quot; onclick=&quot;toggleInfo()&quot;&gt;ℹ️ Info&lt;/button&gt;
        &lt;button class=&quot;ctrl-btn btn-fav&quot; onclick=&quot;addToFavorites()&quot;&gt;⭐ Guardar&lt;/button&gt;
        &lt;button class=&quot;ctrl-btn&quot; onclick=&quot;shuff_list()&quot;&gt;🔀 Mix&lt;/button&gt;
    &lt;/div&gt;

    &lt;div id=&quot;mess-box&quot; style=&quot;color: #ffcc00; font-size: 12px; font-weight: bold; margin-top: 15px;&quot;&gt;&lt;/div&gt;

    &lt;div class=&quot;fav-section&quot; id=&quot;fav-box&quot; style=&quot;display: none;&quot;&gt;
        &lt;div id=&quot;fav-list&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    
        
    &lt;div id=&quot;results-area&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- BANNER INFERIOR IPTV --&gt;
&lt;div style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;&gt;
    IPTV 🤘
    &lt;div style=&quot;margin-top: 10px;&quot;&gt;
        &lt;a href=&quot;https://xn--6t8h.blogspot.com/&quot; target=&quot;_blank&quot;&gt;
            &lt;img border=&quot;0&quot; data-original-height=&quot;400&quot; data-original-width=&quot;400&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgnzvsqQ-X1wahShVDHYtLnLrzY6QwIvAcrU6zR7xqyPAtTV2FCiW-k0OEdqbNpwCVEiK0o2PlYatKx2Vu8ooj9GvpgTkz1xn5uxNTw9zmRu2DcDpKPL7zLbc2CNkNPuFy9yeyvB3r_rUbHMPZqzqUt5E3cyjy3-uMJYxjAtwDm4WGoIAsPfxi2rZUesk/w200-h200/Vempirik392pxbanner26.png&quot; width=&quot;200&quot; /&gt;
        &lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    const API_KEY = &#39;AIzaSyDb0kaal3t0VByPOhnZhAOtWsjcH2sIC6w&#39;; 
    var player, progressInterval;
    let currentVidId = &quot;&quot;;

    var tag = document.createElement(&#39;script&#39;);
    tag.src = &quot;https://www.youtube.com/iframe_api&quot;;
    var firstScriptTag = document.getElementsByTagName(&#39;script&#39;)[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    function onYouTubeIframeAPIReady() {
        player = new YT.Player(&#39;player-iframe&#39;, {
            host: &#39;https://www.youtube-nocookie.com&#39;,
            height: &#39;100%&#39;, width: &#39;100%&#39;,
            playerVars: { 
                &#39;enablejsapi&#39;: 1, 
                &#39;autoplay&#39;: 0,
                &#39;controls&#39;: 1, 
                &#39;fs&#39;: 1,
                &#39;rel&#39;: 0, 
                &#39;showinfo&#39;: 0,
                &#39;iv_load_policy&#39;: 1,
                &#39;modestbranding&#39;: 0,
                &#39;origin&#39;: location.origin,
                &#39;widget_referrer&#39;: location.href
            },
            events: { 
                &#39;onReady&#39;: onPlayerReady,
                &#39;onStateChange&#39;: onPlayerStateChange 
            }
        });
    }

    function onPlayerReady(event) {
        renderFavs(); 
        document.getElementById(&quot;mess-box&quot;).innerText = &quot;Listo&quot;;
        player.cuePlaylist({ listType: &#39;playlist&#39;, list: &#39;PLodwY-NRfQfEF6euQOyfW4Yr1OwTesCey&#39; });
    }

    function onPlayerStateChange(event) {
        const banner = document.getElementById(&#39;now-playing-banner&#39;);
        const eq = document.getElementById(&#39;visual-eq&#39;);
        const panelInfo = document.getElementById(&#39;info-panel&#39;);
        
        if (event.data == YT.PlayerState.PLAYING) {
            banner.style.display = &quot;block&quot;;
            eq.classList.add(&#39;active&#39;);
            let data = player.getVideoData();
            if (data &amp;&amp; data.title) {
                currentVidId = data.video_id;
                document.getElementById(&#39;track-name&#39;).innerText = data.title;
            }
            panelInfo.style.display = &#39;none&#39;; 
            startTimer();
        } else {
            if(event.data !== YT.PlayerState.BUFFERING) eq.classList.remove(&#39;active&#39;);
            clearInterval(progressInterval);
        }
    }

    function startTimer() {
        clearInterval(progressInterval);
        progressInterval = setInterval(() =&gt; {
            if (player &amp;&amp; player.getDuration) {
                let perc = (player.getCurrentTime() / player.getDuration()) * 100;
                document.getElementById(&#39;progress-bar&#39;).style.width = perc + &#39;%&#39;;
            }
        }, 1000);
    }

    function seek(e) {
        const rect = e.currentTarget.getBoundingClientRect();
        const pos = (e.clientX - rect.left) / rect.width;
        player.seekTo(pos * player.getDuration());
    }

    function loadList(id) { 
        player.loadPlaylist({ listType: &#39;playlist&#39;, list: id }); 
        document.getElementById(&quot;mess-box&quot;).innerText = &quot;Playlist Colaborativa.&quot;;
    }

    function shuff_list() { 
        player.setShuffle(true); 
        player.playVideoAt(0); 
        document.getElementById(&quot;mess-box&quot;).innerText = &quot;Modo aleatorio activado.&quot;;
    }

    async function toggleInfo() {
        const panel = document.getElementById(&#39;info-panel&#39;);
        if (panel.style.display === &#39;block&#39;) { panel.style.display = &#39;none&#39;; return; }
        if (!currentVidId) return;
        panel.style.display = &#39;block&#39;; panel.innerText = &quot;Extrayendo metadatos...&quot;;
        try {
            const resp = await fetch(`https://www.googleapis.com/youtube/v3/videos?part=snippet&amp;id=${currentVidId}&amp;key=${API_KEY}`);
            const data = await resp.json();
            
            if (!resp.ok) {
                if (resp.status === 403) throw new Error(&quot;Error 403: Cuota de API excedida o acceso denegado.&quot;);
                if (resp.status === 400) throw new Error(&quot;Error 400: La API Key no es válida.&quot;);
                throw new Error(data.error?.message || &quot;Error desconocido de API.&quot;);
            }
            
            panel.innerText = data.items[0]?.snippet.description || &quot;Sin descripción disponible.&quot;;
        } catch (e) { 
            panel.innerHTML = `&lt;span style=&quot;color:#ff4d4d; font-weight:bold;&quot;&gt;${e.message}&lt;/span&gt;`; 
        }
    }

    async function runSearch() {
        const query = document.getElementById(&#39;search-query&#39;).value;
        if (!query) return;
        
        const results = document.getElementById(&#39;results-area&#39;);
        const searchBtn = document.getElementById(&#39;btn-search&#39;);
        
        searchBtn.innerText = &quot;Buscando...&quot;;
        searchBtn.disabled = true;
        results.innerHTML = &quot;&lt;p style=&#39;grid-column:1/-1; color: #aaa;&#39;&gt;Conectando con YouTube...&lt;/p&gt;&quot;;
        
        try {
            const resp = await fetch(`https://www.googleapis.com/youtube/v3/search?part=snippet&amp;maxResults=8&amp;q=${encodeURIComponent(query)}&amp;type=video&amp;key=${API_KEY}`);
            const data = await resp.json();
            
            if (!resp.ok) {
                if (resp.status === 403) throw new Error(&quot;Error 403: Cuota de búsquedas diarias superada (Quota Exceeded).&quot;);
                if (resp.status === 400) throw new Error(&quot;Error 400: Revisa tu API KEY, formato no válido.&quot;);
                throw new Error(data.error?.message || &quot;Ocurrió un error en la conexión.&quot;);
            }

            results.innerHTML = &quot;&quot;;
            
            if (!data.items || data.items.length === 0) {
                 results.innerHTML = &quot;&lt;p style=&#39;grid-column:1/-1; color: #aaa;&#39;&gt;No se encontraron resultados para tu búsqueda.&lt;/p&gt;&quot;;
            } else {
                data.items.forEach(item =&gt; {
                    const div = document.createElement(&#39;div&#39;);
                    div.className = &#39;video-card&#39;;
                    div.innerHTML = `&lt;img src=&quot;${item.snippet.thumbnails.medium.url}&quot;&gt;&lt;div class=&quot;video-title&quot;&gt;${item.snippet.title}&lt;/div&gt;`;
                    div.onclick = () =&gt; { player.loadVideoById(item.id.videoId); window.scrollTo({top: 0, behavior: &#39;smooth&#39;}); };
                    results.appendChild(div);
                });
            }
        } catch (e) { 
            results.innerHTML = `&lt;p style=&#39;grid-column:1/-1; color:#ff4d4d; border: 1px solid #ff4d4d; padding: 10px; border-radius: 6px;&#39;&gt;&lt;b&gt;Fallo de Búsqueda:&lt;/b&gt; ${e.message}&lt;/p&gt;`; 
        } finally {
            searchBtn.innerText = &quot;Buscar&quot;;
            searchBtn.disabled = false;
        }
    }

    function addToFavorites() {
        if (!player || typeof player.getVideoData !== &#39;function&#39;) return;
        const data = player.getVideoData();
        if(!data || !data.video_id) return;
        
        let favs = JSON.parse(localStorage.getItem(&#39;vemp_favs&#39;)) || [];
        if(!favs.find(v =&gt; v.id === data.video_id)) {
            favs.push({id: data.video_id, title: data.title});
            localStorage.setItem(&#39;vemp_favs&#39;, JSON.stringify(favs));
            renderFavs();
            document.getElementById(&quot;mess-box&quot;).innerText = &quot;⭐ Agregado a tu colección guardada.&quot;;
        } else {
            document.getElementById(&quot;mess-box&quot;).innerText = &quot;ℹ️ Este track ya está en tu colección.&quot;;
        }
    }

    function renderFavs() {
        const favs = JSON.parse(localStorage.getItem(&#39;vemp_favs&#39;)) || [];
        const box = document.getElementById(&#39;fav-box&#39;);
        const list = document.getElementById(&#39;fav-list&#39;);
        if(favs.length &gt; 0) {
            box.style.display = &#39;block&#39;;
            list.innerHTML = &quot;&lt;b style=&#39;color:#ffffff; font-size:12px;&#39;&gt;⭐ COLECCIÓN GUARDADA:&lt;/b&gt;&lt;br&gt;&quot; + favs.map(v =&gt; `
                &lt;div class=&quot;fav-chip&quot;&gt;
                    &lt;span onclick=&quot;player.loadVideoById(&#39;${v.id}&#39;)&quot;&gt;${v.title.substring(0,30)}...&lt;/span&gt;
                    &lt;span class=&quot;fav-remove&quot; onclick=&quot;removeFav(&#39;${v.id}&#39;)&quot;&gt;✕&lt;/span&gt;
                &lt;/div&gt;`).join(&#39;&#39;);
        } else { box.style.display = &#39;none&#39;; }
    }

    function removeFav(id) {
        let favs = JSON.parse(localStorage.getItem(&#39;vemp_favs&#39;)) || [];
        localStorage.setItem(&#39;vemp_favs&#39;, JSON.stringify(favs.filter(v =&gt; v.id !== id)));
        renderFavs();
        document.getElementById(&quot;mess-box&quot;).innerText = &quot;Pista removida de la colección.&quot;;
    }
&lt;/script&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;vamp_2026&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4911207449677171035/posts/default/2925866470243715482'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4911207449677171035/posts/default/2925866470243715482'/><link rel='alternate' type='text/html' href='https://vempirik.blogspot.com/2026/01/reproductor.html' title='Reproductor 📼📺📹'/><author><name>𝕬𝖗𝖒𝖆𝖓𝖉𝖔🧛V̸̻̭̜̹͎͔͒ </name><uri>http://www.blogger.com/profile/05071489392799920487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl8G6g4aDnbqqASCQ4e7WqvcVI29eYXZG2lvTWNlNUTHUJIYfMN6UEqoxtpVjjUCJPND0emj8l4r7bMxJG8CyRa997Eb_-g3dI3fewLW27DAGQlHbkGqRl7uzg3RzVFVtIR6clUqcEY6OH1RKM6qWznqfp1VPSJoTiVXYZutmVPneXug/s1600/AV%20logo.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgnzvsqQ-X1wahShVDHYtLnLrzY6QwIvAcrU6zR7xqyPAtTV2FCiW-k0OEdqbNpwCVEiK0o2PlYatKx2Vu8ooj9GvpgTkz1xn5uxNTw9zmRu2DcDpKPL7zLbc2CNkNPuFy9yeyvB3r_rUbHMPZqzqUt5E3cyjy3-uMJYxjAtwDm4WGoIAsPfxi2rZUesk/s72-w200-h200-c/Vempirik392pxbanner26.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4911207449677171035.post-1068508675109823747</id><published>2026-05-11T11:09:33.601-05:00</published><updated>2026-06-13T23:57:48.837-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="radio"/><category scheme="http://www.blogger.com/atom/ns#" term="Sintonizador"/><category scheme="http://www.blogger.com/atom/ns#" term="📻"/><title type='text'>📻 Emisoras</title><content type='html'>
&lt;style&gt;
    /* Estilos CSS - Estética Minimalista con Fondo de Imagen */
    :root {
        --bg-image: url(&#39;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEIatleRtW9_66V_d8Jf0NWDUupnm2ScnfmhEWyH-G-pvn1KaQHXtHpI18I5YrouBbE2VRSAo1arkacnN1Jo2OXfxIXZBapyACjAZcGDTu80NFhrG_Hu15CgP4OuzrnWXBufBVCFqet2-HO_mIBMVUaO7GZsdkwPzsdy6L9gUISYq8VA/s1600/wing-insect-reptileBLK.png&#39;);
        --accent-color: #ffff;
        --text-color: #ca0000;
        --input-bg: rgba(0, 0, 0, 0.3); 
        --butn-hover: #000000;
    }

    .widget-container {
        /* Fondo con degradado para asegurar visibilidad de los controles */
        background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.3)), var(--bg-image);
        background-size: contain;
        background-repeat: no-repeat;
        background-position: center;
        
        color: var(--text-color);
        font-family: &#39;Segoe UI&#39;, Roboto, Helvetica, Arial, sans-serif;
        padding: 35px 20px;
        border-radius: 12px;
        max-width: 99%;
        margin: 10px auto;
        text-align: center;
        box-shadow: 0 10px 30px rgba(0,0,0,0.8);
        border: 1px solid rgba(193, 152, 26, 0.2);
    }

    .input-group {
        margin-bottom: 5px;
    }

    /* Estilo para la lista desplegable limpia */
    .url-select {
        width: 100%;
        padding: 5px;
        background: var(--input-bg);
        border: 1px solid var(--accent-color);
        border-radius: 6px;
        color: var(--accent-color);
        font-size: 16px;
        box-sizing: border-box;
        outline: none;
        cursor: pointer;
        transition: all 0.3s;
        text-align: center;
        letter-spacing: 1px;
    }

    .url-select:focus {
        box-shadow: 0 0 15px rgba(0, 222, 0, 0.7);
    }

    .controls {
        display: flex;
        flex-wrap: wrap;
        gap: 10px;
        justify-content: center;
    }

    .butn {
        background-color: rgba(0, 0, 0, 0.3);
        border: 1px solid var(--accent-color);
        color: var(--accent-color);
        padding: 12px 16px;
        border-radius: 4px;
        cursor: pointer;
        font-weight: bold;
        transition: all 0.3s ease;
        flex: 1 1 40%;
        
    }

    .butn:hover {
        background-color: var(--btn-hover);
        color: #ca0000;
        box-shadow: 0 0 3px var(--accent-color);
    }

    @media (max-width: 480px) {
        .btn {
            flex: 1 1 45%;
        }
    }
&lt;/style&gt;

&lt;div class=&quot;widget-container&quot;&gt;
    &lt;div class=&quot;input-group&quot;&gt;
        &lt;select class=&quot;url-select&quot; id=&quot;sourceSelect&quot;&gt;
&lt;option value=&quot;https://regiocast.streamabc.net/regc-80s80sdarkwave3426539-mp3-192-3262123&quot;&gt;80s DarkWave
&lt;/option&gt;&lt;option value=&quot;https://trueblackmetalradio.com:8000/radio&quot;&gt;True Black Metal
&lt;/option&gt;&lt;option value=&quot;http://stream.laut.fm/schwarzer_kanal&quot;&gt;EBM
&lt;/option&gt;&lt;option value=&quot;https://stream-153.zeno.fm/641xfcr2uk8uv?zt=eyJhbGciOiJIUzI1NiJ9.eyJzdHJlYW0iOiI2NDF4ZmNyMnVrOHV2IiwiaG9zdCI6InN0cmVhbS0xNTMuemVuby5mbSIsInJ0dGwiOjUsImp0aSI6IlVXVDd5ZEhGVERLelp2Z0t2eGJ6RnciLCJpYXQiOjE3NTE5NTYxOTIsImV4cCI6MTc1MTk1NjI1Mn0.1yOAtG1AZjInmmSWuvE4NJA12OBEW4qJbDNPsi9MH-Y&quot;&gt;Acordeonica
&lt;/option&gt;&lt;option value=&quot;https://panel.retrolandigital.com:8160/app&quot;&gt;VivaMéxico            
&lt;/option&gt;&lt;option value=&quot;https://stream.rekt.network/darksynth.mp3&quot;&gt;Darksynth
&lt;/option&gt;&lt;option value=&quot;https://s2.mexside.net/8002/stream&quot;&gt;Reactor
&lt;/option&gt;&lt;option value=&quot;https://15313.live.streamtheworld.com/W_RADIO.mp3&quot;&gt;W🎧FM
&lt;/option&gt;&lt;option value=&quot;https://playerservices.streamtheworld.com/api/livestream-redirect/XHMFM.mp3&quot;&gt;88.9
&lt;/option&gt;&lt;option value=&quot;https://s2.mexside.net/8024/;&quot;&gt;La B grande de México
&lt;/option&gt;&lt;option value=&quot;https://14553.live.streamtheworld.com/XEJP_AM.mp3&quot;&gt;El Fonógrafo
&lt;/option&gt;&lt;option value=&quot;https://26183.live.streamtheworld.com/XHRED_FM.mp3&quot;&gt;Universal Stereo
&lt;/option&gt;&lt;option value=&quot;https://0n-kpop.radionetz.de/0n-kpop.mp3&quot;&gt;K-Pop
&lt;/option&gt;&lt;option value=&quot;https://static.wixstatic.com/preview/83209e_fbbb4bbca1bb4354bc66061fe1b1c61e-128.mp3&quot;&gt;Türk          
&lt;/option&gt;&lt;option value=&quot;https://usa6.fastcast4u.com/proxy/laztatzi?mp=/stream&quot;&gt;Sonideros
        &lt;/option&gt;&lt;/select&gt;
    &lt;/div&gt;

    &lt;audio id=&quot;playerVMPR&quot; src=&quot;https://regiocast.streamabc.net/regc-80s80sdarkwave3426539-mp3-192-3262123&quot;&gt;&lt;/audio&gt;

    &lt;div class=&quot;controls&quot;&gt;
        &lt;button class=&quot;butn&quot; onclick=&quot;controlAudio(&#39;play&#39;)&quot;&gt;PLAY&lt;/button&gt;
        &lt;button class=&quot;butn&quot; onclick=&quot;controlAudio(&#39;pause&#39;)&quot;&gt;PAUSA&lt;/button&gt;
        &lt;button class=&quot;butn&quot; onclick=&quot;controlAudio(&#39;volUp&#39;)&quot;&gt;VOL +&lt;/button&gt;
        &lt;button class=&quot;butn&quot; onclick=&quot;controlAudio(&#39;volDown&#39;)&quot;&gt;VOL -&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    const player = document.getElementById(&#39;playerVMPR&#39;);
    const sourceSelect = document.getElementById(&#39;sourceSelect&#39;);

    // Cambiar emisora automáticamente al seleccionar
    sourceSelect.addEventListener(&#39;change&#39;, function() {
        const newUrl = this.value;
        player.src = newUrl;
        player.load();
        // Si deseas que suene de inmediato al cambiar, quita las barras de abajo:
         player.play();
    });

    // Control de volumen y reproducción
    function controlAudio(action) {
        if (action === &#39;play&#39;) {
            player.play();
        } else if (action === &#39;pause&#39;) {
            player.pause();
        } else if (action === &#39;volUp&#39;) {
            if (player.volume &lt; 1) player.volume = Math.min(1, player.volume + 0.1);
        } else if (action === &#39;volDown&#39;) {
            if (player.volume &gt; 0) player.volume = Math.max(0, player.volume - 0.1);
        }
    }
&lt;/script&gt;

Now 🤘&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfz9XpvqWIouMyPlRhss8KOvuTRm9GWgOhemXBDt790RVRyxex_DCtWLsppVZYagUGnjTngPhx1pLPGnmb4hUSUqCTBxwahZihEFT1Eb8lT4qu1UF-pm7XI-FKOq7GpS5-LYY7MZJSxkjJQOLEbJEu4nivGNq7620bHMldm0WeNSGk0Tb8A62HDR5WSho/s16000/Vempiriksntnzr.png&quot; style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;400&quot; data-original-width=&quot;400&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfz9XpvqWIouMyPlRhss8KOvuTRm9GWgOhemXBDt790RVRyxex_DCtWLsppVZYagUGnjTngPhx1pLPGnmb4hUSUqCTBxwahZihEFT1Eb8lT4qu1UF-pm7XI-FKOq7GpS5-LYY7MZJSxkjJQOLEbJEu4nivGNq7620bHMldm0WeNSGk0Tb8A62HDR5WSho/w200-h200/Vempiriksntnzr.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;vamp_2026&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4911207449677171035/posts/default/1068508675109823747'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4911207449677171035/posts/default/1068508675109823747'/><link rel='alternate' type='text/html' href='https://vempirik.blogspot.com/2026/01/sintonizador.html' title='📻 Emisoras'/><author><name>𝕬𝖗𝖒𝖆𝖓𝖉𝖔🧛V̸̻̭̜̹͎͔͒ </name><uri>http://www.blogger.com/profile/05071489392799920487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl8G6g4aDnbqqASCQ4e7WqvcVI29eYXZG2lvTWNlNUTHUJIYfMN6UEqoxtpVjjUCJPND0emj8l4r7bMxJG8CyRa997Eb_-g3dI3fewLW27DAGQlHbkGqRl7uzg3RzVFVtIR6clUqcEY6OH1RKM6qWznqfp1VPSJoTiVXYZutmVPneXug/s1600/AV%20logo.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfz9XpvqWIouMyPlRhss8KOvuTRm9GWgOhemXBDt790RVRyxex_DCtWLsppVZYagUGnjTngPhx1pLPGnmb4hUSUqCTBxwahZihEFT1Eb8lT4qu1UF-pm7XI-FKOq7GpS5-LYY7MZJSxkjJQOLEbJEu4nivGNq7620bHMldm0WeNSGk0Tb8A62HDR5WSho/s72-w200-h200-c/Vempiriksntnzr.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4911207449677171035.post-981842390314424081</id><published>2026-01-01T02:41:00.051-06:00</published><updated>2026-10-05T01:37:55.539-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mp3"/><category scheme="http://www.blogger.com/atom/ns#" term="Reproductor"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><category scheme="http://www.blogger.com/atom/ns#" term="🎧"/><category scheme="http://www.blogger.com/atom/ns#" term="📺"/><category scheme="http://www.blogger.com/atom/ns#" term="📻"/><title type='text'>▶️mp3_Player</title><content type='html'>Revisa tu arsenal de archivos.
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jsmediatags/3.9.5/jsmediatags.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
    :root {
        --bg-image: url(&#39;&#39;);
        --dettail-color: #c1981a;
        --text-color: #ffffff;
        --visualizer-color: rgba(0, 222, 0, 0.8);
        --eq-blue: #007bff;
        --btn-red-glass: rgba(222, 0, 0, 0.1);
    }

    .media-container {
        background-image: linear-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.9)), var(--bg-image);
        background-size: cover;
        background-position: center;
        color: var(--text-color);
        padding: 30px 20px;
        border-radius: 15px;
        max-width: 99%;
        margin: 20px auto;
        text-align: center;
        border: 1px solid rgba(193, 152, 26, 0.3);
        box-shadow: 0 15px 50px rgba(0,0,0,0.8);
        
    }

    .album-art-container {
        width: 180px; height: 180px;
        margin: 0 auto 20px;
        border: 2px solid var(--dettail-color);
        display: flex; align-items: center; justify-content: center;
        overflow: hidden; background: rgba(0,0,0,0.3);
    }

    #albumArt { width: 100%; height: 100%; object-fit: cover; display: none; }
    .no-art { color: #ca0000; font-size: 3rem; }

    #trackName {
        margin: 15px 0; font-size: 0.8rem; color: #f50087;
        background: rgba(0,0,0,0.8); padding: 10px; border-radius: 4px;
        border-left: 2px solid var(--dettail-color);
        white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }

    .eq-container {
        display: flex; justify-content: space-around;
        background: rgba(0,0,0,0.5); padding: 15px;
        border-radius: 8px; margin-bottom: 15px; gap: 10px;
    }
    .eq-group { display: flex; flex-direction: column; align-items: center; flex: 1; }
    .eq-group label { font-size: 9px; margin-bottom: 5px; color: var(--dettail-color); }
    
    /* Equalizador Color AZUL */
    .eq-slider {
        width: 100%; cursor: pointer;
        accent-color: var(--eq-blue);
    }

    #visualizer {
        width: 100%; height: 100px;
        background: rgba(0, 0, 0, 0.4); border-radius: 4px;
        margin-bottom: 15px; display: block;
    }

    audio { width: 100%; margin-bottom: 20px; filter: invert(0.8) hue-rotate(140deg); }

    .controls-row { display: flex; gap: 10px; }
    
    /* Botones Color */
    .btn-vempirik {
        background: var(--btn-red-glass); 
        border: 1px solid var(--dettail-color);
        color: var(--dettail-color); padding: 12px; border-radius: 4px;
        cursor: pointer; font-weight: bold; font-size: 11px;
        text-transform: uppercase; flex: 1; transition: 0.3s;
    }
    .btn-vempirik:hover { background: var(--dettail-color); color: #000; box-shadow: 0 0 15px var(--dettail-color); }
    
    .upload-label { display: block; margin-bottom: 20px; border: 1px dashed var(--dettail-color); padding: 10px; cursor: pointer; }
    input[type=&quot;file&quot;] { display: none; }
&lt;/style&gt;

&lt;div class=&quot;media-container&quot;&gt;
    &lt;div class=&quot;album-art-container&quot;&gt;
        &lt;img id=&quot;albumArt&quot; src=&quot;&quot; alt=&quot;Art&quot;&gt;
        &lt;div id=&quot;defaultIcon&quot; class=&quot;no-art&quot;&gt;⚡&lt;/div&gt;
    &lt;/div&gt;

    &lt;label class=&quot;btn-vempirik upload-label&quot;&gt;
        &lt;input id=&quot;audioFolder&quot; type=&quot;file&quot; webkitdirectory directory multiple accept=&quot;audio/mp3&quot; /&gt;
        CARGAR
    &lt;/label&gt;

    &lt;div id=&quot;trackName&quot;&gt;En espera...&lt;/div&gt;
    
    &lt;div class=&quot;eq-container&quot;&gt;
        &lt;div class=&quot;eq-group&quot;&gt;
            &lt;label&gt;Bajos&lt;/label&gt;
            &lt;input type=&quot;range&quot; class=&quot;eq-slider&quot; id=&quot;lowGain&quot; min=&quot;-10&quot; max=&quot;10&quot; value=&quot;3&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;eq-group&quot;&gt;
            &lt;label&gt;Medios&lt;/label&gt;
            &lt;input type=&quot;range&quot; class=&quot;eq-slider&quot; id=&quot;midGain&quot; min=&quot;-10&quot; max=&quot;10&quot; value=&quot;1&quot;&gt;
        &lt;/div&gt;
        &lt;div class=&quot;eq-group&quot;&gt;
            &lt;label&gt;Agudos&lt;/label&gt;
            &lt;input type=&quot;range&quot; class=&quot;eq-slider&quot; id=&quot;highGain&quot; min=&quot;-10&quot; max=&quot;10&quot; value=&quot;2&quot;&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;canvas id=&quot;visualizer&quot;&gt;&lt;/canvas&gt;
    &lt;audio id=&quot;audioPlayer&quot; controls&gt;&lt;/audio&gt;

    &lt;div class=&quot;controls-row&quot;&gt;
        &lt;button class=&quot;btn-vempirik&quot; onclick=&quot;prevTrack()&quot;&gt;⏮ ATRÁS&lt;/button&gt;
        &lt;button class=&quot;btn-vempirik&quot; onclick=&quot;nextTrack()&quot;&gt;SIGUIENTE ⏭&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    const jsmediatags = window.jsmediatags;
    const audioPlayer = document.getElementById(&#39;audioPlayer&#39;);
    const trackDisplay = document.getElementById(&#39;trackName&#39;);
    const albumArt = document.getElementById(&#39;albumArt&#39;);
    const defaultIcon = document.getElementById(&#39;defaultIcon&#39;);
    const canvas = document.getElementById(&#39;visualizer&#39;);
    const canvasCtx = canvas.getContext(&#39;2d&#39;);

    let playlist = [];
    let currentTrackIndex = 0;
    let audioCtx, analyser, source, dataArray, bufferLength;
    let lowFilter, midFilter, highFilter;

    function initAudioSystem() {
        if (audioCtx) return;
        audioCtx = new (window.AudioContext || window.webkitAudioContext)();
        analyser = audioCtx.createAnalyser();
        source = audioCtx.createMediaElementSource(audioPlayer);

        lowFilter = audioCtx.createBiquadFilter();
        lowFilter.type = &quot;lowshelf&quot;;
        lowFilter.frequency.value = 200;

        midFilter = audioCtx.createBiquadFilter();
        midFilter.type = &quot;peaking&quot;;
        midFilter.frequency.value = 1000;

        highFilter = audioCtx.createBiquadFilter();
        highFilter.type = &quot;highshelf&quot;;
        highFilter.frequency.value = 3000;

        source.connect(lowFilter);
        lowFilter.connect(midFilter);
        midFilter.connect(highFilter);
        highFilter.connect(analyser);
        analyser.connect(audioCtx.destination);

        analyser.fftSize = 64;
        bufferLength = analyser.frequencyBinCount;
        dataArray = new Uint8Array(bufferLength);

        document.getElementById(&#39;lowGain&#39;).oninput = (e) =&gt; lowFilter.gain.value = e.target.value;
        document.getElementById(&#39;midGain&#39;).oninput = (e) =&gt; midFilter.gain.value = e.target.value;
        document.getElementById(&#39;highGain&#39;).oninput = (e) =&gt; highFilter.gain.value = e.target.value;

        draw();
    }

    document.getElementById(&#39;audioFolder&#39;).addEventListener(&#39;change&#39;, function(e) {
        playlist = Array.from(e.target.files).filter(file =&gt; file.name.toLowerCase().endsWith(&quot;.mp3&quot;));
        if (playlist.length &gt; 0) {
            currentTrackIndex = 0;
            playTrack(currentTrackIndex);
            initAudioSystem();
        }
    });

    function playTrack(index) {
        if (index &lt; 0 || index &gt;= playlist.length) return;
        const file = playlist[index];
        audioPlayer.src = URL.createObjectURL(file);
        trackDisplay.innerText = `[${index + 1}/${playlist.length}] - ${file.name.toUpperCase()}`;
        readMetadata(file);
        audioPlayer.play();
    }

    function readMetadata(file) {
        jsmediatags.read(file, {
            onSuccess: function(tag) {
                const data = tag.tags.picture;
                if (data) {
                    const base64String = data.data.map(b =&gt; String.fromCharCode(b)).join(&quot;&quot;);
                    albumArt.src = `data:${data.format};base64,${btoa(base64String)}`;
                    albumArt.style.display = &quot;block&quot;;
                    defaultIcon.style.display = &quot;none&quot;;
                } else { resetArt(); }
            },
            onError: resetArt
        });
    }

    function resetArt() { albumArt.style.display = &quot;none&quot;; defaultIcon.style.display = &quot;block&quot;; }
    function nextTrack() { currentTrackIndex = (currentTrackIndex + 1) % playlist.length; playTrack(currentTrackIndex); }
    function prevTrack() { currentTrackIndex = (currentTrackIndex - 1 + playlist.length) % playlist.length; playTrack(currentTrackIndex); }
    audioPlayer.addEventListener(&#39;ended&#39;, nextTrack);

    function draw() {
        requestAnimationFrame(draw);
        analyser.getByteFrequencyData(dataArray);
        canvasCtx.clearRect(0, 0, canvas.width, canvas.height);
        
        const barWidth = (canvas.width / bufferLength) * 2;
        let x = 0;

        for (let i = 0; i &lt; bufferLength; i++) {
            // Ajustamos la altura para el efecto espejo
            let barHeight = dataArray[i] / 3; 

            canvasCtx.fillStyle = &#39;rgba(0, 222, 0, 0.8)&#39;;
            
            // Dibuja la parte superior (desde el centro hacia arriba)
            canvasCtx.fillRect(x, (canvas.height / 2) - barHeight, barWidth - 2, barHeight);
            
            // Dibuja la parte inferior (desde el centro hacia abajo - Espejo)
            canvasCtx.fillRect(x, canvas.height / 2, barWidth - 2, barHeight);

            x += barWidth;
        }
    }
&lt;/script&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg48N8wWwHWuKPcZIpqx-advMhnoEntl0SEt0TDZbFDBL8A02A846QeS7fzlOb1TCg9xNDzR6qqfFtf5o_cjx8w3L35-l3O4NHTQP-BFgDTIXRpS7fnbQhDEEPnmpMSR-pG7wApPuHPwfFBWIGQoIsLwo2SsffixD98XQFJtInQgGIcD0a0IAW825qX92E/s392/Vempirikmncmp.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; clear: right; float: right;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;200&quot; data-original-height=&quot;392&quot; data-original-width=&quot;392&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg48N8wWwHWuKPcZIpqx-advMhnoEntl0SEt0TDZbFDBL8A02A846QeS7fzlOb1TCg9xNDzR6qqfFtf5o_cjx8w3L35-l3O4NHTQP-BFgDTIXRpS7fnbQhDEEPnmpMSR-pG7wApPuHPwfFBWIGQoIsLwo2SsffixD98XQFJtInQgGIcD0a0IAW825qX92E/s200/Vempirikmncmp.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;vamp_2026&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4911207449677171035/posts/default/981842390314424081'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4911207449677171035/posts/default/981842390314424081'/><link rel='alternate' type='text/html' href='https://vempirik.blogspot.com/2026/01/mediaplayer.html' title='▶️mp3_Player'/><author><name>𝕬𝖗𝖒𝖆𝖓𝖉𝖔🧛V̸̻̭̜̹͎͔͒ </name><uri>http://www.blogger.com/profile/05071489392799920487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl8G6g4aDnbqqASCQ4e7WqvcVI29eYXZG2lvTWNlNUTHUJIYfMN6UEqoxtpVjjUCJPND0emj8l4r7bMxJG8CyRa997Eb_-g3dI3fewLW27DAGQlHbkGqRl7uzg3RzVFVtIR6clUqcEY6OH1RKM6qWznqfp1VPSJoTiVXYZutmVPneXug/s1600/AV%20logo.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg48N8wWwHWuKPcZIpqx-advMhnoEntl0SEt0TDZbFDBL8A02A846QeS7fzlOb1TCg9xNDzR6qqfFtf5o_cjx8w3L35-l3O4NHTQP-BFgDTIXRpS7fnbQhDEEPnmpMSR-pG7wApPuHPwfFBWIGQoIsLwo2SsffixD98XQFJtInQgGIcD0a0IAW825qX92E/s72-c/Vempirikmncmp.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4911207449677171035.post-3228414126373688173</id><published>2025-12-07T14:37:00.018-06:00</published><updated>2026-10-05T02:02:21.171-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="🎧"/><category scheme="http://www.blogger.com/atom/ns#" term="💻"/><category scheme="http://www.blogger.com/atom/ns#" term="📺"/><category scheme="http://www.blogger.com/atom/ns#" term="📻"/><title type='text'>La noche es la única regla y la luz del sol es un rumor de mal gusto.</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=VEMPIRIK&amp;amp;bbid=4911207449677171035&amp;amp;bpid=3228414126373688173&quot; style=&quot;text-align: left;&quot;&gt;VEMPIRIK&lt;/a&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Darkwave, PostPunk, DeathRock, Gothic, SynthPop, EBM, Recopilamos esos himnos que con el paso de los años siguen siendo demasiado buenos para olvidar.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;80&#39;s-90´s-00´s&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;Todo se origina por las noches, desde computadoras obsoletas (&lt;/span&gt;&lt;span style=&quot;color: #c1981a; text-align: left;&quot;&gt;👨🏻‍💻&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;algunos aun corren en WINDOWS 10,7 y hasta XP).&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;El uso y función principal de este sitio es como reproductor multimedia/audioteca&amp;nbsp;&lt;span style=&quot;color: #c1981a;&quot;&gt;🌐&amp;nbsp;&lt;/span&gt;para descubrir, conocer, escuchar música antes de la compra física.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;Comparto y agrego nuevos álbumes cada mes.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #c1981a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c1981a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c1981a;&quot;&gt;⌨️Sean discretos 👉 permanezcan sintonizados.&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnWsYdqP0nVx_8rmIC1uQIB5FqOtL-9YwOsmPuy-dIswkbfva2Mo86mys78tzxxl8yQB5jKw-Ks2gsobVJEi3RZLofji3TKAOkq9cYjhWVyJFn-OeBjjgUDbFEJzQoqXQUWDvZVCpMQddpPKi3zRPeEBIAOj68I-79MMPIeUwIcrUfSGrmRtz1S6dNzrA/s280/VAMP-VLC_-2025.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;280&quot; data-original-width=&quot;200&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnWsYdqP0nVx_8rmIC1uQIB5FqOtL-9YwOsmPuy-dIswkbfva2Mo86mys78tzxxl8yQB5jKw-Ks2gsobVJEi3RZLofji3TKAOkq9cYjhWVyJFn-OeBjjgUDbFEJzQoqXQUWDvZVCpMQddpPKi3zRPeEBIAOj68I-79MMPIeUwIcrUfSGrmRtz1S6dNzrA/s1600/VAMP-VLC_-2025.gif&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;

&lt;div class=&quot;blogger-post-footer&quot;&gt;vamp_2026&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/4911207449677171035/posts/default/3228414126373688173'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/4911207449677171035/posts/default/3228414126373688173'/><link rel='alternate' type='text/html' href='https://vempirik.blogspot.com/2025/12/bienvenida-os.html' title='La noche es la única regla y la luz del sol es un rumor de mal gusto.'/><author><name>𝕬𝖗𝖒𝖆𝖓𝖉𝖔🧛V̸̻̭̜̹͎͔͒ </name><uri>http://www.blogger.com/profile/05071489392799920487</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl8G6g4aDnbqqASCQ4e7WqvcVI29eYXZG2lvTWNlNUTHUJIYfMN6UEqoxtpVjjUCJPND0emj8l4r7bMxJG8CyRa997Eb_-g3dI3fewLW27DAGQlHbkGqRl7uzg3RzVFVtIR6clUqcEY6OH1RKM6qWznqfp1VPSJoTiVXYZutmVPneXug/s1600/AV%20logo.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnWsYdqP0nVx_8rmIC1uQIB5FqOtL-9YwOsmPuy-dIswkbfva2Mo86mys78tzxxl8yQB5jKw-Ks2gsobVJEi3RZLofji3TKAOkq9cYjhWVyJFn-OeBjjgUDbFEJzQoqXQUWDvZVCpMQddpPKi3zRPeEBIAOj68I-79MMPIeUwIcrUfSGrmRtz1S6dNzrA/s72-c/VAMP-VLC_-2025.gif" height="72" width="72"/></entry></feed>