音声・動画同時再生対応 速度可変トレーニングプレーヤー Multi Player 音声・動画同時再生対応 速度可変トレーニングプレーヤー 動画 動画をアップロードMP4, WebM, MOV対応 – – 削除 音声 音声をアップロードMP3, WAV, M4A対応 – – 削除 音声と動画を同期再生中 0:000:00 再生速度1.0x 0.25x 0.5x 0.75x 1.0x 1.25x 1.5x 2.0x 区間リピート 開始0:00 終了0:00 区間 0:00 最初10秒 最後10秒 現在から30秒 全体 音量70% ';}waveformBars.innerHTML=html;}function setupEventHandlers(){if(videoInput){videoInput.onchange=function(){if(this.files&&this.files[0]){loadVideo(this.files[0]);}};}if(audioInput){audioInput.onchange=function(){if(this.files&&this.files[0]){loadAudio(this.files[0]);}};}if(videoRemove){videoRemove.onclick=function(e){e.preventDefault();e.stopPropagation();removeVideo();};}if(audioRemove){audioRemove.onclick=function(e){e.preventDefault();e.stopPropagation();removeAudio();};}if(playBtn){playBtn.onclick=function(e){e.preventDefault();e.stopPropagation();togglePlay();};}if(rewindBtn){rewindBtn.onclick=function(e){e.preventDefault();e.stopPropagation();seek(-10);};}if(forwardBtn){forwardBtn.onclick=function(e){e.preventDefault();e.stopPropagation();seek(10);};}if(speedSlider){speedSlider.oninput=function(){var speed=parseInt(this.value,10)/100;setPlaybackRate(speed);};}if(volSlider){volSlider.oninput=function(){var vol=parseInt(this.value,10)/100;setVolume(vol);};}if(loopToggle){loopToggle.onclick=function(e){e.preventDefault();e.stopPropagation();toggleLoop();};}if(loopStartSlider){loopStartSlider.oninput=function(){var pct=parseInt(this.value,10);loopStart=(pct/100)*duration;if(loopStart>=loopEnd-1){loopStart=loopEnd-1;this.value=Math.floor((loopStart/duration)*100);}updateLoopDisplay();};}if(loopEndSlider){loopEndSlider.oninput=function(){var pct=parseInt(this.value,10);loopEnd=(pct/100)*duration;if(loopEnd=audio.duration?video:audio;}else if(hasVideo){syncStatus.classList.remove('tnv-show');duration=video.duration;masterMedia=video;}else if(hasAudio){syncStatus.classList.remove('tnv-show');duration=audio.duration;masterMedia=audio;}else{syncStatus.classList.remove('tnv-show');duration=0;masterMedia=null;}loopEnd=duration;timeTotal.textContent=formatTime(duration);updateLoopDisplay();}function togglePlay(){if(!masterMedia||duration';if(hasVideo)video.play();if(hasAudio)audio.play();startUpdateLoop();}function stopPlayback(){isPlaying=false;playBtn.classList.remove('tnv-playing');playIcon.innerHTML='';if(hasVideo)video.pause();if(hasAudio)audio.pause();if(animFrame){cancelAnimationFrame(animFrame);animFrame=null;}}function startUpdateLoop(){function update(){if(!isPlaying)return;if(masterMedia){currentTime=masterMedia.currentTime;updateProgress();syncMedia();checkLoop();}animFrame=requestAnimationFrame(update);}update();}function updateProgress(){var pct=(currentTime/duration)*100;progress.style.width=pct+'%';timeCurrent.textContent=formatTime(currentTime);updateWaveformBars();}function updateWaveformBars(){var bars=waveformBars.querySelectorAll('.tnv-waveform-bar');var activeBars=Math.floor((currentTime/duration)*bars.length);for(var i=0;i0.1){if(masterMedia===video){audio.currentTime=vt;}else{video.currentTime=at;}}}function checkLoop(){if(!loopEnabled)return;if(currentTime>=loopEnd){seekTo(loopStart);}}function seek(seconds){if(!masterMedia||duration いいね:いいね 読み込み中…