OR Music Live
OR Music Live sin fronteras
Nuestra señal está disponible las 24 horas. Consulta la hora local en algunas de las ciudades desde donde puedes acompañarnos.
“Hay canciones que no envejecen. Simplemente esperan el momento perfecto para volver a sonar.”
OR MUSIC LIVE/* OR_RADIO247_TEXTS_V2_20260916 */
(function(){
const API =
"https://video.ormusiclive.com:9444/api/texts/output?platform=web&screen=radio";
function ensureBox(){
const player =
document.getElementById(
"or247Player"
);
if(!player){
return null;
}
let box =
document.getElementById(
"or247TextV2"
);
if(box){
return box;
}
box =
document.createElement(
"div"
);
box.id =
"or247TextV2";
box.setAttribute(
"aria-live",
"polite"
);
const inner =
document.createElement(
"div"
);
inner.id =
"or247TextV2Inner";
box.appendChild(
inner
);
const bottom =
player.querySelector(
".or247-player-bottom"
);
if(bottom){
player.insertBefore(
box,
bottom
);
}else{
player.appendChild(
box
);
}
return box;
}
function cleanText(value){
return String(
value || ""
)
.split(/\r?\n/)
.map(
function(line){
return line.trim();
}
)
.join("\n");
}
function hide(){
const box =
ensureBox();
if(!box){
return;
}
const inner =
document.getElementById(
"or247TextV2Inner"
);
box.className =
"";
box.removeAttribute(
"style"
);
if(inner){
inner.textContent =
"";
}
}
function show(message){
const box =
ensureBox();
const inner =
document.getElementById(
"or247TextV2Inner"
);
if(
!box
||
!inner
||
!message
){
hide();
return;
}
const text =
cleanText(
message.text
);
if(!text.trim()){
hide();
return;
}
const effect =
String(
message.effect
|| "normal"
);
const color =
String(
message.color
|| "#ffffff"
);
const align =
[
"left",
"center",
"right"
].includes(
String(
message.align
|| "center"
)
)
? String(
message.align
|| "center"
)
: "center";
const intensity =
Math.max(
0,
Math.min(
100,
Number(
message.intensity
?? 55
)
)
);
const level =
intensity / 100;
const speeds = {
slow:"1.55s",
medium:"1.05s",
fast:".72s"
};
inner.textContent =
text;
inner.style.textAlign =
align;
box.style.textAlign =
align;
box.style.color =
color;
box.className =
"is-active effect-"
+ effect;
box.style.setProperty(
"--or247-pulse-speed",
speeds[
String(
message.pulse_speed
|| "medium"
)
]
|| "1.05s"
);
box.style.setProperty(
"--or247-glow-1",
Math.round(
level * 7
)
+ "px"
);
box.style.setProperty(
"--or247-glow-2",
Math.round(
level * 22
)
+ "px"
);
box.style.setProperty(
"--or247-glow-3",
Math.round(
level * 38
)
+ "px"
);
box.style.setProperty(
"--or247-brightness",
String(
1
+ level * .28
)
);
box.style.setProperty(
"--or247-saturation",
String(
1
+ level * .25
)
);
box.style.setProperty(
"--or247-pulse-low-opacity",
String(
.88
- level * .50
)
);
box.style.setProperty(
"--or247-pulse-high-scale",
String(
1
+ level * .010
)
);
box.style.setProperty(
"--or247-pulse-low-scale",
String(
1
- level * .005
)
);
}
async function refresh(){
try{
const response =
await fetch(
API
+ "&t="
+ Date.now(),
{
cache:
"no-store"
}
);
if(!response.ok){
throw new Error(
"HTTP "
+ response.status
);
}
const data =
await response.json();
if(
data.enabled
&&
data.message
){
show(
data.message
);
}else{
hide();
}
}catch(error){
hide();
}
}
setTimeout(
refresh,
600
);
setInterval(
refresh,
5000
);
})();