Die erste Version der Aufnahme wird als Original auf dem Server behalten. Weitere Schnitte sind möglich und können jederzeit auf das Original zurückgesetzt werden.
+
Die Originalaufnahme bleibt unverändert. Aus dem gewählten Bereich wird eine fertige Aufnahme im separaten Ausgabeordner erstellt.
@@ -297,6 +303,7 @@ const wave = document.getElementById('wave');
const startHandle = document.getElementById('startHandle');
const endHandle = document.getElementById('endHandle');
const selection = document.getElementById('selection');
+const playhead = document.getElementById('playhead');
const audio = document.getElementById('audio');
function fmt(sec) {
@@ -320,6 +327,11 @@ function render() {
document.getElementById('startValue').textContent = fmt(start);
document.getElementById('endValue').textContent = fmt(end);
document.getElementById('keepValue').textContent = fmt(end-start);
+ renderPlayhead();
+}
+function renderPlayhead() {
+ const t = Math.max(0, Math.min(duration, audio.currentTime || 0));
+ playhead.style.left = ((t/duration)*100)+'%';
}
function beginDrag(which, e) {
e.preventDefault();
@@ -343,11 +355,31 @@ wave.addEventListener('pointerdown', e => {
});
audio.addEventListener('timeupdate', () => {
document.getElementById('position').textContent=fmt(audio.currentTime);
+ renderPlayhead();
if (audio.currentTime >= end && !audio.paused) audio.pause();
});
-function jump(sec) { audio.currentTime=Math.max(0,Math.min(duration,audio.currentTime+sec)); }
-function playFromStart() { audio.currentTime=start; audio.play(); }
-function playSelection() { audio.currentTime=start; audio.play(); }
+audio.addEventListener('seeking', renderPlayhead);
+function jump(sec) { audio.currentTime=Math.max(0,Math.min(duration,audio.currentTime+sec)); renderPlayhead(); }
+function playFromStart() { audio.currentTime=start; renderPlayhead(); audio.play(); }
+function playSelection() { audio.currentTime=start; renderPlayhead(); audio.play(); }
+function setStartAtCurrent() {
+ const t = Math.max(0, Math.min(duration, audio.currentTime || 0));
+ if (t >= end - 0.5) {
+ msg('Der Anfang muss mindestens 0,5 s vor dem Ende liegen.', false);
+ return;
+ }
+ start = t;
+ render();
+}
+function setEndAtCurrent() {
+ const t = Math.max(0, Math.min(duration, audio.currentTime || 0));
+ if (t <= start + 0.5) {
+ msg('Das Ende muss mindestens 0,5 s nach dem Anfang liegen.', false);
+ return;
+ }
+ end = t;
+ render();
+}
function msg(text, ok) {
const el=document.getElementById('message'); el.textContent=text; el.className='message '+(ok?'ok':'error');
}