1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./module-C16d28tm.js","./module-DYU7z__K.js","./module-Bkn9j7N6.js"])))=>i.map(i=>d[i]); 2import { p as prop, i as if_block, k as each, u as index, d as bind_this, b as set_class, f as set_style, h as clsx, a as set_attribute, r as rest_props, g as spread_props } from './i18n-CMo5lpzy.js'; 3import { R as push, aa as onMount, V as child, Y as reset, t as template_effect, a as append, T as pop, a0 as set_text, a6 as comment, S as first_child, w as get, W as from_html, aj as delegate, u as state, v as proxy, ae as onDestroy, y as user_effect, x as set, X as sibling, aN as update, a5 as user_derived, af as __vitePreload, au as prepare_files, M as tick } from './index-BvBk1Iap.js'; 4import { f as format_time, u as uploadToHuggingFace, G as Gradio } from './utils.svelte-CYLB_jIA.js'; 5import { S as Static } from './index-Lz7fsHFt.js'; 6import './StreamingBar.svelte_svelte_type_style_lang-CdFIGsJa.js'; 7import { W as WaveformControls, A as AudioPlayer, S as StaticAudio } from './StaticAudio-DGaZb-fW.js'; 8import { s as snippet } from './snippet-Bl5YVoCg.js'; 9import { U as Upload } from './Upload-CPeZiqam.js'; 10import { M as ModifyUpload } from './ModifyUpload-B5K-5Hqx.js'; 11import { S as SelectSource } from './ScrollFade.svelte_svelte_type_style_lang-Xm-PLg9E.js'; 12import { B as BlockLabel } from './BlockLabel-oGSqUii_.js'; 13import { S as ShareButton } from './ShareButton-Dz0y1C1K.js'; 14import { M as Music } from './Music-D0NN2hV9.js'; 15import { C as CustomButton } from './IconButtonWrapper-Ba0GidgU.js'; 16import { S as StreamingBar } from './StreamingBar-bVF1kkqe.js'; 17import { s as skip_audio, u, p as process_audio } from './MinimalAudioPlayer-Cdqg8MIC.js'; 18import { o } from './record.esm-BVY9RaAH.js'; 19import { P as Pause } from './VolumeLevels-DHAc0pUL.js'; 20import { S as Spinner } from './Spinner-BrK-6emq.js'; 21import { B as Block } from './Block-Bx3BikCN.js'; 22import { U as UploadText } from './UploadText-BSD1IoCI.js'; 23export { default as BaseExample } from './Example-hTHSlRG1.js'; 24import './clone-DaB-S2nH.js'; 25import './Clear-Dgs5UhTO.js'; 26import './html-CdUEtR5E.js'; 27import './index-C7e-J7CF.js'; 28import './DownloadLink-KvrFKyMn.js'; 29import './Empty-CHa-gxv7.js'; 30import './Download-pFhUaTl4.js'; 31import './Play-CWcFSzc7.js'; 32import './Undo-BxcJDM8E.js'; 33import './actions-Cit_UA5S.js'; 34import './Edit-Dr58YXBX.js'; 35 36var root_1$4 = from_html(`<option> </option>`); 37var root_3$2 = from_html(`<option> </option>`); 38var root$3 = from_html(`<select class="mic-select svelte-ym1wxn" aria-label="Select input device"><!></select>`); 39 40function DeviceSelect($$anchor, $$props) { 41 push($$props, true); 42 43 let micDevices = prop($$props, 'micDevices', 15); 44 45 onMount(() => { 46 if (typeof window !== "undefined" && navigator.mediaDevices) { 47 let tempDevices = []; 48 49 o.getAvailableAudioDevices().then((devices) => { 50 micDevices(devices); 51 52 devices.forEach((device) => { 53 if (device.deviceId) { 54 tempDevices.push(device); 55 } 56 }); 57 58 micDevices(tempDevices); 59 }).catch((err) => { 60 if (err instanceof DOMException && err.name == "NotAllowedError") { 61 $$props.onerror?.($$props.i18n("audio.allow_recording_access")); 62 } 63 }); 64 } 65 }); 66 67 var select = root$3(); 68 var node = child(select); 69 70 { 71 var consequent = ($$anchor) => { 72 var option = root_1$4(); 73 var text = child(option, true); 74 75 reset(option); 76 option.value = option.__value = ''; 77 template_effect(($0) => set_text(text, $0), [() => $$props.i18n("audio.no_microphone")]); 78 append($$anchor, option); 79 }; 80 81 var alternate = ($$anchor) => { 82 var fragment = comment(); 83 var node_1 = first_child(fragment); 84 85 each(node_1, 17, micDevices, index, ($$anchor, micDevice) => { 86 var option_1 = root_3$2(); 87 var text_1 = child(option_1, true); 88 89 reset(option_1); 90 91 var option_1_value = {}; 92 93 template_effect(() => { 94 set_text(text_1, get(micDevice).label); 95 96 if (option_1_value !== (option_1_value = get(micDevice).deviceId)) { 97 option_1.value = (option_1.__value = get(micDevice).deviceId) ?? ''; 98 } 99 }); 100 101 append($$anchor, option_1); 102 }); 103 104 append($$anchor, fragment); 105 }; 106 107 if_block(node, ($$render) => { 108 if (!micDevices() || micDevices().length === 0) $$render(consequent); else $$render(alternate, false); 109 }); 110 } 111 112 reset(select); 113 template_effect(() => select.disabled = !micDevices() || micDevices().length === 0); 114 append($$anchor, select); 115 pop(); 116} 117 118var root_1$3 = from_html(`<time class="duration-button duration svelte-1xuh0j1"> </time>`); 119var root$2 = from_html(`<div class="controls svelte-1xuh0j1"><div class="wrapper svelte-1xuh0j1"><button class="record record-button svelte-1xuh0j1"> </button> <button> </button> <button id="stop-paused" class="stop-button-paused svelte-1xuh0j1"> </button>
119 <button aria-label="pause" class="pause-button svelte-1xuh0j1"><!></button> <button class="resume-button svelte-1xuh0j1"> </button> <!></div> <!></div>`); 120 121function WaveformRecordControls($$anchor, $$props) { 122 push($$props, true); 123 124 let recording = prop($$props, 'recording', 3, false), 125 timing = prop($$props, 'timing', 3, false); 126 127 let micDevices = state(proxy([])); 128 let recordButton; 129 let pauseButton; 130 let resumeButton; 131 let stopButton; 132 let stopButtonPaused; 133 let recording_ongoing = state(false); 134 135 const handleRecordStart = () => { 136 recordButton.style.display = "none"; 137 stopButton.style.display = "flex"; 138 pauseButton.style.display = "block"; 139 }; 140 141 const handleRecordEnd = () => { 142 if ($$props.record.isPaused()) { 143 $$props.record.resumeRecording(); 144 $$props.record.stopRecording(); 145 } 146 147 $$props.record.stopMic(); 148 recordButton.style.display = "flex"; 149 stopButton.style.display = "none"; 150 pauseButton.style.display = "none"; 151 recordButton.disabled = false; 152 }; 153 154 const handleRecordPause = () => { 155 pauseButton.style.display = "none"; 156 resumeButton.style.display = "block"; 157 stopButton.style.display = "none"; 158 stopButtonPaused.style.display = "flex"; 159 }; 160 161 const handleRecordResume = () => { 162 pauseButton.style.display = "block"; 163 resumeButton.style.display = "none"; 164 recordButton.style.display = "none"; 165 stopButton.style.display = "flex"; 166 stopButtonPaused.style.display = "none"; 167 }; 168 169 onMount(() => { 170 $$props.record.on("record-start", handleRecordStart); 171 $$props.record.on("record-end", handleRecordEnd); 172 $$props.record.on("record-pause", handleRecordPause); 173 $$props.record.on("record-resume", handleRecordResume); 174 }); 175 176 onDestroy(() => { 177 $$props.record.un("record-start", handleRecordStart); 178 $$props.record.un("record-end", handleRecordEnd); 179 $$props.record.un("record-pause", handleRecordPause); 180 $$props.record.un("record-resume", handleRecordResume); 181 }); 182 183 user_effect(() => { 184 if (recording() && !get(recording_ongoing)) { 185 $$props.record.startMic().then(() => { 186 $$props.record.startRecording(); 187 set(recording_ongoing, true); 188 }); 189 } else if (!recording() && get(recording_ongoing)) { 190 if ($$props.record.isPaused()) { 191 $$props.record.resumeRecording(); 192 } 193 194 $$props.record.stopRecording(); 195 set(recording_ongoing, false); 196 } 197 }); 198 199 var div = root$2(); 200 var div_1 = child(div); 201 var button = child(div_1); 202 203 button.__click = () => $$props.record.startRecording(); 204 205 var text = child(button, true); 206 207 reset(button); 208 bind_this(button, ($$value) => recordButton = $$value, () => recordButton); 209 210 var button_1 = sibling(button, 2); 211 212 button_1.__click = () => { 213 if ($$props.record.isPaused()) { 214 $$props.record.resumeRecording(); 215 $$props.record.stopRecording(); 216 } 217 218 $$props.record.stopRecording(); 219 }; 220 221 var text_1 = child(button_1, true); 222 223 reset(button_1); 224 bind_this(button_1, ($$value) => stopButton = $$value, () => stopButton); 225 226 var button_2 = sibling(button_1, 2); 227 228 button_2.__click = () => { 229 if ($$props.record.isPaused()) { 230 $$props.record.resumeRecording(); 231 $$props.record.stopRecording(); 232 } 233 234 $$props.record.stopRecording(); 235 }; 236 237 var text_2 = child(button_2, true); 238 239 reset(button_2); 240 bind_this(button_2, ($$value) => stopButtonPaused = $$value, () => stopButtonPaused); 241 242 var button_3 = sibling(button_2, 2); 243 244 button_3.__click = () => $$props.record.pauseRecording(); 245 246 var node = child(button_3); 247 248 Pause(node); 249 reset(button_3); 250 bind_this(button_3, ($$value) => pauseButton = $$value, () => pauseButton); 251 252 var button_4 = sibling(button_3, 2); 253 254 button_4.__click = () => $$props.record.resumeRecording(); 255 256 var text_3 = child(button_4, true); 257 258 reset(button_4); 259 bind_this(button_4, ($$value) => resumeButton = $$value, () => resumeButton); 260 261 var node_1 = sibling(button_4, 2); 262 263 { 264 var consequent = ($$anchor) => { 265 var time = root_1$3(); 266 var text_4 = child(time, true); 267 268 reset(time); 269 template_effect(() => set_text(text_4, $$props.record_time)); 270 append($$anchor, time); 271 }; 272 273 if_block(node_1, ($$render) => { 274 if (timing() && !$$props.show_recording_waveform) $$render(consequent); 275 }); 276 } 277 278 reset(div_1); 279 280 var node_2 = sibling(div_1, 2); 281 282 DeviceSelect(node_2, { 283 get i18n() { 284 return $$props.i18n; 285 }, 286 287 get micDevices() { 288 return get(micDevices); 289 }, 290 291 set micDevices($$value) { 292 set(micDevices, $$value, true); 293 } 294 }); 295 296 reset(div); 297 298 template_effect( 299 ($0, $1, $2, $3, $4) => { 300 set_text(text, $0); 301 set_class(button_1, 1, `stop-button ${$1 ?? ''}`, 'svelte-1xuh0j1'); 302 set_text(text_1, $2); 303 set_text(text_2, $3); 304 set_text(text_3, $4); 305 }, 306 [ 307 () => $$props.i18n("audio.record"), 308 () => $$props.record.isPaused() ? 'stop-button-paused' : '', 309 () => $$props.i18n("audio.stop"), 310 () => $$props.i18n("audio.stop"), 311 () => $$props.i18n("audio.resume") 312 ] 313 ); 314 315 append($$anchor, div); 316 pop(); 317} 318 319delegate(['click']); 320 321var root_2$2 = from_html(`<time class="trim-duration svelte-j9q3sk"> </time>`); 322var root_3$1 = from_html(`<time class="duration svelte-j9q3sk"> </time>`); 323var root_4$2 = from_html(`<time class="duration svelte-j9q3sk">0:00</time>`); 324var root_1$2 = from_html(`<div class="timestamps svelte-j9q3sk"><time class="time svelte-j9q3sk">0:00</time> <div><!> <!></div></div>`); 325var root$1 = from_html(`<div class="component-wrapper svelte-j9q3sk"><div class="microphone svelte-j9q3sk" data-testid="microphone-waveform"></div> <div data-testid="recording-waveform"></div> <!> <!> <!></div>`); 326 327function AudioRecorder($$anchor, $$props) { 328 push($$props, true); 329 330 let mode = prop($$props, 'mode', 15), 331 waveform_options = prop($$props, 'waveform_options', 19, () => ({ show_recording_waveform: true })), 332 editable = prop($$props, 'editable', 3, true), 333 recording = prop($$props, 'recording', 3, false); 334 335 let micWaveform; 336 let recordingWaveform = state(undefined); 337 let playing = state(false); 338 let recordingContainer; 339 let microphoneContainer; 340 let record = state(undefined); 341 let recordedAudio = state(null); 342 343 // timestamps 344 let timeRef; 345 346 let durationRef; 347 let audio_duration = state(0); 348 let seconds = state(0); 349 let interval; 350 let timing = state(false); 351 352 // trimming 353 let trimDuration = state(0); 354 355 let record_mounted = state(false); 356 357 const start_interval = () => { 358 clearInterval(interval); 359 360 interval = setInterval( 361 () => { 362 update(seconds); 363 }, 364 1000 365 ); 366 }; 367 368 function record_start_callback() { 369 start_interval(); 370 set(timing, true); 371 $$props.onstartrecording?.(); 372 373 if (waveform_options().show_recording_waveform) { 374 let waveformCanvas = microphoneContainer; 375 376 if (waveformCanvas) waveformCanvas.style.display = "block"; 377 } 378 } 379 380 async function record_end_callback(blob) { 381 set(seconds, 0); 382 set(timing, false); 383 clearInterval(interval); 384 385 try { 386 const array_buffer = await blob.arrayBuffer(); 387 const context = new AudioContext({ sampleRate: $$props.waveform_settings.sampleRate }); 388 const audio_buffer = await context.decodeAudioData(array_buffer); 389
390 if (audio_buffer) await process_audio(audio_buffer).then(async (audio) => { 391 await $$props.dispatch_blob([audio], "change"); 392 await $$props.dispatch_blob([audio], "stop_recording"); 393 }); 394 } catch(e) { 395 console.error(e); 396 } 397 } 398 399 user_effect(() => { 400 get(record)?.on("record-resume", () => { 401 start_interval(); 402 }); 403 }); 404 405 user_effect(() => { 406 get(recordingWaveform)?.on("decode", (duration) => { 407 set(audio_duration, duration, true); 408 durationRef && (durationRef.textContent = format_time(duration)); 409 }); 410 }); 411 412 user_effect(() => { 413 get(recordingWaveform)?.on("timeupdate", (currentTime) => timeRef && (timeRef.textContent = format_time(currentTime))); 414 }); 415 416 user_effect(() => { 417 get(recordingWaveform)?.on("pause", () => { 418 $$props.onpause?.(); 419 set(playing, false); 420 }); 421 }); 422 423 user_effect(() => { 424 get(recordingWaveform)?.on("play", () => { 425 $$props.onplay?.(); 426 set(playing, true); 427 }); 428 }); 429 430 user_effect(() => { 431 get(recordingWaveform)?.on("finish", () => { 432 $$props.onstop?.(); 433 set(playing, false); 434 }); 435 }); 436 437 const create_mic_waveform = () => { 438 if (microphoneContainer) microphoneContainer.innerHTML = ""; 439 if (micWaveform !== undefined) micWaveform.destroy(); 440 if (!microphoneContainer) return; 441 442 micWaveform = u.create({ 443 ...$$props.waveform_settings, 444 normalize: false, 445 container: microphoneContainer 446 }); 447 448 set(record, micWaveform.registerPlugin(o.create()), true); 449 get(record)?.on("record-end", record_end_callback); 450 get(record)?.on("record-start", record_start_callback); 451 452 get(record)?.on("record-pause", () => { 453 $$props.onpauserecording?.(); 454 clearInterval(interval); 455 }); 456 457 get(record)?.on("record-end", (blob) => { 458 set(recordedAudio, URL.createObjectURL(blob), true); 459 460 const microphone = microphoneContainer; 461 const recording = recordingContainer; 462 463 if (microphone) microphone.style.display = "none"; 464 465 if (recording && get(recordedAudio)) { 466 recording.innerHTML = ""; 467 create_recording_waveform(); 468 } 469 }); 470 471 set(record_mounted, true); 472 }; 473 474 const create_recording_waveform = () => { 475 let recording = recordingContainer; 476 477 if (!get(recordedAudio) || !recording) return; 478 479 set( 480 recordingWaveform, 481 u.create({ 482 container: recording, 483 url: get(recordedAudio), 484 ...$$props.waveform_settings 485 }), 486 true 487 ); 488 }; 489 490 const handle_trim_audio = async (start, end) => { 491 mode("edit"); 492 493 const decodedData = get(recordingWaveform)?.getDecodedData(); 494 495 if (decodedData) await process_audio(decodedData, start, end).then(async (trimmedAudio) => { 496 await $$props.dispatch_blob([trimmedAudio], "change"); 497 await $$props.dispatch_blob([trimmedAudio], "stop_recording"); 498 get(recordingWaveform)?.destroy(); 499 create_recording_waveform(); 500 }); 501 502 $$props.onedit?.(); 503 }; 504 505 onMount(() => { 506 create_mic_waveform(); 507 508 window.addEventListener("keydown", (e) => { 509 const is_focused_in_waveform = recordingContainer && recordingContainer.contains(document.activeElement); 510 511 if (!is_focused_in_waveform) return; 512 513 if (e.key === "ArrowRight") { 514 skip_audio(get(recordingWaveform), 0.1); 515 } else if (e.key === "ArrowLeft") { 516 skip_audio(get(recordingWaveform), -0.1); 517 } 518 }); 519 }); 520 521 var div = root$1(); 522 var div_1 = child(div); 523 524 bind_this(div_1, ($$value) => microphoneContainer = $$value, () => microphoneContainer); 525 526 var div_2 = sibling(div_1, 2); 527 528 bind_this(div_2, ($$value) => recordingContainer = $$value, () => recordingContainer); 529 530 var node = sibling(div_2, 2); 531 532 { 533 var consequent_2 = ($$anchor) => { 534 var div_3 = root_1$2(); 535 var time = child(div_3); 536 537 bind_this(time, ($$value) => timeRef = $$value, () => timeRef); 538 539 var div_4 = sibling(time, 2); 540 var node_1 = child(div_4); 541 542 { 543 var consequent = ($$anchor) => { 544 var time_1 = root_2$2(); 545 var text = child(time_1, true); 546 547 reset(time_1); 548 template_effect(($0) => set_text(text, $0), [() => format_time(get(trimDuration))]); 549 append($$anchor, time_1); 550 }; 551 552 if_block(node_1, ($$render) => { 553 if (mode() === "edit" && get(trimDuration) > 0) $$render(consequent); 554 }); 555 } 556 557 var node_2 = sibling(node_1, 2); 558 559 { 560 var consequent_1 = ($$anchor) => { 561 var time_2 = root_3$1(); 562 var text_1 = child(time_2, true); 563 564 reset(time_2); 565 template_effect(($0) => set_text(text_1, $0), [() => format_time(get(seconds))]); 566 append($$anchor, time_2); 567 }; 568 569 var alternate = ($$anchor) => { 570 var time_3 = root_4$2(); 571 572 bind_this(time_3, ($$value) => durationRef = $$value, () => durationRef); 573 append($$anchor, time_3); 574 }; 575 576 if_block(node_2, ($$render) => { 577 if (get(timing)) $$render(consequent_1); else $$render(alternate, false); 578 }); 579 } 580 581 reset(div_4); 582 reset(div_3); 583 append($$anchor, div_3); 584 }; 585 586 if_block(node, ($$render) => { 587 if ((get(timing) || get(recordedAudio)) && waveform_options().show_recording_waveform) $$render(consequent_2); 588 }); 589 } 590 591 var node_3 = sibling(node, 2); 592 593 { 594 var consequent_3 = ($$anchor) => { 595 { 596 let $0 = user_derived(() => format_time(get(seconds))); 597 598 WaveformRecordControls($$anchor, { 599 get record() { 600 return get(record); 601 }, 602 603 get i18n() { 604 return $$props.i18n; 605 }, 606 607 get timing() { 608 return get(timing); 609 }, 610 611 get recording() { 612 return recording(); 613 }, 614 615 get show_recording_waveform() { 616 return waveform_options().show_recording_waveform; 617 }, 618
619 get record_time() { 620 return get($0); 621 } 622 }); 623 } 624 }; 625 626 if_block(node_3, ($$render) => { 627 if (get(record_mounted) && !get(recordedAudio)) $$render(consequent_3); 628 }); 629 } 630 631 var node_4 = sibling(node_3, 2); 632 633 { 634 var consequent_4 = ($$anchor) => { 635 WaveformControls($$anchor, { 636 get waveform() { 637 return get(recordingWaveform); 638 }, 639 640 get container() { 641 return recordingContainer; 642 }, 643 644 get playing() { 645 return get(playing); 646 }, 647 648 get audio_duration() { 649 return get(audio_duration); 650 }, 651 652 get i18n() { 653 return $$props.i18n; 654 }, 655 656 get editable() { 657 return editable(); 658 }, 659 interactive: true, 660 handle_trim_audio, 661 show_redo: true, 662 get handle_reset_value() { 663 return $$props.handle_reset_value; 664 }, 665 666 get waveform_options() { 667 return waveform_options(); 668 }, 669 670 get trimDuration() { 671 return get(trimDuration); 672 }, 673 674 set trimDuration($$value) { 675 set(trimDuration, $$value, true); 676 }, 677 678 get mode() { 679 return mode(); 680 }, 681 682 set mode($$value) { 683 mode($$value); 684 } 685 }); 686 }; 687 688 if_block(node_4, ($$render) => { 689 if (get(recordingWaveform) && get(recordedAudio)) $$render(consequent_4); 690 }); 691 } 692 693 reset(div); 694 append($$anchor, div); 695 pop(); 696} 697 698var root_1$1 = from_html(`<div class="svelte-m6ymia"></div>`); 699var root_2$1 = from_html(`<button><span class="record-icon svelte-m6ymia"><span class="pinger svelte-m6ymia"></span> <span class="dot svelte-m6ymia"></span></span> </button>`); 700var root_4$1 = from_html(`<button class="spinner-button svelte-m6ymia"><div class="icon svelte-m6ymia"><!></div> </button>`); 701var root_5 = from_html(`<button class="record-button svelte-m6ymia"><span class="record-icon svelte-m6ymia"><span class="dot svelte-m6ymia"></span></span> </button>`); 702var root = from_html(`<div class="mic-wrap svelte-m6ymia"><!> <div class="controls svelte-m6ymia"><!> <!></div></div>`); 703 704function StreamAudio($$anchor, $$props) { 705 push($$props, true); 706 707 let recording = prop($$props, 'recording', 3, false), 708 paused_recording = prop($$props, 'paused_recording', 3, false), 709 waveform_options = prop($$props, 'waveform_options', 19, () => ({ show_recording_waveform: true })), 710 waiting = prop($$props, 'waiting', 3, false); 711 712 let micWaveform; 713 let waveformRecord; 714 let microphoneContainer; 715 let micDevices = state(proxy([])); 716 717 onMount(() => { 718 create_mic_waveform(); 719 }); 720 721 const create_mic_waveform = () => { 722 if (micWaveform !== undefined) micWaveform.destroy(); 723 if (!microphoneContainer) return; 724 725 micWaveform = u.create({ 726 ...$$props.waveform_settings, 727 normalize: false, 728 container: microphoneContainer 729 }); 730 731 waveformRecord = micWaveform.registerPlugin(o.create()); 732 }; 733 734 var div = root(); 735 var node = child(div); 736 737 { 738 var consequent = ($$anchor) => { 739 var div_1 = root_1$1(); 740 let styles; 741 742 bind_this(div_1, ($$value) => microphoneContainer = $$value, () => microphoneContainer); 743 template_effect(() => styles = set_style(div_1, '', styles, { display: recording() ? "block" : "none" })); 744 append($$anchor, div_1); 745 }; 746 747 if_block(node, ($$render) => { 748 if (waveform_options().show_recording_waveform) $$render(consequent); 749 }); 750 } 751 752 var div_2 = sibling(node, 2); 753 var node_1 = child(div_2); 754 755 { 756 var consequent_1 = ($$anchor) => { 757 var button = root_2$1(); 758 759 button.__click = () => { 760 waveformRecord?.stopMic(); 761 $$props.stop(); 762 }; 763 764 var text = sibling(child(button)); 765 766 reset(button); 767 768 template_effect( 769 ($0) => { 770 set_class(button, 1, clsx(paused_recording() ? "stop-button-paused" : "stop-button"), 'svelte-m6ymia'); 771 set_text(text, ` ${$0 ?? ''}`); 772 }, 773 [ 774 () => paused_recording() 775 ? $$props.i18n("audio.pause") 776 : $$props.i18n("audio.stop") 777 ] 778 ); 779 780 append($$anchor, button); 781 }; 782 783 var alternate_1 = ($$anchor) => { 784 var fragment = comment(); 785 var node_2 = first_child(fragment); 786 787 { 788 var consequent_2 = ($$anchor) => { 789 var button_1 = root_4$1(); 790 791 button_1.__click = () => { 792 $$props.stop(); 793 }; 794 795 var div_3 = child(button_1); 796 var node_3 = child(div_3); 797 798 Spinner(node_3); 799 reset(div_3); 800 801 var text_1 = sibling(div_3); 802 803 reset(button_1); 804 template_effect(($0) => set_text(text_1, ` ${$0 ?? ''}`), [() => $$props.i18n("audio.waiting")]); 805 append($$anchor, button_1); 806 }; 807 808 var alternate = ($$anchor) => { 809 var button_2 = root_5(); 810 811 button_2.__click = () => { 812 waveformRecord?.startMic(); 813 $$props.record(); 814 }; 815 816 var text_2 = sibling(child(button_2)); 817 818 reset(button_2); 819 template_effect(($0) => set_text(text_2, ` ${$0 ?? ''}`), [() => $$props.i18n("audio.record")]); 820 append($$anchor, button_2); 821 }; 822 823 if_block( 824 node_2, 825 ($$render) => { 826 if (recording() && waiting()) $$render(consequent_2); else $$render(alternate, false); 827 }, 828 true 829 ); 830 } 831 832 append($$anchor, fragment); 833 }; 834 835 if_block(node_1, ($$render) => { 836 if (recording() && !waiting()) $$render(consequent_1); else $$render(alternate_1, false); 837 }); 838 } 839 840 var node_4 = sibling(node_1, 2); 841 842 DeviceSelect(node_4, { 843 get i18n() { 844 return $$props.i18n; 845 }, 846 847 get micDevices() { 848 return get(micDevices); 849 }, 850 851 set micDevices($$value) { 852 set(micDevices, $$value, true); 853 } 854 }); 855 856 reset(div_2); 857 reset(div); 858 append($$anchor, div); 859 pop(); 860} 861 862delegate(['click']); 863 864let media_recorder; 865async function init_media_recorder() { 866 const { MediaRecorder, register } = await __vitePreload(async () => { const { MediaRecorder, register } = await import('./module-C16d28tm.js');return { MediaRecorder, register }},true ?__vite__mapDeps([0,1]):void 0,import.meta.url); 867 const { connect } = await __vitePreload(async () => { const { connect } = await import('./module-Bkn9j7N6.js');return { connect }},true ?__vite__mapDeps([2,1]):void 0,import.meta.url); 868 register(await connect()); 869 media_recorder = MediaRecorder; 870 return media_recorder; 871} 872 873var root_3 = from_html(`<!> <!>`, 1); 874var root_10 = from_html(`<!> <!>`, 1); 875var root_1 = from_html(`<!> <div><!> <!> <!></div>`, 1); 876 877function InteractiveAudio($$anchor, $$props) { 878 push($$props, true); 879 880 let value = prop($$props, 'value', 15, null), 881 subtitles = prop($$props, 'subtitles', 3, null), 882 show_label = prop($$props, 'show_label', 3, true), 883 buttons = prop($$props, 'buttons', 19, () => ["download", "share"]), 884 on_custom_button_click = prop($$props, 'on_custom_button_click', 3, null), 885 sources = prop($$props, 'sources', 19, () => ["microphone", "upload"]), 886 pending = prop($$props, 'pending', 3, false), 887 streaming = prop($$props, 'streaming', 3, false), 888 trim_region_settings = prop($$props, 'trim_region_settings', 19, () => ({})), 889 waveform_options = prop($$props, 'waveform_options', 19, () => ({})), 890 dragging = prop($$props, 'dragging', 15, false), 891 active_source = prop($$props, 'active_source', 15, "microphone"), 892 handle_reset_value = prop($$props, 'handle_reset_value', 3, () => {}), 893 editable = prop($$props, 'editable', 3, true), 894 max_file_size = prop($$props, 'max_file_size', 3, null), 895 stream_every = prop($$props, 'stream_every', 3, 0.1), 896 uploading = prop($$props, 'uploading', 15, false), 897 recording = prop($$props, 'recording', 15, false), 898 class_name = prop($$props, 'class_name', 3, ""), 899 upload_promise = prop($$props, 'upload_promise', 15), 900 initial_value = prop($$props, 'initial_value', 15), 901 playback_position = prop($$props, 'playback_position', 15), 902 time_limit = prop($$props, 'time_limit', 3, null), 903 stream_state = prop($$props, 'stream_state', 3, "closed"); 904 905 user_effect(() => { 906 $$props.ondrag?.(dragging()); 907 }); 908 909 // TODO: make use of this 910 // export let type: "normal" | "numpy" = "normal"; 911 let recorder; 912 913 let mode = state(""); 914 let header = undefined; 915 let pending_stream = [];
916 let submit_pending_stream_on_pending_end = false; 917 let inited = false; 918 let streaming_media_recorder; 919 const NUM_HEADER_BYTES = 44; 920 let audio_chunks = []; 921 const is_browser = typeof window !== "undefined"; 922 923 if (is_browser && streaming()) { 924 init_media_recorder().then((a) => { 925 streaming_media_recorder = a; 926 }); 927 } 928 929 const to_blob_parts = (parts) => parts.map((part) => { 930 if (part instanceof Blob) return part; 931 932 return part.slice(); 933 }); 934 935 const dispatch_blob = async (blobs, event) => { 936 let _audio_blob = new File(to_blob_parts(blobs), "audio.wav", { type: "audio/wav" }); 937 938 if (_audio_blob.size === 0) { 939 return; 940 } 941 942 const val = await prepare_files([_audio_blob], event === "stream"); 943 944 initial_value(value()); 945 value((await $$props.upload(val, $$props.root, undefined, max_file_size() || undefined))?.filter(Boolean)[0]); 946 947 if (event === "stream") { 948 $$props.onstream?.(value()); 949 } else if (event === "change") { 950 $$props.onchange?.(value()); 951 } else if (event === "stop_recording") { 952 $$props.onstop_recording?.(); 953 } 954 }; 955 956 onDestroy(() => { 957 if (streaming() && recorder && recorder.state !== "inactive") { 958 recorder.stop(); 959 } 960 }); 961 962 async function prepare_audio() { 963 let stream; 964 965 try { 966 stream = await navigator.mediaDevices.getUserMedia({ audio: true }); 967 } catch(err) { 968 if (!navigator.mediaDevices) { 969 $$props.onerror?.($$props.i18n("audio.no_device_support")); 970 971 return; 972 } 973 974 if (err instanceof DOMException && err.name == "NotAllowedError") { 975 $$props.onerror?.($$props.i18n("audio.allow_recording_access")); 976 977 return; 978 } 979 980 throw err; 981 } 982 983 if (stream == null) return; 984 985 if (streaming()) { 986 recorder = new streaming_media_recorder(stream, { mimeType: "audio/wav" }); 987 recorder.addEventListener("dataavailable", handle_chunk); 988 } else { 989 recorder = new MediaRecorder(stream); 990 991 recorder.addEventListener("dataavailable", (event) => { 992 audio_chunks.push(event.data); 993 }); 994 } 995 996 recorder.addEventListener("stop", async () => { 997 recording(false); 998 recorder.stop(); 999 await dispatch_blob(audio_chunks, "change"); 1000 await dispatch_blob(audio_chunks, "stop_recording"); 1001 audio_chunks = []; 1002 }); 1003 1004 inited = true; 1005 } 1006 1007 async function handle_chunk(event) { 1008 let buffer = await event.data.arrayBuffer(); 1009 let payload = new Uint8Array(buffer); 1010 1011 if (!header) { 1012 header = new Uint8Array(buffer.slice(0, NUM_HEADER_BYTES)); 1013 payload = new Uint8Array(buffer.slice(NUM_HEADER_BYTES)); 1014 } 1015 1016 if (pending()) { 1017 pending_stream.push(payload); 1018 } else { 1019 let blobParts = [header].concat(pending_stream, [payload]); 1020 1021 if (!recording() || stream_state() === "waiting") return; 1022 1023 dispatch_blob(blobParts, "stream"); 1024 pending_stream = []; 1025 } 1026 } 1027 1028 user_effect(() => { 1029 if (submit_pending_stream_on_pending_end && pending() === false) { 1030 submit_pending_stream_on_pending_end = false; 1031 1032 if (header && pending_stream) { 1033 let blobParts = [header].concat(pending_stream); 1034 1035 pending_stream = []; 1036 dispatch_blob(blobParts, "stream"); 1037 } 1038 } 1039 }); 1040 1041 async function record() { 1042 recording(true); 1043 $$props.onstart_recording?.(); 1044 1045 if (!inited) await prepare_audio(); 1046 1047 header = undefined; 1048 1049 if (streaming() && recorder.state != "recording") { 1050 recorder.start(stream_every() * 1000); 1051 } 1052 } 1053 1054 function clear() { 1055 $$props.onchange?.(null); 1056 $$props.onclear?.(); 1057 set(mode, ""); 1058 value(null); 1059 } 1060 1061 function handle_load(detail) { 1062 value(detail); 1063 $$props.onchange?.(detail); 1064 $$props.onupload?.(detail); 1065 } 1066 1067 async function stop() { 1068 recording(false); 1069 1070 if (streaming()) { 1071 $$props.onclose_stream?.(); 1072 $$props.onstop_recording?.(); 1073 recorder.stop(); 1074 1075 if (pending()) { 1076 submit_pending_stream_on_pending_end = true; 1077 } 1078 1079 await dispatch_blob(audio_chunks, "stop_recording"); 1080 $$props.onclear?.(); 1081 set(mode, ""); 1082 } 1083 } 1084 1085 user_effect(() => { 1086 if (!recording() && recorder && get(mode) !== "") stop(); 1087 }); 1088 1089 user_effect(() => { 1090 if (recording() && recorder) record(); 1091 }); 1092 1093 var fragment = root_1(); 1094 var node = first_child(fragment); 1095 1096 { 1097 let $0 = user_derived(() =>
1097 active_source() === "upload" && value() === null); 1098 let $1 = user_derived(() => $$props.label || $$props.i18n("audio.audio")); 1099 1100 BlockLabel(node, { 1101 get show_label() { 1102 return show_label(); 1103 }, 1104 1105 get Icon() { 1106 return Music; 1107 }, 1108 1109 get float() { 1110 return get($0); 1111 }, 1112 1113 get label() { 1114 return get($1); 1115 } 1116 }); 1117 } 1118 1119 var div = sibling(node, 2); 1120 var node_1 = child(div); 1121 1122 StreamingBar(node_1, { 1123 get time_limit() { 1124 return time_limit(); 1125 } 1126 }); 1127 1128 var node_2 = sibling(node_1, 2); 1129 1130 { 1131 var consequent_4 = ($$anchor) => { 1132 var fragment_1 = comment(); 1133 var node_3 = first_child(fragment_1); 1134 1135 { 1136 var consequent_1 = ($$anchor) => { 1137 var fragment_2 = root_3(); 1138 var node_4 = first_child(fragment_2); 1139 1140 ModifyUpload(node_4, { 1141 get i18n() { 1142 return $$props.i18n; 1143 }, 1144 onclear: clear 1145 }); 1146 1147 var node_5 = sibling(node_4, 2); 1148 1149 { 1150 var consequent = ($$anchor) => { 1151 { 1152 let $0 = user_derived(() => stream_state() === "waiting"); 1153 1154 StreamAudio($$anchor, { 1155 record, 1156 get recording() { 1157 return recording(); 1158 }, 1159 stop, 1160 get i18n() { 1161 return $$props.i18n; 1162 }, 1163 1164 get waveform_settings() { 1165 return $$props.waveform_settings; 1166 }, 1167 1168 get waveform_options() { 1169 return waveform_options(); 1170 }, 1171 1172 get waiting() { 1173 return get($0); 1174 } 1175 }); 1176 } 1177 }; 1178 1179 var alternate = ($$anchor) => { 1180 AudioRecorder($$anchor, { 1181 get i18n() { 1182 return $$props.i18n; 1183 }, 1184 1185 get editable() { 1186 return editable(); 1187 }, 1188 1189 get recording() { 1190 return recording(); 1191 }, 1192 dispatch_blob, 1193 get waveform_settings() { 1194 return $$props.waveform_settings; 1195 }, 1196 1197 get waveform_options() { 1198 return waveform_options(); 1199 }, 1200 1201 get handle_reset_value() { 1202 return handle_reset_value(); 1203 }, 1204 onstartrecording: () => $$props.onstart_recording?.(), 1205 onpauserecording: () => $$props.onpause_recording?.(), 1206 onstoprecording: () => $$props.onstop_recording?.(), 1207 get mode() { 1208 return get(mode); 1209 }, 1210 1211 set mode($$value) { 1212 set(mode, $$value, true); 1213 } 1214 }); 1215 }; 1216 1217 if_block(node_5, ($$render) => { 1218 if (streaming()) $$render(consequent); else $$render(alternate, false); 1219 }); 1220 } 1221 1222 append($$anchor, fragment_2); 1223 }; 1224 1225 var alternate_1 = ($$anchor) => { 1226 var fragment_5 = comment(); 1227 var node_6 = first_child(fragment_5); 1228 1229 { 1230 var consequent_3 = ($$anchor) => { 1231 { 1232 let $0 = user_derived(() => $$props.i18n("audio.drop_to_upload")); 1233 1234 Upload($$anchor, { 1235 filetype: 'audio/aac,audio/midi,audio/mpeg,audio/ogg,audio/wav,audio/x-wav,audio/opus,audio/webm,audio/flac,audio/vnd.rn-realaudio,audio/x-ms-wma,audio/x-aiff,audio/amr,audio/*', 1236 onload: handle_load, 1237 onerror: (detail) => $$props.onerror?.(detail), 1238 get root() { 1239 return $$props.root; 1240 }, 1241 1242 get max_file_size() { 1243 return max_file_size(); 1244 }, 1245 1246 get upload() { 1247 return $$props.upload; 1248 }, 1249 1250 get stream_handler() { 1251 return $$props.stream_handler; 1252 }, 1253 1254 get aria_label() { 1255 return get($0); 1256 }, 1257 1258 get upload_promise() { 1259 return upload_promise(); 1260 }, 1261 1262 set upload_promise($$value) { 1263 upload_promise($$value); 1264 }, 1265 1266 get dragging() { 1267 return dragging(); 1268 }, 1269 1270 set dragging($$value) { 1271 dragging($$value); 1272 }, 1273 1274 get uploading() { 1275 return uploading(); 1276 }, 1277 1278 set uploading($$value) { 1279 uploading($$value); 1280 }, 1281 1282 children: ($$anchor, $$slotProps) => { 1283 var fragment_7 = comment(); 1284 var node_7 = first_child(fragment_7); 1285 1286 { 1287 var consequent_2 = ($$anchor) => { 1288 var fragment_8 = comment(); 1289 var node_8 = first_child(fragment_8); 1290 1291 snippet(node_8, () => $$props.children); 1292 append($$anchor, fragment_8); 1293 }; 1294 1295 if_block(node_7, ($$render) => { 1296 if ($$props.children) $$render(consequent_2); 1297 }); 1298 } 1299 1300 append($$anchor, fragment_7); 1301 }, 1302 $$slots: { default: true } 1303 }); 1304 } 1305 }; 1306 1307 if_block( 1308 node_6, 1309 ($$render) => { 1310 if (active_source() === "upload") $$render(consequent_3); 1311 }, 1312 true 1313 ); 1314 } 1315 1316 append($$anchor, fragment_5); 1317 }; 1318 1319 if_block(node_3, ($$render) => { 1320 if (active_source() === "microphone") $$render(consequent_1); else $$render(alternate_1, false); 1321 }); 1322 } 1323 1324 append($$anchor, fragment_1); 1325 }; 1326 1327 var alternate_3 = ($$anchor) => { 1328 var fragment_9 = root_10(); 1329 var node_9 = first_child(fragment_9); 1330 1331 { 1332 let $0 = user_derived(() => buttons() === null
1333 ? value().url 1334 : buttons().some((btn) => typeof btn === "string" && btn === "download") ? value().url : null); 1335 1336 ModifyUpload(node_9, { 1337 get i18n() { 1338 return $$props.i18n; 1339 }, 1340 onclear: clear, 1341 onedit: () => { 1342 set(mode, "edit"); 1343 $$props.onedit?.(); 1344 }, 1345 1346 get download() { 1347 return get($0); 1348 }, 1349 1350 children: ($$anchor, $$slotProps) => { 1351 var fragment_10 = comment(); 1352 var node_10 = first_child(fragment_10); 1353 1354 { 1355 var consequent_7 = ($$anchor) => { 1356 var fragment_11 = comment(); 1357 var node_11 = first_child(fragment_11); 1358 1359 each(node_11, 17, buttons, index, ($$anchor, btn) => { 1360 var fragment_12 = comment(); 1361 var node_12 = first_child(fragment_12); 1362 1363 { 1364 var consequent_6 = ($$anchor) => { 1365 var fragment_13 = comment(); 1366 var node_13 = first_child(fragment_13); 1367 1368 { 1369 var consequent_5 = ($$anchor) => { 1370 ShareButton($$anchor, { 1371 get i18n() { 1372 return $$props.i18n; 1373 }, 1374
1375 get onerror() { 1376 return $$props.onerror; 1377 }, 1378 onshare: () => {}, 1379 formatter: async (fileData) => { 1380 if (!fileData || !fileData.url) return ""; 1381 1382 let url = await uploadToHuggingFace(fileData.url); 1383 1384 return `<audio controls src="${url}"></audio>`; 1385 }, 1386 1387 get value() { 1388 return value(); 1389 } 1390 }); 1391 }; 1392 1393 if_block(node_13, ($$render) => { 1394 if (get(btn) === "share") $$render(consequent_5); 1395 }); 1396 } 1397 1398 append($$anchor, fragment_13); 1399 }; 1400 1401 var alternate_2 = ($$anchor) => { 1402 CustomButton($$anchor, { 1403 get button() { 1404 return get(btn); 1405 }, 1406 1407 on_click: (id) => { 1408 if (on_custom_button_click()) { 1409 on_custom_button_click()(id); 1410 } 1411 } 1412 }); 1413 }; 1414 1415 if_block(node_12, ($$render) => { 1416 if (typeof get(btn) === "string") $$render(consequent_6); else $$render(alternate_2, false); 1417 }); 1418 } 1419 1420 append($$anchor, fragment_12); 1421 }); 1422 1423 append($$anchor, fragment_11); 1424 }; 1425 1426 if_block(node_10, ($$render) => { 1427 if (value() !== null && buttons()) $$render(consequent_7); 1428 }); 1429 } 1430 1431 append($$anchor, fragment_10); 1432 }, 1433 $$slots: { default: true } 1434 }); 1435 } 1436 1437 var node_14 = sibling(node_9, 2); 1438 1439 { 1440 let $0 = user_derived(() => Array.isArray(subtitles()) ? subtitles() : subtitles()?.url); 1441 1442 AudioPlayer(node_14, { 1443 get value() { 1444 return value(); 1445 }, 1446 1447 get subtitles() { 1448 return get($0); 1449 }, 1450 1451 get label() { 1452 return $$props.label; 1453 }, 1454 1455 get i18n() { 1456 return $$props.i18n; 1457 }, 1458 dispatch_blob, 1459 get waveform_settings() { 1460 return $$props.waveform_settings; 1461 }, 1462 1463 get waveform_options() { 1464 return waveform_options(); 1465 }, 1466 1467 get trim_region_settings() { 1468 return trim_region_settings(); 1469 }, 1470 1471 get handle_reset_value() { 1472 return handle_reset_value(); 1473 }, 1474 1475 get editable() { 1476 return editable(); 1477 }, 1478 1479 get loop() { 1480 return $$props.loop; 1481 }, 1482 interactive: true, 1483 get onstop() { 1484 return $$props.onstop; 1485 }, 1486 1487 get onplay() { 1488 return $$props.onplay; 1489 }, 1490 1491 get onpause() { 1492 return $$props.onpause; 1493 }, 1494 1495 get onedit() { 1496 return $$props.onedit; 1497 }, 1498 1499 get mode() { 1500 return get(mode); 1501 }, 1502 1503 set mode($$value) { 1504 set(mode, $$value, true); 1505 }, 1506 1507 get playback_position() { 1508 return playback_position(); 1509 }, 1510 1511 set playback_position($$value) { 1512 playback_position($$value); 1513 } 1514 }); 1515 } 1516 1517 append($$anchor, fragment_9); 1518 }; 1519 1520 if_block(node_2, ($$render) => { 1521 if (value() == null || streaming()) $$render(consequent_4); else $$render(alternate_3, false); 1522 }); 1523 } 1524 1525 var node_15 = sibling(node_2, 2); 1526 1527 SelectSource(node_15, { 1528 get sources() { 1529 return sources(); 1530 }, 1531 handle_clear: clear, 1532 get active_source() { 1533 return active_source(); 1534 }, 1535 1536 set active_source($$value) { 1537 active_source($$value); 1538 } 1539 }); 1540 1541 reset(div); 1542 1543 template_effect(() => { 1544 set_class(div, 1, `audio-container ${class_name() ?? ''}`, 'svelte-ocxd3m'); 1545 set_attribute(div, 'data-testid', $$props.label ? "waveform-" + $$props.label : "unlabelled-audio"); 1546 }); 1547 1548 append($$anchor, fragment); 1549 pop(); 1550} 1551 1552var root_2 = from_html(`<!> <!>`, 1); 1553var root_4 = from_html(`<!> <!>`, 1); 1554 1555function Index($$anchor, $$props) { 1556 push($$props, true); 1557 1558 let props = rest_props($$props, ['$$slots', '$$events', '$$legacy']); 1559 let upload_promise = state(void 0); 1560 1561 $$props.props.stream_every = 0.1; // default to 0.1s stream interval 1562 1563 class AudioGradio extends Gradio { 1564 async get_data() { 1565 if (get(upload_promise)) { 1566 await get(upload_promise); 1567 await tick(); 1568 } 1569 1570 const data = await super.get_data(); 1571 1572 return data; 1573 } 1574 } 1575 1576 const gradio = new AudioGradio(props); 1577 let label = user_derived(() => gradio.shared.label || gradio.i18n("audio.audio")); 1578 let minimal = user_derived(() => $$props.minimal ?? gradio.props.minimal ?? false); 1579 let active_source = user_derived(() => gradio.props.sources ? gradio.props.sources[0] : null); 1580 let initial_value = state(proxy(gradio.props.value)); 1581 1582 const handle_reset_value = () => { 1583 if (get(initial_value) === null || gradio.props.value === get(initial_value)) { 1584 return; 1585 } 1586 1587 gradio.props.value = get(initial_value); 1588 }; 1589 1590 let dragging = state(false); 1591 let recording = state(proxy(gradio.props.recording ?? false)); 1592 1593 user_effect(() => { 1594 gradio.props.recording = get(recording); 1595 }); 1596 1597 let color_accent = "darkorange"; 1598 1599 let waveform_settings = proxy({ 1600 height: 50, 1601 barWidth: 2, 1602 barGap: 3, 1603 cursorWidth: 2, 1604 cursorColor: "#ddd5e9", 1605 autoplay: gradio.props.autoplay, 1606 barRadius: 10, 1607 dragToSeek: true, 1608 normalize: true, 1609 minPxPerSec: 20, 1610 waveColor: gradio.props.waveform_options.waveform_color || "#9ca3af", 1611 progressColor: gradio.props.waveform_options.waveform_progress_color || color_accent,
1612 mediaControls: gradio.props.waveform_options.show_controls ?? false, 1613 sampleRate: gradio.props.waveform_options.sample_rate || 44100 1614 }); 1615 1616 const trim_region_settings = { 1617 color: gradio.props.waveform_options.trim_region_color, 1618 drag: true, 1619 resize: true 1620 }; 1621 1622 function set_trim_region_colour() { 1623 document.documentElement.style.setProperty("--trim-region-color", trim_region_settings.color || color_accent); 1624 } 1625 1626 function handle_error(detail) { 1627 const [level, status] = detail.includes("Invalid file type") ? ["warning", "complete"] : ["error", "error"]; 1628 1629 if (gradio.shared.loading_status) { 1630 gradio.shared.loading_status.status = status; 1631 gradio.shared.loading_status.message = detail; 1632 } 1633 1634 gradio.dispatch(level, detail); 1635 } 1636 1637 gradio.watch_for_change(); 1638 1639 onMount(() => { 1640 set_trim_region_colour(); 1641 }); 1642 1643 var fragment = comment(); 1644 var node = first_child(fragment); 1645 1646 { 1647 var consequent = ($$anchor) => { 1648 { 1649 let $0 = user_derived(() => get(dragging) ? "focus" : "base"); 1650 1651 Block($$anchor, { 1652 variant: "solid", 1653 get border_mode() { 1654 return get($0); 1655 }, 1656 padding: false, 1657 allow_overflow: false, 1658 get elem_id() { 1659 return gradio.shared.elem_id; 1660 }, 1661 1662 get elem_classes() { 1663 return gradio.shared.elem_classes; 1664 }, 1665 1666 get visible() { 1667 return gradio.shared.visible; 1668 }, 1669 1670 get container() { 1671 return gradio.shared.container; 1672 }, 1673 1674 get scale() { 1675 return gradio.shared.scale; 1676 }, 1677 1678 get min_width() { 1679 return gradio.shared.min_width; 1680 }, 1681 1682 children: ($$anchor, $$slotProps) => { 1683 var fragment_2 = root_2();
1684 var node_1 = first_child(fragment_2); 1685 1686 Static(node_1, spread_props( 1687 { 1688 get autoscroll() { 1689 return gradio.shared.autoscroll; 1690 }, 1691 1692 get i18n() { 1693 return gradio.i18n; 1694 } 1695 }, 1696 () => gradio.shared.loading_status, 1697 { 1698 on_clear_status: () => gradio.dispatch("clear_status", gradio.shared.loading_status) 1699 } 1700 )); 1701 1702 var node_2 = sibling(node_1, 2); 1703 1704 { 1705 let $0 = user_derived(() => gradio.props.buttons ?? ["download", "share"]); 1706 1707 StaticAudio(node_2, { 1708 get i18n() { 1709 return gradio.i18n; 1710 }, 1711 1712 get show_label() { 1713 return gradio.shared.show_label; 1714 }, 1715 1716 get buttons() { 1717 return get($0); 1718 }, 1719 1720 get value() { 1721 return gradio.props.value; 1722 }, 1723 1724 get subtitles() { 1725 return gradio.props.subtitles; 1726 }, 1727 1728 get label() { 1729 return get(label); 1730 }, 1731 1732 get loop() { 1733 return gradio.props.loop; 1734 }, 1735 1736 get waveform_settings() { 1737 return waveform_settings; 1738 }, 1739 1740 get waveform_options() { 1741 return gradio.props.waveform_options; 1742 }, 1743 1744 get editable() { 1745 return gradio.props.editable; 1746 }, 1747 1748 get minimal() { 1749 return get(minimal); 1750 }, 1751 1752 on_custom_button_click: (id) => { 1753 gradio.dispatch("custom_button_click", { id }); 1754 }, 1755 onshare: (detail) => gradio.dispatch("share", detail), 1756 onerror: (e) => gradio.dispatch("error", e.detail), 1757 onplay: () => gradio.dispatch("play"), 1758 onpause: () => gradio.dispatch("pause"), 1759 onstop: () => gradio.dispatch("stop"), 1760 get playback_position() { 1761 return gradio.props.playback_position; 1762 }, 1763 1764 set playback_position($$value) { 1765 gradio.props.playback_position = $$value; 1766 } 1767 }); 1768 } 1769 1770 append($$anchor, fragment_2); 1771 }, 1772 $$slots: { default: true } 1773 }); 1774 } 1775 }; 1776 1777 var alternate = ($$anchor) => { 1778 { 1779 let $0 = user_derived(() => gradio.props.value === null && get(active_source) === "upload" ? "dashed" : "solid"); 1780 let $1 = user_derived(() => get(dragging) ? "focus" : "base"); 1781 1782 Block($$anchor, { 1783 get variant() { 1784 return get($0); 1785 }, 1786 1787 get border_mode() { 1788 return get($1); 1789 }, 1790 padding: false, 1791 allow_overflow: false, 1792 get elem_id() { 1793 return gradio.shared.elem_id; 1794 }, 1795 1796 get elem_classes() { 1797 return gradio.shared.elem_classes; 1798 }, 1799 1800 get visible() { 1801 return gradio.shared.visible; 1802 }, 1803 1804 get container() { 1805 return gradio.shared.container; 1806 }, 1807 1808 get scale() { 1809 return gradio.shared.scale; 1810 }, 1811 1812 get min_width() { 1813 return gradio.shared.min_width; 1814 }, 1815 1816 children: ($$anchor, $$slotProps) => { 1817 var fragment_4 = root_4(); 1818 var node_3 = first_child(fragment_4); 1819 1820 Static(node_3, spread_props( 1821 { 1822 get autoscroll() { 1823 return gradio.shared.autoscroll; 1824 }, 1825 1826 get i18n() { 1827 return gradio.i18n; 1828 } 1829 }, 1830 () => gradio.shared.loading_status, 1831 { 1832 on_clear_status: () => gradio.dispatch("clear_status", gradio.shared.loading_status) 1833 } 1834 )); 1835 1836 var node_4 = sibling(node_3, 2); 1837 1838 { 1839 let $0 = user_derived(() => gradio.props.buttons ?? []); 1840 let $1 = user_derived(() => get(active_source) || undefined); 1841 1842 InteractiveAudio(node_4, { 1843 get label() { 1844 return get(label); 1845 }, 1846 1847 get show_label() { 1848 return gradio.shared.show_label; 1849 }, 1850 1851 get buttons() { 1852 return get($0); 1853 }, 1854 1855 on_custom_button_click: (id) => { 1856 gradio.dispatch("custom_button_click", { id }); 1857 }, 1858 1859 get value() { 1860 return gradio.props.value; 1861 }, 1862 1863 get subtitles() { 1864 return gradio.props.subtitles; 1865 }, 1866 onchange: (detail) => gradio.props.value = detail,
1867 onstream: (detail) => { 1868 gradio.props.value = detail; 1869 gradio.dispatch("stream", gradio.props.value); 1870 }, 1871 ondrag: (detail) => set(dragging, detail, true), 1872 get root() { 1873 return gradio.shared.root; 1874 }, 1875 1876 get sources() { 1877 return gradio.props.sources; 1878 }, 1879 1880 get active_source() { 1881 return get($1); 1882 }, 1883 1884 get pending() { 1885 return gradio.shared.loading_status.pending; 1886 }, 1887 1888 get streaming() { 1889 return gradio.props.streaming; 1890 }, 1891 1892 get loop() { 1893 return gradio.props.loop; 1894 }, 1895 1896 get max_file_size() { 1897 return gradio.shared.max_file_size; 1898 }, 1899 handle_reset_value, 1900 get editable() { 1901 return gradio.props.editable; 1902 }, 1903 onedit: () => gradio.dispatch("edit"), 1904 onplay: () => gradio.dispatch("play"), 1905 onpause: () => gradio.dispatch("pause"), 1906 onstop: () => gradio.dispatch("stop"), 1907 onstart_recording: () => gradio.dispatch("start_recording"), 1908 onpause_recording: () => gradio.dispatch("pause_recording"), 1909 onstop_recording: () => { 1910 gradio.dispatch("stop_recording"); 1911 gradio.dispatch("input"); 1912 }, 1913 1914 onupload: () => { 1915 gradio.dispatch("upload"); 1916 gradio.dispatch("input"); 1917 }, 1918 1919 onclear: () => { 1920 gradio.dispatch("clear"); 1921 gradio.dispatch("input"); 1922 }, 1923 onerror: handle_error, 1924 onclose_stream: () => gradio.dispatch("close_stream", "stream"), 1925 get i18n() { 1926 return gradio.i18n; 1927 }, 1928 1929 get waveform_settings() { 1930 return waveform_settings; 1931 }, 1932 1933 get waveform_options() { 1934 return gradio.props.waveform_options; 1935 }, 1936 1937 get trim_region_settings() { 1938 return trim_region_settings; 1939 }, 1940 1941 get stream_every() { 1942 return gradio.props.stream_every; 1943 }, 1944 1945 get stream_state() { 1946 return gradio.shared.loading_status.stream_state; 1947 }, 1948 upload: (...args) => gradio.shared.client.upload(...args), 1949 stream_handler: (...args) => gradio.shared.client.stream(...args), 1950 get time_limit() { 1951 return gradio.shared.loading_status.time_limit; 1952 }, 1953 1954 get upload_promise() { 1955 return get(upload_promise); 1956 }, 1957 1958 set upload_promise($$value) { 1959 set(upload_promise, $$value, true); 1960 }, 1961 1962 get initial_value() { 1963 return get(initial_value); 1964 }, 1965 1966 set initial_value($$value) { 1967 set(initial_value, $$value, true); 1968 }, 1969 1970 get recording() { 1971 return get(recording); 1972 }, 1973 1974 set recording($$value) { 1975 set(recording, $$value, true); 1976 }, 1977 1978 get dragging() { 1979 return get(dragging); 1980 }, 1981 1982 set dragging($$value) { 1983 set(dragging, $$value, true); 1984 }, 1985 1986 get playback_position() { 1987 return gradio.props.playback_position; 1988 }, 1989 1990 set playback_position($$value) { 1991 gradio.props.playback_position = $$value; 1992 }, 1993 1994 children: ($$anchor, $$slotProps) => { 1995 UploadText($$anchor, { 1996 get i18n() { 1997 return gradio.i18n; 1998 }, 1999 type: 'audio' 2000 }); 2001 }, 2002 $$slots: { default: true } 2003 }); 2004 } 2005 2006 append($$anchor, fragment_4); 2007 }, 2008 $$slots: { default: true } 2009 }); 2010 } 2011 }; 2012 2013 if_block(node, ($$render) => { 2014 if (!gradio.shared.interactive) $$render(consequent); else $$render(alternate, false); 2015 }); 2016 } 2017 2018 append($$anchor, fragment); 2019 pop(); 2020} 2021 2022export { InteractiveAudio as BaseInteractiveAudio, AudioPlayer as BasePlayer, StaticAudio as BaseStaticAudio, Index as default }; 2023//# sourceMappingURL=index-D65tv47j.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.