PageSourceSearch

https://cdn.airia.ai/2.995.4/assets/use-streaming-tts-C0fvfeTB.js

js airia.ai collected 2026-10-05 11:48:41 UTC 4,755 bytes, 2 lines download raw bytes

1(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`2.995.4`};var t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`7664460e-921e-4754-98af-efccee9ba99b`,e._sentryDebugIdIdentifier=`sentry-dbid-7664460e-921e-4754-98af-efccee9ba99b`)}catch{}})();import{o as e}from"./rolldown-runtime-Zxr0Kps3.js";import{a as t}from"./vendor-auth-CZ8FLrTd.js";import{d as n}from"./authRedirect-Bli9udZP.js";import{Et as r}from"./vendor-router-ChM0-8kW.js";import{F as i}from"./utils-BZgSD4n7.js";var a=e(t(),1),o=`airia:pause-audio-playback`;async function s(e,t){let r=await n.getAccessToken(),a=new Headers(t?.headers);r&&a.set(`Authorization`,`Bearer ${r}`);let o=e.startsWith(`http`)?e:`${i()}${e}`;return fetch(o,{...t,headers:a})}var c=`audio/mpeg`;function l(e){let t=e.headers.get(`Content-Type`);if(!t)return c;let n=t.split(`;`)[0].trim();return n.startsWith(`audio/`)?n:c}function u(e){return typeof window>`u`||!(`MediaSource`in window)?!1:MediaSource.isTypeSupported(e)}async function d(e,t){let n=new AbortController,r=t?AbortSignal.any([t,n.signal]):n.signal,i=await s(`/v1/TextToSpeech/Stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:e.text,voice:e.voice}),signal:r});if(!i.ok)throw Error(`TTS request failed: ${i.status}`);if(!i.body)throw Error(`Response body is null`);let a=l(i),o=i.body.getReader();return u(a)?f(o,n,a):p(o,n,a)}function f(e,t,n){let r=new MediaSource,i=new Audio,a=URL.createObjectURL(r);i.src=a;let o=null,s=[],c=!1,l=()=>{if(!o||o.updating)return;if(s.length===0){c&&r.readyState===`open`&&r.endOfStream();return}let e=s.shift();o.appendBuffer(e)};return{audio:i,complete:new Promise((a,u)=>{let d=[],f=0;r.addEventListener(`sourceopen`,()=>{o=r.addSourceBuffer(n),o.addEventListener(`updateend`,()=>{l()});let p=async()=>{if(t.signal.aborted){e.cancel(),u(new DOMException(`Aborted`,`AbortError`));return}try{let{done:t,value:n}=await e.read();if(t){c=!0,l(),a(h(d,f));return}return d.push(n),f+=n.byteLength,s.push(n),l(),i.paused&&d.length===1&&i.play().catch(()=>{}),p()}catch(e){u(e)}};p()})}),abort:()=>{t.abort(),i.pause(),URL.revokeObjectURL(a),i.removeAttribute(`src`),i.load(),e.cancel()}}}function p(e,t,n){let r=new Audio,i=null;return{audio:r,complete:(async()=>{let a=[],o=0;for(;;){if(t.signal.aborted)throw e.cancel(),new DOMException(`Aborted`,`AbortError`);let{done:n,value:r}=await e.read();if(n)break;a.push(r),o+=r.byteLength}let s=h(a,o),c=new Blob([s],{type:n});return i=URL.createObjectURL(c),r.src=i,await r.play(),s})(),abort:()=>{t.abort(),r.pause(),i&&=(URL.revokeObjectURL(i),null),r.removeAttribute(`src`),r.load(),e.cancel()}}}function m(e,t=c){let n=new Audio,r=new Blob([e],{type:t}),i=URL.createObjectURL(r);return n.src=i,{audio:n,complete:Promise.resolve(e),abort:()=>{n.pause(),URL.revokeObjectURL(i),n.removeAttribute(`src`),n.load()}}}function h(e,t){let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.byteLength;return n}function g({text:e,voice:t,enabled:n=!0}){let[i,s]=(0,a.useState)(!1),[c,l]=(0,a.useState)(!1),[u,f]=(0,a.useState)(null),p=(0,a.useRef)(null),h=r(),g=(0,a.useMemo)(()=>[`tts-buffer`,e,t],[e,t]),_=(0,a.useCallback)(()=>{p.current&&=(p.current.abort(),null),s(!1),l(!1)},[]),v=(0,a.useCallback)(async()=>{if(!n||!e||(f(null),p.current&&i))return;if(p.current&&!i)try{let e=p.current.audio;e.ended&&(e.currentTime=0),await e.play(),s(!0);return}catch{}let r=h.getQueryData(g);try{if(r){let e=m(r);p.current=e,e.audio.onended=()=>s(!1),await e.audio.play(),s(!0)}else{l(!0);let n=await d({text:e,voice:t});p.current=n,n.audio.onended=()=>s(!1),s(!0),l(!1),n.complete.then(e=>{h.setQueryData(g,e)}).catch(()=>{})}}catch(e){let t=e instanceof Error?e:Error(`TTS playback failed`);t.name!==`AbortError`&&f(t),_()}},[n,e,t,i,g,h,_]),y=(0,a.useCallback)(()=>{p.current&&(p.current.audio.pause(),s(!1))},[]),b=p.current!==null;return(0,a.useEffect)(()=>{_()},[e,t,_]),(0,a.useEffect)(()=>{let e=()=>{document.hidden&&p.current&&(p.current.audio.pause(),s(!1))};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]),(0,a.useEffect)(()=>{let e=()=>{p.current&&(p.current.audio.pause(),s(!1))};return window.addEventListener(o,e),()=>window.removeEventListener(o,e)},[]),(0,a.useEffect)(()=>{let e=()=>_();return window.addEventListener(`beforeunload`,e),window.addEventListener(`pagehide`,e),()=>{window.removeEventListener(`beforeunload`,e),window.removeEventListener(`pagehide`,e),_()}},[_]),{play:v,pause:y,isPlaying:i,isLoading:c,hasAudio:b,error:u}}export{o as n,g as t};
2//# sourceMappingURL=use-streaming-tts-C0fvfeTB.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.