PageSourceSearch

https://noiz.ai/assets/studioVoicePanel-niR211fk.js

js noiz.ai collected 2026-10-05 07:12:32 UTC 29,211 bytes, 1 lines download raw bytes

1import{i as de,h as Ee,B as xe,d as pe,aC as Pe,R as Te,j as Me,e as He,aL as je,aE as V,d3 as ce,f as ee,aB as Le,a7 as ze}from"./index-DsiSMK2M.js";import{b as Ne,e as qe}from"./audio-cQM5H3ol.js";import{e as ge,a as te,M as y,P as a,N as t,R as h,u as e,m as q,_ as be,L as Ie,Q as K,$ as oe,l as me,V as se,F as ne,X as ve,U as we,r as M,b as We,w as ke,Y as Qe,E as Ce,aj as Oe,o as Xe,A as Ke}from"./vendor-vue-BX5H9cWS.js";import{C as Ae}from"./creditCostButton-D0wk4rcD.js";import{a as Ye}from"./useStudioWaveform-BuZ24y5e.js";import{t as ye}from"./tts-BZqLly7H.js";import{v as Ge}from"./voiceDesign-Do3_g7qw.js";import{u as $e}from"./useVoiceEntitlement-BH0Hz1Dj.js";import{h as _e,s as Je}from"./quotaToast--oNvcnAE.js";import{A as Ze}from"./ArrowLeftOutlined-BTX2V43s.js";import{t as et}from"./edit-BnfrLBmL.js";import{R as tt}from"./ReloadOutlined-DCU6KRxI.js";import{_ as ot}from"./index-BmHXJXxL.js";import"./_baseForOwn-Bj6a0nGu.js";import"./videoStylization-QVV6SG0c.js";import"./studioUpload-CLc4BRDM.js";import"./file-ByiDidgC.js";import"./history-C1-_Y4TT.js";import"./useImageConfig-DUrTRv88.js";import"./monolith.min-DAWzggPu.js";import"./index-DADBnQ2X.js";import"./isMobile-DycClExL.js";import"./useMergedState-DJ6inKOq.js";import"./DownOutlined-zf-FXfS2.js";import"./CheckOutlined-Dv4SLmdi.js";import"./index-CoytRUCI.js";import"./index-CFva9Woy.js";import"./LeftOutlined-CpYyF5je.js";import"./SwapOutlined-CYf7bjV2.js";import"./DeleteOutlined-C-L5JoG8.js";import"./index-Bs5b9kzP.js";import"./DownloadOutlined-BTHlEQ2P.js";import"./localizedText-CoT6qaHC.js";import"./editorGuide-BPbXctEm.js";import"./MinusCircleOutlined-J8yrk953.js";import"./studioCreditPaywall.vue_vue_type_script_setup_true_name_StudioCreditPaywall_lang-D9qSb_1e.js";import"./EditOutlined-DxSHpI0v.js";import"./index-gEwc0MZO.js";import"./useRefs-D_4xlTTu.js";import"./index--9jC5qjc.js";const st={class:"voice-save-form"},nt={class:"save-form-head"},it={class:"form-item name-item"},at={class:"form-label"},lt={class:"form-actions"},ct=ge({__name:"studioVoiceSaveForm",props:{form:{},busy:{type:Boolean,default:!1},creditText:{default:""}},emits:["update:form","save","back"],setup(o,{emit:T}){const d=o,S=T,{t:i}=de.global,R=te({get:()=>d.form.display_name,set:L=>l("display_name",L)}),l=(L,p)=>{S("update:form",{...d.form,[L]:p})};return(L,p)=>{const m=Ee,D=xe;return a(),y("div",st,[t("header",nt,[t("p",null,h(e(i)("studio.studio.voice.profileReadyTitle")),1)]),t("div",it,[t("label",at,[be(h(e(i)("studio.studio.voice.displayName"))+" ",1),p[3]||(p[3]=t("span",{class:"required"},"*",-1))]),q(m,{value:e(R),"onUpdate:value":p[0]||(p[0]=C=>Ie(R)?R.value=C:null),disabled:o.busy,placeholder:e(i)("studio.studio.voice.displayNamePlaceholder")},null,8,["value","disabled","placeholder"])]),t("div",lt,[o.creditText?(a(),K(Ae,{key:0,title:e(i)("studio.studio.voice.saveVoice"),"credit-text":o.creditText,loading:o.busy,size:"compact","hide-glow":"",onClick:p[1]||(p[1]=C=>S("save"))},null,8,["title","credit-text","loading"])):(a(),K(D,{key:1,class:"save-voice-btn",type:"primary",loading:o.busy,onClick:p[2]||(p[2]=C=>S("save"))},{default:oe(()=>[be(h(e(i)("studio.studio.voice.saveVoice")),1)]),_:1},8,["loading"]))])])}}}),De=pe(ct,[["__scopeId","data-v-28275076"]]),rt={class:"picker-head"},ut={class:"picker-title"},dt=["aria-label"],vt={class:"picker-body"},pt={class:"group-title"},gt={class:"group-grid"},mt=["onClick"],ft=["src"],yt={key:2,class:"thumb-duration"},_t=["title"],ht={key:0,class:"picker-empty"},bt=ge({__name:"studioAssetPickerDialog",props:{open:{type:Boolean},assets:{default:()=>[]}},emits:["update:open","select"],setup(o,{emit:T}){const d=o,S=T,{t:i}=de.global,R=[{type:"video",match:s=>s.type==="video"},{type:"audio",match:s=>["audio","voice","sfx","music"].includes(s.type)}],l=te(()=>R.map(s=>({type:s.type,assets:d.assets.filter(s.match)})).filter(s=>s.assets.length)),L=s=>s.type==="video"?"is-video":"is-audio",p=s=>s.title||s.label||i(s.titleKey),m=s=>{const U=Math.floor(s/60),c=Math.round(s%60);return`${String(U).padStart(2,"0")}:${String(c).padStart(2,"0")}`},D=()=>S("update:open",!1),C=s=>{S("select",s),D()},A=new Map,b=(s,U)=>{const c=A.get(s.id),I=s.sourceUrl||"";if(!(U instanceof HTMLVideoElement)||!I){c==null||c.handle.cancel(),A.delete(s.id);return}c&&c.url===I&&c.element===U||(c==null||c.handle.cancel(),A.set(s.id,{url:I,element:U,handle:Ye(U,I,{prime:!1})}
1))};return me(()=>{A.forEach(({handle:s})=>s.cancel()),A.clear()}),(s,U)=>{const c=Pe;return a(),K(c,{open:o.open,footer:null,closable:!1,"mask-closable":!0,centered:"",width:760,"wrap-class-name":"studio-asset-picker-modal","get-container":!1,"onUpdate:open":U[0]||(U[0]=I=>S("update:open",I))},{default:oe(()=>[t("div",rt,[t("h2",ut,h(e(i)("studio.studio.voice.assetPickerTitle")),1),t("button",{class:"picker-close",type:"button","aria-label":e(i)("global.global.close"),onClick:D},[q(e(Te))],8,dt)]),t("div",vt,[(a(!0),y(ne,null,ve(e(l),I=>(a(),y("section",{key:I.type,class:"picker-group"},[t("h3",pt,h(e(i)(`studio.studio.assets.categories.${I.type}`)),1),t("div",gt,[(a(!0),y(ne,null,ve(I.assets,x=>{var Q;return a(),y("button",{key:x.id,class:"asset-card",type:"button",onClick:B=>C(x)},[t("span",{class:we(["asset-thumb",L(x)])},[x.type==="video"&&x.sourceUrl?(a(),y("video",{key:0,ref_for:!0,ref:B=>b(x,B),crossOrigin:"anonymous",muted:"",playsinline:"",preload:"metadata"},null,512)):x.type==="video"&&((Q=x.thumbnails)!=null&&Q[0])?(a(),y("img",{key:1,src:x.thumbnails[0].url,crossOrigin:"anonymous",alt:""},null,8,ft)):se("",!0),x.type==="video"&&x.duration?(a(),y("span",yt,h(m(x.duration)),1)):se("",!0)],2),t("span",{class:"asset-name",title:e(Me)?void 0:p(x)},h(p(x)),9,_t)],8,mt)}),128))])]))),128)),e(l).length?se("",!0):(a(),y("p",ht,h(e(i)("studio.studio.voice.assetLibraryEmpty")),1))])]),_:1},8,["open"])}}}),wt=pe(bt,[["__scopeId","data-v-909fc030"]]),fe=60,ue=.05;function kt(o,T){const d=fe;if(T<=0)return{start:0,end:d,useFullFile:!0};const S=Math.max(0,o.sourceIn??o.offsetStart??0),R=o.sourceOut??o.offsetEnd??S+Math.max(ue,o.duration*(o.playbackRate||1));if(S>=T-ue)return{start:0,end:Math.min(T,d),useFullFile:!0};const l=Math.min(S,Math.max(0,T-ue)),L=Math.min(T,Math.max(l+ue,R),l+d),p=l<=ue&&L>=Math.min(T,d)-ue;return{start:l,end:L,useFullFile:p}}const{t:J}=de.global,Ve=10*1024*1024,Ue=300,Fe=20;function he(){return{display_name:"",language:"",gender:"",age:"",labels:[],description:"",emotion:[],scene:[],meta:{}}}function Re(o,T){const d=atob(o),S=new Uint8Array(d.length);for(let i=0;i<d.length;i+=1)S[i]=d.charCodeAt(i);return new Blob([S],{type:T||"audio/mpeg"})}function Ct(o){return o.type.includes("webm")||/\.webm$/i.test(o.name)}async function $t(o){var S;const T=window.AudioContext||window.webkitAudioContext;if(!T)return o;const d=new T;try{const i=await o.arrayBuffer(),R=await d.decodeAudioData(i.slice(0)),l=Ne(R),L=o.name.replace(/\.[^.]+$/,"")||"voice_clone";return new File([l],`${L}.wav`,{type:"audio/wav"})}finally{await((S=d.close)==null?void 0:S.call(d))}}function St(){const o=He(),{isCreditsMode:T,cloneUnitCost:d,designUnitCost:S}=$e("voice_clone"),i=()=>T.value?"credit":"count",R=(f,$,n)=>!T.value||o.creditsBalance>=f?!0:(Je("credit",{module:$,source:n}),!1),l=M("clone"),L=M("input"),p=M(!1),m=M(he());let D=null;const C=M(""),A=()=>{L.value="input",m.value=he(),D=null,C.value&&URL.revokeObjectURL(C.value),C.value=""},b=async(f,$)=>{if(!p.value){p.value=!0,D=f,C.value=$;try{const n=new FormData;n.append("file",f);const w=await ye.asrUserVoices(n),r=(w==null?void 0:w.data)??w??{};m.value={display_name:r.suggest_name||"",language:r.language||"",gender:r.gender||"",age:r.age||"",labels:[],description:r.transcript||"",emotion:Array.isArray(r.emotion)?r.emotion:r.emotion?[r.emotion]:[],scene:Array.isArray(r.scene)?r.scene:r.scene?[r.scene]:[],meta:{text:r.transcript||"",language:r.language||"",segments:r.segments||[],video_cover_url:`/resource/img/tts/voice_clone_poster_${Math.floor(Math.random()*20)+1}.jpg`}},L.value="form",r.err_msg&&V.warning(r.err_msg)}catch(n){V.error((n==null?void 0:n.message)||J("studio.studio.voice.analyzeFailed")),D=null}finally{p.value=!1}}},s=async()=>{var $;if(p.value)return"";if(!m.value.display_name)return V.warning(J("studio.studio.voice.nameRequired")),"";if(!D||!R(d.value,"voice_clone","generate"))return"";const f=performance.now();ce.generateClick({module:"voice_clone",asset_type:"voice"}),p.value=!0;try{const n=new FormData,w=m.value;n.append("display_name",w.display_name),n.append("language",w.language),n.append("age",w.age),n.append("gender",w.gender),n.append("labels",w.labels.join(",")),n.append("emotion",w.emotion.join(",")),n.append("scene",w.scene.join(",")),n.append("denoise","true"),n.append("is_public","fal
1se"),n.append("voice_description",w.description),n.append("creation_mode","voice_clone"),n.append("meta",JSON.stringify(w.meta));const r=Ct(D)?await $t(D):D;n.append("file",r);const P=await ye.addVoice(n,"POST",void 0,{notNotify:!0,notClassified:!0}),H=(($=P==null?void 0:P.data)==null?void 0:$.voice_id)??(P==null?void 0:P.voice_id)??"";return ce.generateResult({module:"voice_clone",result:"success",elapsed_ms:Math.round(performance.now()-f),generated_count:H?1:0}),V.success(J("studio.studio.voice.cloneSaved")),A(),await k("clone",!0),H}catch(n){const w=_e(n,i(),{module:"voice_clone",source:"generate"});return ce.generateResult({module:"voice_clone",result:"failed",reason:w?i():"api_error",elapsed_ms:Math.round(performance.now()-f)}),w||V.error((n==null?void 0:n.message)||J("studio.studio.voice.cloneFailed")),""}finally{p.value=!1}},U=M("input"),c=M(!1),I=M("");let x=null;const Q=M(""),B=M([]),j=M(he());let E={},W="",v=null;const u=f=>{Q.value&&URL.revokeObjectURL(Q.value),x=f,Q.value=f?URL.createObjectURL(f):""},F=()=>{B.value.forEach(f=>URL.revokeObjectURL(f.url)),B.value=[]},z=()=>{F(),U.value="input",E={},W="",v=null},X=async()=>{if(c.value)return;if(!I.value.trim()&&!x){V.warning(J("studio.studio.voice.designInputRequired"));return}if(!R(S.value,"voice_design","generate"))return;const f=performance.now();ce.generateClick({module:"voice_design",asset_type:"voice",prompt_len:I.value.trim().length}),c.value=!0;try{const $=new FormData;$.append("voice_description",I.value.trim()),$.append("guidance_scale","50"),x&&$.append("picture",x);const n=await Ge.fetchVoiceDesign($),w=(n==null?void 0:n.previews)||[];if(!w.length){ce.generateResult({module:"voice_design",result:"failed",reason:"empty_result",elapsed_ms:Math.round(performance.now()-f),generated_count:0}),V.error(J("studio.studio.voice.designFailed"));return}F(),E=n.features||{},W=n.text||"",B.value=w.map((r,P)=>{const H=Re(r.audio_base_64,r.media_type);return{id:r.generated_voice_id||`preview-${P}`,url:URL.createObjectURL(H),base64:r.audio_base_64,mediaType:r.media_type,duration:r.duration_secs}}),U.value="result",ce.generateResult({module:"voice_design",result:"success",elapsed_ms:Math.round(performance.now()-f),generated_count:B.value.length})}catch($){const n=_e($,i(),{module:"voice_design",source:"generate"});ce.generateResult({module:"voice_design",result:"failed",reason:n?i():"api_error",elapsed_ms:Math.round(performance.now()-f)}),n||V.error(($==null?void 0:$.message)||J("studio.studio.voice.designFailed"))}finally{c.value=!1}},O=f=>{v=f,j.value={display_name:E.display_name||J("studio.studio.voice.designDefaultName"),language:E.language||"",gender:E.gender||"",age:E.age||"",labels:[],description:E.voice_prompt||I.value.trim(),emotion:[],scene:[],meta:{text:W}},U.value="form"},ie=async()=>{var f;if(c.value||!v)return"";if(!j.value.display_name)return V.warning(J("studio.studio.voice.nameRequired")),"";c.value=!0;try{const $=Re(v.base64,v.mediaType),n=new File([$],"voice_design.mp3",{type:v.mediaType||"audio/mpeg"}),w=j.value,r=new FormData;r.append("display_name",w.display_name),r.append("language",w.language),r.append("age",w.age),r.append("gender",w.gender),r.append("labels",w.labels.join(",")),r.append("denoise","false"),r.append("is_public","false"),r.append("voice_description",w.description),r.append("creation_mode","voice_design"),r.append("meta",JSON.stringify(w.meta)),r.append("file",n);const P=await ye.addVoice(r,"POST",void 0,{notNotify:!0,notClassified:!0}),H=((f=P==null?void 0:P.data)==null?void 0:f.voice_id)??(P==null?void 0:P.voice_id)??"";return V.success(J("studio.studio.voice.designSaved")),I.value="",u(null),z(),await k("design",!0),H}catch($){return _e($,i(),{module:"voice_design",source:"save_form"})||V.error(($==null?void 0:$.message)||J("studio.studio.voice.designFailed")),""}finally{c.value=!1}},ae=()=>{U.value="result"},Z=M([]),Y=M([]),G=We({clone:{page:0,hasMore:!0,loading:!1},design:{page:0,hasMore:!0,loading:!1}}),g=te(()=>G[l.value].loading),_=te(()=>G[l.value].hasMore),k=async(f,$=!0)=>{var w,r;const n=G[f];if(!(n.loading||!$&&!n.hasMore)){$&&(n.page=0,n.hasMore=!0,f==="clone"?Z.value=[]:Y.value=[]),n.loading=!0;try{const P=f==="clone"?"voice_clone":"voice_design",H=await je.getMyVoices({params:{creation_mode:P,skip:n.page,limit:Fe}}),re=(H==null?void 0:H.voices)??((w=H==null?void 0:H.data)==null?void 0:w.voices)??[];f==="clone"?Z.value=$?re:[...Z.value,...re]:Y.value=$?re:[...Y.value,...re],n.page+=1;const Se=(H==null?void 0:H.total_count)??((r=H==null?void 0:H.data)==null?void 0:r.total_count),Be=f==="clone"?Z.value.length:Y.value.length;n.hasMore=re.length>0&&(typeof Se=="number"?Be<Se:re.length===Fe)}catch(P){console.warn("[StudioVoice] load history failed",P)}finally{n.loading=!1}}},N=(f=l.value)=>k(f,!1),le=async()=>{await Promise.all([k("clone",!0),k("design",!0)])};return me(()=>{C.value&&URL.revokeObjectURL(C.value),Q.value&&URL.revokeObjectURL(Q.value),F()}),{activeTab:l,cloneStep:L,cloneBusy:p,cloneForm:m,cloneSourceUrl:C,prepareCloneFromFile:b,saveClone:s,resetClone:A,designStep:U,designBusy:c,designText:I,designImageUrl:Q,designPreviews:B,designForm:j,setDesignImage:u,generateDesign:X,selectDesignPreview:O,saveDesignForm:ie,backToDesignResult:ae,resetDesign:z,cloneHistory:Z,designHistory:Y,historyLoading:g,historyHasMore:_,loadHistory:k,loadMoreHistory:N,initHistory:le}}const Ut={class:"voice-clone"},Ft={key:0,class:"recording-panel"},Rt={class:"recording-wave"},xt={class:"recording-time"},Tt={key:0,class:"recording-dot"},Mt={key:1,class:"clone-cards"},Lt={class:"upload-option-icon"},It={class:"upload-option-icon"},Ot={class:"clone-or"},At={class:"record-tile"},Dt={class:"card-text"},Vt=ge({__name:"studioVoiceClone",props:{voice:{},assets:{default:()=>[]}},emits:["recording-change"],setup(o,{emit:T}){const d=o,S=T,{t:i}=de.global,{isCreditsMode:R,cloneUnitCost:l}=$e("voice_clone"),L=te(()=>R.value?i("voice.quota.buttonCredits",{credits:l.value}):""),p=M(null),m=M(!1),D=[32,50,42,58,66,48,72,56,44,61,38,52,69,47,60,36,54,49,57,43,65,51,73,58,46,62,40,55,68,45,59,37,53,64,48,70,52,42,60,49,66,56,44,63,38,54,71,50,58,41,52,36,49,28,24,20,18,16,15,14,13,12,12,12],C=M(0),A=te(()=>{const g=Math.floor(E.value/60),_=E.value%60;return`${String(g).padStart(2,"0")}
1:${String(_).padStart(2,"0")}`}),b=()=>{var g;m.value=!1,(g=p.value)==null||g.click()},s=()=>{m.value||b()},U=async g=>{var f;const _=g.target,k=(f=_.files)==null?void 0:f[0];if(_.value="",!k)return;if(k.size>Ve){V.warning(i("studio.studio.voice.tooLarge"));return}const N=URL.createObjectURL(k);if(await Q(N)>fe){URL.revokeObjectURL(N),V.warning(i("studio.studio.voice.tooLong"));return}await d.voice.prepareCloneFromFile(k,N)},c=async g=>{if(!d.voice.cloneBusy.value){if(m.value=!1,(g.duration||0)>fe){V.warning(i("studio.studio.voice.tooLong"));return}if(g.sourceUrl)try{const k=await(await fetch(g.sourceUrl)).blob(),N=new File([k],`${I(g)}.${x(k.type)}`,{type:k.type||"audio/mpeg"}),le=URL.createObjectURL(k);await d.voice.prepareCloneFromFile(N,le)}catch(_){V.error((_==null?void 0:_.message)||i("studio.studio.voice.analyzeFailed"))}}},I=g=>g.title||g.label||i(g.titleKey),x=g=>g.includes("webm")?"webm":g.includes("wav")?"wav":g.includes("ogg")?"ogg":(g.includes("mpeg"),"mp3"),Q=g=>new Promise(_=>{const k=document.createElement("audio");k.preload="metadata",k.onloadedmetadata=()=>_(Number.isFinite(k.duration)?k.duration:0),k.onerror=()=>_(0),k.src=g}),B=M(!1),j=M(!1),E=M(0);let W=null,v=[],u=null,F=null,z=null,X=!1;ke(B,g=>S("recording-change",g));const O=()=>{j.value?Y():Z()},ie=()=>{B.value=!0,E.value=0,C.value=0},ae=()=>{X=!0,j.value?Y():B.value=!1,v=[],E.value=0,C.value=0},Z=async()=>{try{z=await navigator.mediaDevices.getUserMedia({audio:!0})}catch{V.error(i("studio.studio.voice.micError"));return}v=[],X=!1,E.value=0,C.value=0;const g=MediaRecorder.isTypeSupported("audio/webm")?"audio/webm":"";W=new MediaRecorder(z,g?{mimeType:g}:void 0),W.addEventListener("dataavailable",_=>v.push(_.data)),W.addEventListener("stop",G),W.start(),j.value=!0,F=window.setInterval(()=>{C.value=(C.value+1)%D.length},160),u=window.setInterval(()=>{E.value+=1,E.value>=fe&&Y()},1e3)},Y=()=>{W==null||W.stop(),z==null||z.getTracks().forEach(g=>g.stop()),u&&window.clearInterval(u),F&&window.clearInterval(F),u=null,F=null,j.value=!1},G=async()=>{if(X){X=!1,B.value=!1,v=[];return}if(!v.length||E.value<2){V.warning(i("studio.studio.voice.recordTooShort"));return}const g=new Blob(v,{type:(W==null?void 0:W.mimeType)||"audio/webm"}),_=new File([g],`recorded-${Date.now()}.webm`,{type:g.type}),k=URL.createObjectURL(g);B.value=!1,await d.voice.prepareCloneFromFile(_,k)};return me(()=>{j.value&&Y()}),(g,_)=>{const k=Le;return a(),y("div",Ut,[q(k,{spinning:o.voice.cloneBusy.value&&o.voice.cloneStep.value==="input"},{default:oe(()=>[o.voice.cloneStep.value==="input"?(a(),y(ne,{key:0},[e(B)?(a(),y("div",Ft,[t("button",{class:"recording-back",type:"button",onClick:ae},[q(e(Ze)),t("span",null,h(e(i)("studio.studio.header.back")),1)]),t("div",Rt,[(a(),y(ne,null,ve(D,(N,le)=>t("span",{key:le,class:we(["wave-bar",{"is-active":e(j)&&le===e(C)}]),style:Qe({height:`${N}px`})},null,6)),64))]),t("p",xt,h(e(A)),1),t("button",{class:"recording-stop",type:"button",onClick:O},[e(j)?(a(),y("span",Tt)):se("",!0),t("span",null,h(e(j)?e(i)("studio.studio.voice.recordingLabel"):e(i)("studio.studio.voice.startRecording")),1)])])):(a(),y("div",Mt,[t("div",{class:"clone-upload-options",onClick:s},[t("input",{ref_key:"fileInputRef",ref:p,class:"clone-file-input",type:"file",accept:"audio/*",onChange:U},null,544),t("button",{class:"upload-option is-local",type:"button",onClick:Ce(b,["stop"])},[t("span",Lt,[q(ee,{name:"studio-upload-local",size:"16"})]),t("span",null,h(e(i)("studio.studio.voice.selectFromLocal")),1)]),t("button",{class:"upload-option is-assets",type:"button",onClick:_[0]||(_[0]=Ce(N=>m.value=!0,["stop"]))},[t("span",It,[q(ee,{name:"studio-select-assets",size:"16"})]),t("span",null,h(e(i)("studio.studio.voice.selectFromAssets")),1)])]),q(wt,{open:e(m),"onUpdate:open":_[1]||(_[1]=N=>Ie(m)?m.value=N:null),assets:d.assets,onSelect:c},null,8,["open","assets"]),t("span",Ot,h(e(i)("studio.studio.voice.or")),1),t("button",{class:"clone-card clone-record-card",type:"button",onClick:ie},[t("span",At,[q(ee,{name:"studio-microphone",size:"16"}),t("span",{class:we(["record-plus",{"is-on":e(j)}])},h(e(j)?"●":"+"),3)]),t("span",Dt,h(e(j)?e(i)("studio.studio.voice.recording",{sec:e(E)}):e(i)("studio.studio.voice.record")),1)])]))],64)):(a(),K(De,{key:1,form:o.voice.cloneForm.value,busy:o.voice.cloneBusy.value,"credit-text":e(L),"onUpdate:form":_[2]||(_[2]=N=>o.voice.cloneForm.value=N),onSave:_[3]||(_[3]=N=>o.voice.saveClone()),onBack:_[4]||(_[4]=N=>o.voice.resetClone())},null,8,["form","busy","credit-text"]))]),_:1},8,["spinning"])])}}}),Bt=pe(Vt,[["__scopeId","data-v-140601cd"]]),Et={class:"voice-design"},Pt={key:0,class:"design-card"},Ht={class:"design-inner"},jt={class:"design-top"},zt={class:"design-image"},Nt=["src"],qt=["aria-label"],Wt={class:"design-image-text"},Qt=["value","disabled","maxlength","placeholder"],Xt={class:"design-footer"},Kt={class:"design-counter"},Yt=["disabled"],Gt={key:1,class:"design-result"},Jt={class:"result-head"},Zt={class:"result-title"},eo={class:"result-list"}
1,to=["onClick"],oo={key:1,class:"pause-bars","aria-hidden":"true"},so={class:"result-name"},no={class:"result-duration"},io=["onClick"],ao=ge({__name:"studioVoiceDesign",props:{voice:{}},setup(o){const T=o,{t:d}=de.global,{isCreditsMode:S,designUnitCost:i}=$e("voice_design"),R=te(()=>S.value?d("voice.quota.buttonCredits",{credits:i.value}):""),l=M(null),L=b=>{var c;const s=b.target,U=(c=s.files)==null?void 0:c[0];if(s.value="",!!U){if(U.size>Ve){V.warning(d("studio.studio.voice.tooLarge"));return}T.voice.setDesignImage(U)}},p=M("");let m=null;const D=()=>{m&&(m.pause(),m.removeAttribute("src"),m.load(),m=null,p.value="")},C=b=>{if(m||(m=new Audio,m.crossOrigin="anonymous",m.onended=()=>p.value=""),p.value===b.id){m.pause(),p.value="";return}m.src=b.url,m.play().catch(()=>p.value=""),p.value=b.id},A=b=>{const s=Math.max(0,Math.round(b||0));return`${String(Math.floor(s/60)).padStart(2,"0")}:${String(s%60).padStart(2,"0")}`};return Oe(D),me(D),(b,s)=>{const U=Te;return a(),y("div",Et,[o.voice.designStep.value==="input"?(a(),y("div",Pt,[t("div",Ht,[t("div",jt,[t("label",zt,[t("input",{ref_key:"imageInputRef",ref:l,class:"design-image-input",type:"file",accept:"image/*",onChange:L},null,544),o.voice.designImageUrl.value?(a(),y(ne,{key:0},[t("img",{src:o.voice.designImageUrl.value,crossorigin:"anonymous",alt:""},null,8,Nt),t("button",{class:"design-image-remove",type:"button","aria-label":e(d)("global.global.delete"),onClick:s[0]||(s[0]=Ce(c=>o.voice.setDesignImage(null),["prevent","stop"]))},[q(U,{style:{"font-size":"9px"}})],8,qt)],64)):(a(),y(ne,{key:1},[q(ee,{name:"studio-image",size:"18"}),t("span",Wt,h(e(d)("studio.studio.voice.characterImage")),1)],64))]),t("textarea",{class:"design-textarea",value:o.voice.designText.value,disabled:o.voice.designBusy.value,maxlength:e(Ue),placeholder:e(d)("studio.studio.voice.designPlaceholder"),onInput:s[1]||(s[1]=c=>o.voice.designText.value=c.target.value)},null,40,Qt)]),t("div",Xt,[t("span",Kt,h(o.voice.designText.value.length)+"/"+h(e(Ue)),1),e(S)?(a(),K(Ae,{key:0,title:e(d)("studio.studio.voice.generateVoice"),"credit-text":e(R),loading:o.voice.designBusy.value,disabled:o.voice.designBusy.value,size:"compact","hide-glow":"",onClick:s[2]||(s[2]=c=>o.voice.generateDesign())},{icon:oe(()=>[q(ee,{name:"tts-design",size:"12",class:"generate-spark"})]),_:1},8,["title","credit-text","loading","disabled"])):(a(),y("button",{key:1,class:"design-generate",type:"button",disabled:o.voice.designBusy.value,onClick:s[3]||(s[3]=c=>o.voice.generateDesign())},[o.voice.designBusy.value?(a(),K(e(ze),{key:1})):(a(),K(ee,{key:0,name:"tts-design",size:"12",class:"generate-spark"})),t("span",null,h(e(d)("studio.studio.voice.generateVoice")),1)],8,Yt))])])])):o.voice.designStep.value==="result"?(a(),y("div",Gt,[t("div",Jt,[t("span",Zt,h(e(d)("studio.studio.voice.pickResult")),1),t("button",{class:"result-regenerate",type:"button",onClick:s[4]||(s[4]=c=>o.voice.resetDesign())},h(e(d)("studio.studio.voice.regenerate")),1)]),t("div",eo,[(a(!0),y(ne,null,ve(o.voice.designPreviews.value,(c,I)=>(a(),y("div",{key:c.id,class:"result-item"},[t("button",{class:"result-play",type:"button",onClick:x=>C(c)},[e(p)!==c.id?(a(),K(ee,{key:0,name:"pause",size:"10",class:"play-tri"})):(a(),y("span",oo,[...s[8]||(s[8]=[t("i",null,null,-1),t("i",null,null,-1)])]))],8,to),t("span",so,h(e(d)("studio.studio.voice.voiceIndex",{index:I+1})),1),t("span",no,h(A(c.duration)),1),t("button",{class:"result-save",type:"button",onClick:x=>o.voice.selectDesignPreview(c)},h(e(d)("studio.studio.voice.useThis")),9,io)]))),128))])])):(a(),K(De,{key:2,form:o.voice.designForm.value,busy:o.voice.designBusy.value,"onUpdate:form":s[5]||(s[5]=c=>o.voice.designForm.value=c),onSave:s[6]||(s[6]=c=>o.voice.saveDesignForm()),onBack:s[7]||(s[7]=c=>o.voice.backToDesignResult())},null,8,["form","busy"]))])}}}),lo=pe(ao,[["__scopeId","data-v-ab786a54"]]),co={class:"studio-voice-panel","data-testid":"studio-voice-panel"},ro={class:"voice-tab-label"},uo={class:"voice-body"},vo={key:0,class:"voice-history"},po={class:"history-head"},go={class:"history-title"},mo={class:"history-scroll"},fo={key:0,class:"history-list"}
1,yo=["onClick"],_o={key:1,class:"pause-bars","aria-hidden":"true"},ho=["title"],bo={class:"history-date"},wo={key:1,class:"history-empty"},ko={key:2,class:"history-loading","aria-hidden":"true"},Co={key:3,class:"history-no-more"},$o=ge({__name:"studioVoicePanel",props:{assets:{default:()=>[]}},emits:["useVoice"],setup(o,{expose:T,emit:d}){const S=o,i=d,{t:R}=de.global,l=St(),L=M(null),p=M(!1);let m="tab_click";const D=te(()=>[{value:"clone",payload:{text:R("studio.studio.voice.tabs.clone"),icon:"tts-clone",iconColor:"#9296e8cc"}},{value:"design",payload:{text:R("studio.studio.voice.tabs.design"),icon:"tts-design",iconColor:"#72c978cc"}}]),C=te(()=>l.activeTab.value==="clone"?l.cloneHistory.value:l.designHistory.value),A=M("");let b=null;const s=v=>A.value===v,U=()=>{b&&(b.pause(),b.removeAttribute("src"),b.load(),b=null,A.value="")},c=v=>{const u=v.url||v.fallbackurl||"";if(u){if(b||(b=new Audio,b.crossOrigin="anonymous",b.onended=()=>A.value="",b.onpause=()=>{b&&b.ended&&(A.value="")}),A.value===v.voice_id){b.pause(),A.value="";return}b.src=u,b.play().catch(()=>A.value=""),A.value=v.voice_id}},I=v=>{if(!v)return"";const u=new Date(v*1e3),F=z=>String(z).padStart(2,"0");return`${F(u.getMonth()+1)}/${F(u.getDate())}/${u.getFullYear()} ${F(u.getHours())}:${F(u.getMinutes())}`},x=v=>{const u=v.currentTarget;u.scrollHeight<=u.clientHeight||u.scrollTop+u.clientHeight<u.scrollHeight-24||l.loadMoreHistory(l.activeTab.value)},Q=()=>{l.initHistory().then(B)},B=async()=>{await Ke(),L.value&&(L.value.scrollTop=0)};ke(()=>l.activeTab.value,B),ke(()=>l.activeTab.value,(v,u)=>{u&&et("voice",u,v,m),m="tab_click",v!=="clone"&&(p.value=!1)});const j=v=>v.includes("wav")?"wav":v.includes("webm")?"webm":v.includes("ogg")?"ogg":(v.includes("mpeg"),"mp3"),E=v=>new Promise(u=>{const F=document.createElement("audio");F.preload="metadata",F.crossOrigin="anonymous",F.onloadedmetadata=()=>u(Number.isFinite(F.duration)?F.duration:0),F.onerror=()=>u(0),F.src=v});return T({prepareCloneFromTimelineClip:async v=>{var F;m="timeline_context_menu",l.activeTab.value="clone";const u=((F=v.editedAudio)==null?void 0:F.url)||v.sourceUrl||"";if(!u){V.error(R("studio.studio.voice.analyzeFailed"));return}try{const X=await(await fetch(u)).blob(),O=URL.createObjectURL(X),ie=await E(O),ae=kt(v,ie);if(ae.useFullFile){const G=new File([X],`voice-clone.${j(X.type)}`,{type:X.type||"audio/mpeg"});await l.prepareCloneFromFile(G,O);return}URL.revokeObjectURL(O);const{audioUrl:Z,destroy:Y}=await qe(u,ae.start,ae.end);try{const G=await fetch(Z).then(k=>k.blob()),g=URL.createObjectURL(G),_=new File([G],"voice-clone.wav",{type:G.type||"audio/wav"});await l.prepareCloneFromFile(_,g)}finally{Y()}}catch(z){console.warn("[StudioVoice] prepare clone from timeline clip failed",z),V.error(R("studio.studio.voice.analyzeFailed"))}}}),Xe(()=>{l.initHistory(),B()}),Oe(U),me(U),(v,u)=>{const F=ot,z=xe,X=Le;return a(),y("div",co,[q(F,{value:e(l).activeTab.value,"onUpdate:value":u[0]||(u[0]=O=>e(l).activeTab.value=O),class:"voice-tabs",options:e(D)},{label:oe(({payload:O})=>[t("span",ro,[q(ee,{name:O.icon,size:"10",color:O.iconColor},null,8,["name","color"]),t("span",null,h(O.text),1)])]),_:1},8,["value","options"]),t("div",{ref_key:"voiceContentScrollRef",ref:L,class:"voice-content-scroll",onScroll:x},[t("div",uo,[e(l).activeTab.value==="clone"?(a(),K(Bt,{key:0,voice:e(l),assets:S.assets,onRecordingChange:u[1]||(u[1]=O=>p.value=O)},null,8,["voice","assets"])):(a(),K(lo,{key:1,voice:e(l)},null,8,["voice"]))]),e(p)?se("",!0):(a(),y("div",vo,[t("div",po,[t("p",go,h(e(R)("studio.studio.voice.generationHistory")),1),q(z,{class:"history-reload-btn",type:"text",disabled:e(l).historyLoading.value,onClick:Q},{default:oe(()=>[e(l).historyLoading.value?se("",!0):(a(),K(e(tt),{key:0}))]),_:1},8,["disabled"])]),t("div",mo,[q(X,{spinning:e(l).historyLoading.value&&!e(C).length},{default:oe(()=>[e(C).length?(a(),y("div",fo,[(a(!0),y(ne,null,ve(e(C),O=>(a(),y("div",{key:O.voice_id,class:"history-item"},[t("button",{class:"history-play",type:"button",onClick:ie=>c(O)},[s(O.voice_id)?(a(),y("span",_o,[...u[2]||(u[2]=[t("i",null,null,-1),t("i",null,null,-1)])])):(a(),K(ee,{
1key:0,name:"pause",size:"12"}))],8,yo),t("span",{class:"history-name",title:e(Me)?void 0:O.display_name},h(O.display_name),9,ho),q(z,{class:"history-use-btn",type:"primary","data-testid":"studio-voice-use",onClick:ie=>i("useVoice",O)},{default:oe(()=>[be(h(e(R)("studio.studio.voice.useIt")),1)]),_:1},8,["onClick"]),t("span",bo,h(I(O.create_time)),1)]))),128))])):e(l).historyLoading.value?se("",!0):(a(),y("p",wo,h(e(R)("studio.studio.voice.historyEmpty")),1)),e(l).historyLoading.value&&e(C).length&&e(l).historyHasMore.value?(a(),y("div",ko,[...u[3]||(u[3]=[t("i",null,null,-1),t("i",null,null,-1),t("i",null,null,-1)])])):e(C).length&&!e(l).historyHasMore.value?(a(),y("p",Co,h(e(R)("studio.studio.voice.historyNoMore")),1)):se("",!0)]),_:1},8,["spinning"])])]))],544)])}}}),ds=pe($o,[["__scopeId","data-v-5fc50823"]]);export{ds as default};

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.