Simonlob commited on
Commit
949e61f
·
1 Parent(s): 49d918b

ref-audio player

Browse files
Files changed (1) hide show
  1. index.html +23 -3
index.html CHANGED
@@ -369,7 +369,17 @@
369
  transition: all 0.15s;
370
  }
371
  .file-drop:hover, .file-drop.drag { border-color: var(--accent); color: var(--accent-text); background: var(--accent-soft); }
372
- .file-name { font-size: 11px; color: var(--accent-text); margin-top: 4px; }
 
 
 
 
 
 
 
 
 
 
373
 
374
  /* Reference uploader tabs */
375
  .ref-tabs {
@@ -775,6 +785,7 @@
775
  </div>
776
  </div>
777
  <div class="file-name" id="file-name"></div>
 
778
  </div>
779
 
780
  <div class="advanced" id="advanced">
@@ -808,7 +819,7 @@ const els = {
808
  advancedToggle: $("advanced-toggle"), advanced: $("advanced"),
809
  advancedSummary: $("advanced-summary"),
810
  refSection: $("ref-section"),
811
- drop: $("drop"), fileInput: $("file-input"), fileName: $("file-name"),
812
  micBtn: $("mic-btn"), micIcon: $("mic-icon"), micState: $("mic-state"), micTime: $("mic-time"),
813
  sliders: $("sliders"),
814
  examples: $("examples"),
@@ -890,7 +901,16 @@ els.fileInput.addEventListener("change", (e) => { const f = e.target.files[0]; i
890
  ["dragenter", "dragover"].forEach(ev => els.drop.addEventListener(ev, (e) => { e.preventDefault(); els.drop.classList.add("drag"); }));
891
  ["dragleave", "drop"].forEach(ev => els.drop.addEventListener(ev, (e) => { e.preventDefault(); els.drop.classList.remove("drag"); }));
892
  els.drop.addEventListener("drop", (e) => { const f = e.dataTransfer.files[0]; if (f) setRefFile(f); });
893
- const setRefFile = (f) => { refFile = f; els.fileName.textContent = `✓ ${f.name}`; };
 
 
 
 
 
 
 
 
 
894
 
895
  // ---------- Microphone recording (MediaRecorder API) ----------
896
  let mediaRecorder = null;
 
369
  transition: all 0.15s;
370
  }
371
  .file-drop:hover, .file-drop.drag { border-color: var(--accent); color: var(--accent-text); background: var(--accent-soft); }
372
+ .file-name { font-size: 11px; color: var(--accent-text); margin-top: 4px; grid-column: 1 / -1; }
373
+
374
+ /* Reference preview player: small embedded audio to hear the recorded /
375
+ uploaded clip before rendering. Spans the full ref panel width. */
376
+ .ref-preview {
377
+ grid-column: 1 / -1;
378
+ width: 100%;
379
+ height: 34px;
380
+ margin-top: 6px;
381
+ }
382
+ .ref-preview.hidden { display: none; }
383
 
384
  /* Reference uploader tabs */
385
  .ref-tabs {
 
785
  </div>
786
  </div>
787
  <div class="file-name" id="file-name"></div>
788
+ <audio class="ref-preview hidden" id="ref-preview" controls preload="metadata"></audio>
789
  </div>
790
 
791
  <div class="advanced" id="advanced">
 
819
  advancedToggle: $("advanced-toggle"), advanced: $("advanced"),
820
  advancedSummary: $("advanced-summary"),
821
  refSection: $("ref-section"),
822
+ drop: $("drop"), fileInput: $("file-input"), fileName: $("file-name"), refPreview: $("ref-preview"),
823
  micBtn: $("mic-btn"), micIcon: $("mic-icon"), micState: $("mic-state"), micTime: $("mic-time"),
824
  sliders: $("sliders"),
825
  examples: $("examples"),
 
901
  ["dragenter", "dragover"].forEach(ev => els.drop.addEventListener(ev, (e) => { e.preventDefault(); els.drop.classList.add("drag"); }));
902
  ["dragleave", "drop"].forEach(ev => els.drop.addEventListener(ev, (e) => { e.preventDefault(); els.drop.classList.remove("drag"); }));
903
  els.drop.addEventListener("drop", (e) => { const f = e.dataTransfer.files[0]; if (f) setRefFile(f); });
904
+ let refPreviewUrl = null;
905
+ const setRefFile = (f) => {
906
+ refFile = f;
907
+ els.fileName.textContent = `✓ ${f.name}`;
908
+ // Let the user hear the clip they just recorded / uploaded before rendering.
909
+ if (refPreviewUrl) URL.revokeObjectURL(refPreviewUrl);
910
+ refPreviewUrl = URL.createObjectURL(f);
911
+ els.refPreview.src = refPreviewUrl;
912
+ els.refPreview.classList.remove("hidden");
913
+ };
914
 
915
  // ---------- Microphone recording (MediaRecorder API) ----------
916
  let mediaRecorder = null;