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