Files

259 lines
14 KiB
HTML
Raw Permalink Normal View History

2016-12-12 10:30:34 +03:00
<!DOCTYPE html>
2019-08-02 16:31:09 +03:00
<!-- https://gitlab.com/zlax/dubtechradiopage -->
2016-12-12 10:30:34 +03:00
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!--
88 88 88
88 88 ,d 88
88 88 88 88
,adPPYb,88 88 88 88,dPPYba, MM88MMM ,adPPYba, ,adPPYba, 88,dPPYba,
a8" `Y88 88 88 88P' "8a 88 a8P_____88 a8" "" 88P' "8a
8b 88 88 88 88 d8 88 8PP""""""" 8b 88 88
"8a, ,d88 "8a, ,a88 88b, ,a8" 88, "8b, ,aa "8a, ,aa 88 88
`"8bbdP"Y8 `"YbbdP'Y8 8Y"Ybbd8"' "Y888 `"Ybbd8"' `"Ybbd8"' 88 88
-->
2018-05-17 12:30:49 +03:00
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="dub techno radio">
2026-02-02 11:49:14 +03:00
<meta name="keywords" content="dub techno radio,dub techno stream,dub techno radio stream,dubtechno radio,dub techno,dub,techno,tech,
deep,deep techno,dubtechno,radio,web radio,webradio,stream,dubtech">
2016-12-12 10:30:34 +03:00
<link rel="stylesheet" type="text/css" href="anthrstlsht.css">
<title>dub tech</title>
2026-07-25 11:26:27 +03:00
<style type="text/css">
.container { display: table; height: 100vh; }
.tabb { display: table-cell; vertical-align: middle; }
body { background: url("bclp.gif") repeat;}
2016-12-12 10:30:34 +03:00
</style>
</head>
2021-12-21 12:56:34 +03:00
<body style="background-color:#222;">
2016-12-12 10:30:34 +03:00
<div class="container">
<table class="tabb">
<tr><td>
<h5 align="right"><b><a href="http://anima.sknt.ru">Anima Amoris [Dub Techno]</a></b></h5>
2026-02-02 11:49:14 +03:00
<h5 align="right"><b><a href="http://amoris.sknt.ru/dubtechno">http://amoris.sknt.ru</a></b></h5>
</td><td><audio controls preload="none"><source src="http://amoris.sknt.ru/dubtechno" type="audio/mpeg"></audio></td><td>
<h6 id="first"></h6>
2016-12-12 10:30:34 +03:00
</td></tr><tr><td>
<h5 align="right"><b><a href="http://anima.sknt.ru">Anima Amoris [DubTech Mix]</a></b></h5>
2026-02-02 11:49:14 +03:00
<h5 align="right"><b><a href="http://amoris.sknt.ru/dubtechnomix">http://amoris.sknt.ru</a></b></h5>
</td><td><audio controls preload="none"><source src="http://amoris.sknt.ru/dubtechnomix" type="audio/mpeg"></audio></td><td>
2018-05-17 12:30:49 +03:00
<h6 id="second"></h6>
2016-12-12 10:30:34 +03:00
</td></tr><tr><td>
<h5 align="right"><b><a href="http://radcap.ru">Radio Caprice - Dub Techno</a></b></h5>
2019-08-02 16:31:09 +03:00
<h5 align="right"><b><a href="http://79.120.39.202:8002/dubtechno">http://79.120.39.202:8002/dubtechno</a></b></h5>
</td><td><audio controls preload="none"><source src="http://79.120.39.202:8002/dubtechno" type="audio/mpeg"></audio></td><td>
2021-01-16 19:17:34 +03:00
<h6 id="third"></h6>
2018-05-17 12:30:49 +03:00
</td></tr><tr><td>
2026-02-02 11:49:14 +03:00
<h5 align="right"><b><a href="https://myradio24.com/ddtradio">Deep Dub Tech radio </a></b></h5>
<h5 align="right"><b><a href="https://listen5.myradio24.com/ddtradio">https://listen5.myradio24.com/ddtradio</a></b></h5>
</td><td><audio controls src="https://listen5.myradio24.com/ddtradio" preload="none"></audio></td><td>
2021-01-16 19:17:34 +03:00
<h6 id="fourth"></h6>
2018-05-17 12:30:49 +03:00
</td></tr><tr><td>
2019-08-02 16:31:09 +03:00
<h5 align="right"><b><a href="http://schizoid.in/">Schizoid Dub Techno</a></b></h5>
<h5 align="right"><b><a href="http://94.130.113.214:8000/dubtechno">http://schizoid.in:8000/dubtechno</a></b></h5>
</td><td><audio controls preload="none"><source src="http://94.130.113.214:8000/dubtechno" type="audio/mpeg"></audio></td><td>
2021-12-21 12:56:34 +03:00
<h6 id="fifth"></h6>
2018-05-17 12:30:49 +03:00
</td></tr><tr><td>
2020-05-02 13:21:18 +03:00
<h5 align="right"><b><a href="https://mabu-beatz-radio.com/home/dub-techno/">MABU Beatz Dub Techno</a></b></h5>
<h5 align="right"><b><a href="http://78.47.31.164:8002/dub">http://78.47.31.164:8002/dub</a></b></h5>
</td><td><audio controls preload="none"><source src="http://78.47.31.164:8002/dub" type="audio/mpeg"></audio></td><td>
2021-12-21 12:56:34 +03:00
<h6 id="sixth"></h6>
2021-01-16 19:17:34 +03:00
</td></tr><tr><td>
<h5 align="right"><b><a href="http://http://mixcult.net">MixCult Deep Techno Radio</a></b></h5>
<h5 align="right"><b><a href="http://radio.mixcult.net:8000">http://radio.mixcult.net:8000</a></b></h5>
</td><td><audio controls preload="none"><source src="http://radio.mixcult.net:8000/MixCult_256kbps" type="audio/mpeg"></audio></td><td>
2021-12-21 12:56:34 +03:00
<h6 id="seventh"></h6>
</td></tr><tr><td>
2026-02-02 11:49:14 +03:00
<h5 align="right"><b><a href="http://anima.sknt.ru">Anima Amoris [Deep Techno]</a></b></h5>
<h5 align="right"><b><a href="http://amoris.sknt.ru/minimal">http://amoris.sknt.ru</a></b></h5>
</td><td><audio controls preload="none"><source src="http://amoris.sknt.ru/minimal" type="audio/mpeg"></audio></td><td>
2020-05-02 13:21:18 +03:00
<h6 id="eighth"></h6>
</td></tr><tr><td>
2026-02-02 11:49:14 +03:00
<h5 align="right"><b><a href="http://anima.sknt.ru">Anima Amoris [Deep Tech House]</a></b></h5>
<h5 align="right"><b><a href="http://amoris.sknt.ru/deeptech">http://amoris.sknt.ru</a></b></h5>
</td><td><audio controls preload="none"><source src="http://amoris.sknt.ru/deeptech" type="audio/mpeg"></audio></td><td>
2021-01-16 19:17:34 +03:00
<h6 id="ninth"></h6>
</td></tr><tr><td>
2026-02-02 11:49:14 +03:00
<h5 align="right"><b><a href="https://laut.fm/best-of-techno">Best of techno</a></b></h5>
<h5 align="right"><b><a href="https://best-of-techno.stream.laut.fm/best-of-techno">https://laut.fm/best-of-techno</a></b></h5>
</td><td><audio controls preload="none"><source src="https://best-of-techno.stream.laut.fm/best-of-techno" type="audio/mpeg"></audio></td><td>
2021-01-16 19:17:34 +03:00
<h6 id="tenth"></h6>
2026-02-02 11:49:14 +03:00
</td></tr><tr><td>
<h5 align="right"><b><a href="https://minimalmix.com/">Minimal Mix Radio</a></b></h5>
<h5 align="right"><b><a href="http://orion.shoutca.st:8750">http://orion.shoutca.st:8750</a></b></h5>
</td><td><audio controls preload="none"><source src="http://orion.shoutca.st:8750/stream" type="audio/mpeg"></audio></td><td>
<h6 id="eleventh"></h6>
</td></tr><tr><td>
<h5 align="right"><b><a href="http://www.di.fm/dubtechno">Digitally Imported Dub Techno</a></b></h5>
<h5 align="right"><b><a href="http://www.di.fm/dubtechno">http://prem2.di.fm/dubtechno_hi</a></b></h5>
</td><td><audio controls src="http://prem2.di.fm:80/dubtechno_hi?266a3dc03aaa30a0807d9062" preload="none"></audio></td><td>
<h6 id="twelfth"></h6>
2018-05-17 12:30:49 +03:00
</td><td>
</td></tr><tr><td colspan="3">
2026-02-02 11:49:14 +03:00
<br><h4 align="center"><a href="https://is3.ussr.win/dubtech/reverberations_of_the_delayed_chords">reverberations of the delayed chords</a></h4>
2016-12-12 10:30:34 +03:00
</td></tr>
</table></div>
2026-07-25 11:26:27 +03:00
<script type="text/javascript">
(function() {
console.log("--- [SYSTEM] Audio Recovery v9 (Strict Mode) ---");
var audios = document.getElementsByTagName("audio");
var active = null;
// НАСТРОЙКИ
var STALL_THRESHOLD = 5; // Секунд замирания перед восстановлением
var RECOVERY_COOLDOWN = 5000; // Пауза между попытками восстановления
//var MAX_RETRIES = 10; // Сколько раз пытаться оживить трек, прежде чем сдаться
var monitorData = {};
function bind(el, type, fn) {
if (el.addEventListener) el.addEventListener(type, fn, false);
else if (el.attachEvent) el.attachEvent("on" + type, fn);
}
function switchAudio(el) {
if (active && active !== el) {
// Если переключаемся на другой трек, старый просто ставим на паузу
try { active.load(); } catch(e) {}
// try { active.pause(); } catch(e) {}
}
active = el;
}
for (var i = 0; i < audios.length; i++) {
var audio = audios[i];
audio._index = i;
monitorData[i] = {
lastTime: 0,
stalledSince: 0,
isUserPaused: true,
lastRecoveryAttempt: 0,
retryCount: 0
};
// Событие: музыка реально начала играть
bind(audio, "playing", function() {
console.log(`[DEBUG] Поток пошел: №${this._index}`);
monitorData[this._index].isUserPaused = false;
monitorData[this._index].retryCount = 0; // Сбрасываем счетчик ошибок при успехе
switchAudio(this);
});
// Событие: нажата кнопка Play
bind(audio, "play", function() {
console.log(`[DEBUG] Нажат Play: №${this._index}`);
monitorData[this._index].isUserPaused = false;
switchAudio(this);
});
// Событие: пауза
bind(audio, "pause", function() {
// Если в момент паузы была ошибка сети — это системная пауза
if (this.error || (active === this && monitorData[this._index].stalledSince > 0)) {
console.log(`[DEBUG] Системная пауза (сбой): №${this._index}`);
monitorData[this._index].isUserPaused = false;
} else {
console.log(`[DEBUG] Пользователь поставил на паузу: №${this._index}`);
monitorData[this._index].isUserPaused = true;
}
});
bind(audio, "error", function() {
console.warn(`[DEBUG] Ошибка сети: №${this._index}`);
monitorData[this._index].isUserPaused = false;
});
}
// ГЛАВНЫЙ МОНИТОР (проверка раз в секунду)
setInterval(function() {
if (!active) return; // Если ничего не играет, не тратим ресурсы
var now = new Date().getTime();
var data = monitorData[active._index];
// Работаем ТОЛЬКО если пользователь НЕ ставил на паузу
if (!data.isUserPaused) {
// 1. Проверяем, движется ли время (currentTime)
if (Math.abs(data.lastTime - active.currentTime) < 0.1) {
data.stalledSince += 1;
} else {
data.lastTime = active.currentTime;
data.stalledSince = 0;
}
// 2. Условие восстановления: замерло на X секунд ИЛИ возникла ошибка
if (data.stalledSince >= STALL_THRESHOLD || active.error) {
// Защита от слишком частых перезагрузок и "мертвых" треков
//if (now - data.lastRecoveryAttempt > RECOVERY_COOLDOWN && data.retryCount < MAX_RETRIES) {
if (now - data.lastRecoveryAttempt > RECOVERY_COOLDOWN) {
//console.error(`[RECOVERY] Сбой трека №${active._index}. Попытка ${data.retryCount + 1}/${MAX_RETRIES}...`);
console.error(`[RECOVERY] Сбой трека №${active._index}. Попытка ${data.retryCount + 1}...`);
data.lastRecoveryAttempt = now;
data.stalledSince = 0;
data.retryCount++;
try {
// Важно: load() сбрасывает буфер и переподключается к серверу
active.load();
// Небольшая задержка перед play, чтобы load() успел сработать
setTimeout(function() {
active.play().catch(function(e) {
console.log("[RECOVERY] Браузер заблокировал автовоспроизведение (нужен клик)");
});
}, 300);
} catch(e) {
console.error("[RECOVERY] Ошибка при попытке перезапуска:", e);
}
//} else if (data.retryCount >= MAX_RETRIES) {
// // Если трек не ожил после n попыток, перестаем его мучить, чтобы не было "прыжков"
// if (active === active) {
// console.error(`[RECOVERY] Трек №${active._index} признан мертвым. Остановка восстановления.`);
// // Опционально: можно оставить как есть, чтобы пользователь сам переключил
// active = null;
// }
}
}
} else {
// Если пользователь на паузе, обнуляем счетчик замирания
data.stalledSince = 0;
}
}, 1000);
function allID() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "id.php");
xhr.send(null);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var kv = xhr.responseText.split(":;:");
var ids = ["first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth"];
for (var i = 0; i < ids.length; ++i) {
document.getElementById(ids[i]).textContent = kv[i + 1];
}
}
};
}
allID();
setInterval(allID, 20000);
})();
</script>
2016-12-12 10:30:34 +03:00
<!--
88 88 88
,d 88 88 88
88 88 88 88
MM88MMM ,adPPYba, ,adPPYba, 88,dPPYba, ,adPPYb,88 88 88 88,dPPYba,
88 a8P_____88 a8" "" 88P' "8a a8" `Y88 88 88 88P' "8a
88 8PP""""""" 8b 88 88 8b 88 88 88 88 d8
88, "8b, ,aa "8a, ,aa 88 88 "8a, ,d88 "8a, ,a88 88b, ,a8"
"Y888 `"Ybbd8"' `"Ybbd8"' 88 88 `"8bbdP"Y8 `"YbbdP'Y8 8Y"Ybbd8"'
-->
</body>
2017-06-26 14:06:58 +03:00
</html>