airi / assets /audio-record-COiXC0pt.js
nekomeowww's picture
release: build a5eae1bc9a727e5798d2da32a6451ac373445341
687ca7e
raw
history blame
3.09 kB
import{Fragment as e,computed as t,createBaseVNode as n,createBlock as r,createElementBlock as i,createTextVNode as a,createVNode as o,defineComponent as s,isRef as c,onMounted as l,onUnmounted as u,openBlock as d,ref as f,renderList as p,toDisplayString as m,toRef as h,unref as g,until as _,useDevicesList as v,useUserMedia as y,watch as b,withCtx as x}from"./index-C-t5bjx6.js";import"./import-url-browser-BPXUaBlv.js";import"./duckdb-mvp-C3i5IjU8.js";import"./index-CISmcbXk-BKEuzw_9.js";import"./types-AwjH7X1C.js";import"./stores-BW_6w_OI.js";import{Button_default as S}from"./Button-DE0e46lv.js";import{Option_default as C,Select_default as w}from"./src-B9Iy8991.js";import"./components-DaLVZOhF.js";import"./queues-DD1Fxfss.js";import"./composables-CEnUnIM2.js";import"./sleep-CvjNLutj.js";import"./queue-Bp4D1cP3.js";import"./dist-F6JCieW1.js";import"./webgpu-aYTuek9b.js";function T(){var e;let n=v({constraints:{audio:!0},requestPermissions:!1}),r=f((e=n.audioInputs.value[0])?.deviceId||``),i=f(),a=t(()=>n.audioInputs.value),o=f({audio:!0}),s=y({constraints:o,autoSwitch:!0,enabled:!1});async function c(){n.permissionGranted.value||n.isSupported.value&&await n.ensurePermissions()}b(r,()=>{r.value&&(o.value={audio:{deviceId:{exact:r.value}}})},{immediate:!0}),b(n.audioInputs,()=>{i.value=a.value.find(e=>e.deviceId===r.value)},{immediate:!0}),b([n.permissionGranted,a,r],async()=>{await c(),n.permissionGranted.value&&a.value.length!==0&&(i.value||=a.value[0])},{immediate:!0});async function l(){await c(),n.permissionGranted.value&&i.value&&(s.enabled.value&&s.restart(),s.start())}function u(){s.stop()}return{selectedAudioInputId:r,selectedAudioInput:i,audioInputs:a,start:l,stop:u,request:c,media:s}}function E(e,t=()=>Promise.resolve()){let n=f(),r=h(e);async function i(){if(await t(),await _(r).toBeTruthy(),!r.value){console.error(`No media media available`);return}n.value=new MediaRecorder(r.value),n.value.start()}function a(){n.value&&(n.value.stop(),n.value.ondataavailable=e=>{let t=e.data,n=URL.createObjectURL(t),r=new Audio(n);r.play()})}return{startRecord:i,stopRecord:a}}const D={class:`mt-4 w-full flex justify-center gap-2`};var O=s({__name:`audio-record`,setup(t){let{audioInputs:s,selectedAudioInputId:f,start:h,stop:_,media:v,request:y}=T(),{startRecord:b,stopRecord:O}=E(v.stream,h);return l(()=>y()),u(()=>_()),(t,l)=>(d(),i(`div`,null,[o(g(w),{modelValue:g(f),"onUpdate:modelValue":l[0]||=e=>c(f)?f.value=e:null,onChange:l[1]||=()=>g(h)()},{default:x(({value:e})=>{var t;return[n(`div`,null,m(e?(t=g(s).find(t=>t.deviceId===e))?.label:`Select Audio Input`),1)]}),options:x(({hide:t})=>[(d(!0),i(e,null,p(g(s),e=>(d(),r(g(C),{key:e.deviceId,value:e.deviceId,active:e.deviceId===g(f),onClick:e=>t()},{default:x(()=>[a(m(e.label),1)]),_:2},1032,[`value`,`active`,`onClick`]))),128))]),_:1},8,[`modelValue`]),n(`div`,D,[o(g(S),{onClick:g(b)},{default:x(()=>l[2]||=[a(` Start Recording `)]),_:1,__:[2]},8,[`onClick`]),o(g(S),{onClick:g(O)},{default:x(()=>l[3]||=[a(` Stop Recording `)]),_:1,__:[3]},8,[`onClick`])])]))}}),k=O;export{k as default};