<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>音楽プレイヤー</title>
</head>
<body>
<h1>音楽プレイヤー</h1>
<p id="nowPlaying">選択された曲: なし</p>
<button id="initBtn">🎵 音楽再生を有効にする</button>
<audio id="audioPlayer" controls></audio>
<script>
const audioPlayer = document.getElementById("audioPlayer");
const nowPlaying = document.getElementById("nowPlaying");
const initBtn = document.getElementById("initBtn");
// ▼▼▼【追加】効果音再生用のプレイヤーと、音楽サーバーのホスト名 ▼▼▼
const sePlayer = new Audio();
// ★★★ 音楽サーバーのIPアドレス `192.168.1.11` はご自身の環境に合わせてください ★★★
const musicServerHost = 'http://192.168.1.11:8890';
// ★★★ WebSocketサーバー(大学PC)のIPアドレスはご自身の環境に合わせてください ★★★
const wsServerHost = '172.17.54.116';
let currentFileUrl = "";
const silentMp3 = "data:audio/mp3;base64,//uQxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAACcQCA//////////8AAA==";
initBtn.addEventListener("click", () => {
audioPlayer.src = silentMp3;
audioPlayer.play().then(() => {
console.log("Autoplayが許可されました");
audioPlayer.pause(); audioPlayer.src = "";
initBtn.disabled = true; initBtn.style.display = "none";
}).catch(err => console.error("初期再生失敗", err));
});
const conn = new WebSocket(`ws://${wsServerHost}:8888`);
conn.onmessage = ev => {
let msg;
try { msg = JSON.parse(ev.data); } catch { return; }
switch (msg.type) {
case "select":
currentFileUrl = msg.url;
audioPlayer.src = currentFileUrl;
nowPlaying.textContent = `選択された曲: ${decodeURIComponent(currentFileUrl.split('/').pop())}`;
console.log("曲読み込み:", currentFileUrl);
break;
case "play":
if (!currentFileUrl) return;
audioPlayer.play().catch(err => console.error("再生失敗:", err));
break;
case "pause":
audioPlayer.pause();
break;
case "stop":
audioPlayer.pause();
audioPlayer.currentTime = 0;
break;
case "announce":
if (msg.queue && msg.queue.length > 0) {
if (!audioPlayer.paused) {
audioPlayer.pause();
console.log("挙手があったため再生を一時停止しました。");
}
}
break;
// ▼▼▼【追加】正解・不正解の処理 ▼▼▼
case "correct":
audioPlayer.pause();
audioPlayer.currentTime = 0;
sePlayer.src = `${musicServerHost}/SE/correct.mp3`;
sePlayer.play();
nowPlaying.innerHTML = `⭕ 正解!<br>答え: ${decodeURIComponent(msg.answer)}`;
break;
case "incorrect":
audioPlayer.pause(); // 曲は一時停止
sePlayer.src = `${musicServerHost}/SE/incorrect.mp3`;
sePlayer.play();
nowPlaying.textContent = `❌ 不正解...`;
break;
}
};
conn.onopen = () => console.log("WebSocket 接続成功!");
conn.onerror = (e) => console.error("WebSocket エラー", e);
conn.onclose = () => console.log("WebSocket 切断");
</script>
</body>
</html>