soiz1 commited on
Commit
6b5dfcc
·
1 Parent(s): 0581458

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +35 -47
index.html CHANGED
@@ -1407,32 +1407,29 @@ function checkSync() {
1407
  let isCheckingSync = false;
1408
  let isInBackgroundTab = false;
1409
 
1410
- // visibilitychange イベントリスナーの修正
1411
  document.addEventListener('visibilitychange', async () => {
1412
  if (document.hidden) {
1413
  // タブが非表示になった場合
1414
  isInBackgroundTab = true;
1415
- stopSyncCheck();
1416
-
1417
- // 現在の再生状態と時間を保存
1418
- const wasPlaying = isPlaying;
1419
- const savedTime = video.currentTime;
1420
-
1421
- // メディアを一時停止
1422
- pauseMedia();
1423
 
1424
- // タブが再表示されたときに復元するためのデータを保存
1425
- video.dataset.wasPlaying = wasPlaying;
1426
- video.dataset.savedTime = savedTime;
 
 
 
 
 
 
1427
 
1428
  try {
1429
  // PiP表示を試みる
1430
- if (wasPlaying) {
1431
  await enterPiP();
1432
  if (document.pictureInPictureElement) {
1433
  isInBackgroundTab = false;
1434
  startSyncCheck();
1435
- playMedia(); // PiPでは再生を続ける
1436
  }
1437
  }
1438
  } catch (e) {
@@ -1449,22 +1446,15 @@ document.addEventListener('visibilitychange', async () => {
1449
  console.warn('PiP終了失敗:', e);
1450
  }
1451
 
1452
- // 保存された状態を復元
1453
- const wasPlaying = video.dataset.wasPlaying === 'true';
1454
- const savedTime = parseFloat(video.dataset.savedTime) || 0;
1455
-
1456
- if (wasPlaying) {
1457
- // 保存された時間にシーク
1458
- video.currentTime = savedTime;
1459
- if (combinedAudioElement) {
1460
- combinedAudioElement.currentTime = savedTime;
1461
- }
1462
-
1463
- // 再生を再開
1464
- playMedia();
1465
  }
1466
 
1467
- // タブに戻った直後に一度だけ同期チェックを実行
1468
  if (isPlaying) {
1469
  checkSync();
1470
  startSyncCheck();
@@ -1472,6 +1462,7 @@ document.addEventListener('visibilitychange', async () => {
1472
  }
1473
  });
1474
 
 
1475
  // 動画終了時に自動的にPiPを閉じる(次回再開のため)
1476
  video.addEventListener('ended', exitPiP);
1477
  // 合成後に音量と再生速度を適用
@@ -1709,7 +1700,6 @@ function playMedia() {
1709
  const startTime = parseFloat(startTimeInput.value) || 0;
1710
  const endTime = parseFloat(endTimeInput.value) || duration;
1711
 
1712
- // 現在の時間が終了時間を超えている場合は開始時間に戻す
1713
  if (video.currentTime >= endTime) {
1714
  video.currentTime = startTime;
1715
  }
@@ -1721,9 +1711,10 @@ function playMedia() {
1721
  isPlaying = true;
1722
  playPauseBtn.textContent = '⏸';
1723
 
1724
- // 音声が合成されている場合は同期
1725
  if (isAudioCombined) {
1726
- syncAudioWithVideo();
 
1727
  }
1728
 
1729
  startSyncCheck();
@@ -1731,34 +1722,31 @@ function playMedia() {
1731
  video.playbackRate = currentPlaybackRate;
1732
  }).catch(error => {
1733
  console.error('動画再生エラー:', error);
1734
- // 再生に失敗した場合は一時停止状態に設定
1735
  isPlaying = false;
1736
  playPauseBtn.textContent = '▶';
1737
  });
1738
  }
1739
  } catch (error) {
1740
  console.error('メディア再生エラー:', error);
1741
- // エラーが発生した場合は一時停止状態に設定
1742
  isPlaying = false;
1743
  playPauseBtn.textContent = '▶';
1744
  }
1745
  }
1746
-
1747
- // 一時停止関数
1748
- function pauseMedia() {
1749
- try {
1750
- video.pause();
1751
- isPlaying = false;
1752
- playPauseBtn.textContent = '▶';
1753
- stopSyncCheck();
1754
-
1755
- if (combinedAudioElement) {
1756
- combinedAudioElement.pause();
1757
- }
1758
- } catch (error) {
1759
- console.error('メディア一時停止エラー:', error);
1760
  }
 
 
1761
  }
 
1762
 
1763
  // 時間更新時の処理
1764
  video.addEventListener('timeupdate', function() {
 
1407
  let isCheckingSync = false;
1408
  let isInBackgroundTab = false;
1409
 
 
1410
  document.addEventListener('visibilitychange', async () => {
1411
  if (document.hidden) {
1412
  // タブが非表示になった場合
1413
  isInBackgroundTab = true;
 
 
 
 
 
 
 
 
1414
 
1415
+ // 動画のみ一時停止(音声は再生を続ける)
1416
+ if (isPlaying) {
1417
+ video.pause();
1418
+
1419
+ // 音声は再生を続ける
1420
+ if (combinedAudioElement && !combinedAudioElement.paused) {
1421
+ // 何もしない(再生を継続)
1422
+ }
1423
+ }
1424
 
1425
  try {
1426
  // PiP表示を試みる
1427
+ if (isPlaying) {
1428
  await enterPiP();
1429
  if (document.pictureInPictureElement) {
1430
  isInBackgroundTab = false;
1431
  startSyncCheck();
1432
+ video.play().catch(e => console.error('PiP再生エラー:', e));
1433
  }
1434
  }
1435
  } catch (e) {
 
1446
  console.warn('PiP終了失敗:', e);
1447
  }
1448
 
1449
+ // 音声が再生中の場合、動画を音声に同期
1450
+ if (combinedAudioElement && !combinedAudioElement.paused) {
1451
+ video.currentTime = combinedAudioElement.currentTime;
1452
+ video.play().catch(e => console.error('動画再生エラー:', e));
1453
+ isPlaying = true;
1454
+ playPauseBtn.textContent = '⏸';
 
 
 
 
 
 
 
1455
  }
1456
 
1457
+ // 同期チェックを再開
1458
  if (isPlaying) {
1459
  checkSync();
1460
  startSyncCheck();
 
1462
  }
1463
  });
1464
 
1465
+
1466
  // 動画終了時に自動的にPiPを閉じる(次回再開のため)
1467
  video.addEventListener('ended', exitPiP);
1468
  // 合成後に音量と再生速度を適用
 
1700
  const startTime = parseFloat(startTimeInput.value) || 0;
1701
  const endTime = parseFloat(endTimeInput.value) || duration;
1702
 
 
1703
  if (video.currentTime >= endTime) {
1704
  video.currentTime = startTime;
1705
  }
 
1711
  isPlaying = true;
1712
  playPauseBtn.textContent = '⏸';
1713
 
1714
+ // 音声を同期して再生
1715
  if (isAudioCombined) {
1716
+ combinedAudioElement.currentTime = video.currentTime;
1717
+ combinedAudioElement.play().catch(e => console.error('音声再生エラー:', e));
1718
  }
1719
 
1720
  startSyncCheck();
 
1722
  video.playbackRate = currentPlaybackRate;
1723
  }).catch(error => {
1724
  console.error('動画再生エラー:', error);
 
1725
  isPlaying = false;
1726
  playPauseBtn.textContent = '▶';
1727
  });
1728
  }
1729
  } catch (error) {
1730
  console.error('メディア再生エラー:', error);
 
1731
  isPlaying = false;
1732
  playPauseBtn.textContent = '▶';
1733
  }
1734
  }
1735
+
1736
+ function pauseMedia() {
1737
+ try {
1738
+ video.pause();
1739
+ isPlaying = false;
1740
+ playPauseBtn.textContent = '▶';
1741
+ stopSyncCheck();
1742
+
1743
+ if (combinedAudioElement) {
1744
+ combinedAudioElement.pause();
 
 
 
 
1745
  }
1746
+ } catch (error) {
1747
+ console.error('メディア一時停止エラー:', error);
1748
  }
1749
+ }
1750
 
1751
  // 時間更新時の処理
1752
  video.addEventListener('timeupdate', function() {