UNPKG

@stacksjs/audiox

Version:

Powerful audio processing for your media workflows.

4 lines (3 loc) 9.97 kB
function x(o){return o.split(/\r\n|\r|\n/g).filter((s)=>s.charAt(0)!==" "&&s.charAt(0)!=="[").join(` `)}async function O({args:o,input:s,output:i}){let u=Bun.spawn(o,{stderr:"pipe",stdin:"pipe",stdout:"pipe"}),d,f=async()=>{if(!s)return;let e=s.getReader();try{while(!0){let{done:n,value:c}=await e.read();if(n){u.stdin.end();break}u.stdin.write(c),u.stdin.flush()}}finally{e.releaseLock()}},t=async()=>{if(!i)return;let e=u.stdout.getReader(),n=new Bun.ArrayBufferSink;n.start({asUint8Array:!0});try{while(!0){let{done:c,value:a}=await e.read();if(c){d=n.end(),i?.onProcessDataEnd?.(d);break}n.write(a),i?.onProcessDataFlushed?.(a)}}finally{e.releaseLock()}};if(await Promise.all([f(),t()]),await u.exited!==0){let e=await Bun.readableStreamToText(u.stderr),n=x(e);throw new Error(n)}if(d)return d}async function j({args:o,input:s,timeout:i=30000}){return new Promise((u,d)=>{let f=Bun.spawn(o,{stdin:"pipe",stderr:"pipe"});f.stdin.write(s),f.stdin.end();let t=new Bun.ArrayBufferSink;t.start({asUint8Array:!0});let r=new Promise((e,n)=>{setTimeout(()=>{f.kill(),n(new Error("Process timed out"))},i)});(async()=>{try{await Promise.race([(async()=>{for await(let c of f.stdout)t.write(c);let e=await f.exited,n=f.signalCode;if(e!==0||n!==null){let c=await Bun.readableStreamToText(f.stderr),a=x(c);throw new Error(`Process exited with code ${e}, signal ${n}. Errors: ${a}`)}u(t.end())})(),r])}catch(e){f.kill(),d(e)}})()})}function A(o){if(!o)return[];let{codec:s,bitrate:i,channels:u,sampleRate:d,quality:f,metadata:t}=o;return[...s?["-acodec",s]:[],...i?["-b:a",i]:[],...u?["-ac",u.toString()]:[],...d?["-ar",d.toString()]:[],...f?["-q:a",f.toString()]:[],...t?Object.entries(t).flatMap(([r,e])=>["-metadata",`${r}=${e}`]):[]]}async function tt(o,s,i){try{await O({args:["ffmpeg","-i",o,...A(i),"-y",s]})}catch(u){i?.onError?.(u)}}async function et(o,s,i){try{await O({args:["ffmpeg","-i","pipe:0",...A(i),"-y",s],input:o})}catch(u){i?.onError?.(u)}}async function rt(o,s,i){try{await O({args:["ffmpeg","-i",o,...A(i),"-f","wav","pipe:1"],output:s})}catch(u){i?.onError?.(u)}}async function nt(o,s,i){try{await O({args:["ffmpeg","-i","pipe:0",...A(i),"-f","wav","pipe:1"],input:o,output:s})}catch(u){i?.onError?.(u)}}async function at(o){return await j({args:["ffmpeg","-i","pipe:0",...A({codec:"pcm_s16le",bitrate:"128k",channels:1,sampleRate:16000}),"-f","wav","pipe:1"],input:o})}async function st(o,s){let i=s?.metadataTags||[],u=i.length>0?["-show_entries",`format_tags=${i.join(",")}`]:[],d=Bun.spawn(["ffprobe","-v","error","-select_streams","a:0","-show_entries","stream=codec_name,channels,sample_rate,bit_rate,duration",...u,"-of","json",o],{stderr:"pipe"});if(await d.exited!==0){let n=await Bun.readableStreamToText(d.stderr),c=x(n);throw new Error(c)}let t=await new Response(d.stdout).json(),r=t?.streams,e=t?.format?.tags;return r.map((n)=>{let c={codec:n.codec_name,channels:n.channels,sampleRate:n.sample_rate,bitrate:n.bit_rate,duration:n.duration};if(e&&Object.keys(e).length>0&&i.length>0){c.metadata={};for(let a of i)if(e[a])c.metadata[a]=e[a]}return c})}import{resolve as G}from"node:path";var{create:U,defineProperty:S,getOwnPropertyDescriptor:F,getOwnPropertyNames:W,getPrototypeOf:$}=Object,N=Object.prototype.hasOwnProperty,z=(o,s)=>()=>(s||o((s={exports:{}}).exports,s),s.exports),D=(o,s,i,u)=>{if(s&&typeof s=="object"||typeof s=="function")for(let d of W(s))!N.call(o,d)&&d!==i&&S(o,d,{get:()=>s[d],enumerable:!(u=F(s,d))||u.enumerable});return o},L=(o,s,i)=>(i=o!=null?U($(o)):{},D(s||!o||!o.__esModule?S(i,"default",{value:o,enumerable:!0}):i,o)),q=z((o,s)=>{function i(t){if(typeof t!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(t))}function u(t,r){for(var e="",n=0,c=-1,a=0,l,p=0;p<=t.length;++p){if(p<t.length)l=t.charCodeAt(p);else{if(l===47)break;l=47}if(l===47){if(!(c===p-1||a===1))if(c!==p-1&&a===2){if(e.length<2||n!==2||e.charCodeAt(e.length-1)!==46||e.charCodeAt(e.length-2)!==46){if(e.length>2){var g=e.lastIndexOf("/");if(g!==e.length-1){g===-1?(e="",n=0):(e=e.slice(0,g),n=e.length-1-e.lastIndexOf("/")),c=p,a=0;continue}}else if(e.length===2||e.length===1){e="",n=0,c=p,a=0;continue}}r&&(e.length>0?e+="/..":e="..",n=2)}else e.length>0?e+="/"+t.slice(c+1,p):e=t.slice(c+1,p),n=p-c-1;c=p,a=0}else l===46&&a!==-1?++a:a=-1}return e}function d(t,r){var e=r.dir||r.root,n=r.base||(r.name||"")+(r.ext||"");return e?e===r.root?e+n:e+t+n:n}var f={resolve:function(){for(var t="",r=!1,e,n=arguments.length-1;n>=-1&&!r;n--){var c;n>=0?c=arguments[n]:(e===void 0&&(e=process.cwd()),c=e),i(c),c.length!==0&&(t=c+"/"+t,r=c.charCodeAt(0)===47)}return t=u(t,!r),r?t.length>0?"/"+t:"/":t.length>0?t:"."},normalize:function(t){if(i(t),t.length===0)return".";var r=t.charCodeAt(0)===47,e=t.charCodeAt(t.length-1)===47;return t=u(t,!r),t.length===0&&!r&&(t="."),t.length>0&&e&&(t+="/"),r?"/"+t:t},isAbsolute:function(t){return i(t),t.length>0&&t.charCodeAt(0)===47},join:function(){if(arguments.length===0)return".";for(var t,r=0;r<arguments.length;++r){var e=arguments[r];i(e),e.length>0&&(t===void 0?t=e:t+="/"+e)}return t===void 0?".":f.normalize(t)},relative:function(t,r){if(i(t),i(r),t===r||(t=f.resolve(t),r=f.resolve(r),t===r))return"";for(var e=1;e<t.length&&t.charCodeAt(e)===47;++e);for(var n=t.length,c=n-e,a=1;a<r.length&&r.charCodeAt(a)===47;++a);for(var l=r.length,p=l-a,g=c<p?c:p,y=-1,m=0;m<=g;++m){if(m===g){if(p>g){if(r.charCodeAt(a+m)===47)return r.slice(a+m+1);if(m===0)return r.slice(a+m)}else c>g&&(t.charCodeAt(e+m)===47?y=m:m===0&&(y=0));break}var _=t.charCodeAt(e+m),R=r.charCodeAt(a+m);if(_!==R)break;_===47&&(y=m)}var v="";for(m=e+y+1;m<=n;++m)(m===n||t.charCodeAt(m)===47)&&(v.length===0?v+="..":v+="/..");return v.length>0?v+r.slice(a+y):(a+=y,r.charCodeAt(a)===47&&++a,r.slice(a))},_makeLong:function(t){return t},dirname:function(t){if(i(t),t.length===0)return".";for(var r=t.charCodeAt(0),e=r===47,n=-1,c=!0,a=t.length-1;a>=1;--a)if(r=t.charCodeAt(a),r===47){if(!c){n=a;break}}else c=!1;return n===-1?e?"/":".":e&&n===1?"//":t.slice(0,n)},basename:function(t,r){if(r!==void 0&&typeof r!="string")throw new TypeError('"ext" argument must be a string');i(t);var e=0,n=-1,c=!0,a;if(r!==void 0&&r.length>0&&r.length<=t.length){if(r.length===t.length&&r===t)return"";var l=r.length-1,p=-1;for(a=t.length-1;a>=0;--a){var g=t.charCodeAt(a);if(g===47){if(!c){e=a+1;break}}else p===-1&&(c=!1,p=a+1),l>=0&&(g===r.charCodeAt(l)?--l===-1&&(n=a):(l=-1,n=p))}return e===n?n=p:n===-1&&(n=t.length),t.slice(e,n)}else{for(a=t.length-1;a>=0;--a)if(t.charCodeAt(a)===47){if(!c){e=a+1;break}}else n===-1&&(c=!1,n=a+1);return n===-1?"":t.slice(e,n)}},extname:function(t){i(t);for(var r=-1,e=0,n=-1,c=!0,a=0,l=t.length-1;l>=0;--l){var p=t.charCodeAt(l);if(p===47){if(!c){e=l+1;break}continue}n===-1&&(c=!1,n=l+1),p===46?r===-1?r=l:a!==1&&(a=1):r!==-1&&(a=-1)}return r===-1||n===-1||a===0||a===1&&r===n-1&&r===e+1?"":t.slice(r,n)},format:function(t){if(t===null||typeof t!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof t);return d("/",t)},parse:function(t){i(t);var r={root:"",dir:"",base:"",ext:"",name:""};if(t.length===0)return r;var e=t.charCodeAt(0),n=e===47,c;n?(r.root="/",c=1):c=0;for(var a=-1,l=0,p=-1,g=!0,y=t.length-1,m=0;y>=c;--y){if(e=t.charCodeAt(y),e===47){if(!g){l=y+1;break}continue}p===-1&&(g=!1,p=y+1),e===46?a===-1?a=y:m!==1&&(m=1):a!==-1&&(m=-1)}return a===-1||p===-1||m===0||m===1&&a===p-1&&a===l+1?p!==-1&&(l===0&&n?r.base=r.name=t.slice(1,p):r.base=r.name=t.slice(l,p)):(l===0&&n?(r.name=t.slice(1,a),r.base=t.slice(1,p)):(r.name=t.slice(l,a),r.base=t.slice(l,p)),r.ext=t.slice(a,p)),l>0?r.dir=t.slice(0,l-1):n&&(r.dir="/"),r},sep:"/",delimiter:":",win32:null,posix:null};f.posix=f,s.exports=f}),T=L(q()),h=T,M=T,k=function(o){return o},B=function(){throw new Error("Not implemented")};h.parse??=B;M.parse??=B;var b={resolve:h.resolve.bind(h),normalize:h.normalize.bind(h),isAbsolute:h.isAbsolute.bind(h),join:h.join.bind(h),relative:h.relative.bind(h),toNamespacedPath:k,dirname:h.dirname.bind(h),basename:h.basename.bind(h),extname:h.extname.bind(h),format:h.format.bind(h),parse:h.parse.bind(h),sep:"/",delimiter:":",win32:void 0,posix:void 0,_makeLong:k},E={sep:"\\",delimiter:";",win32:void 0,...b,posix:b};b.win32=E.win32=E;b.posix=b;var{resolve:V,normalize:ut,isAbsolute:dt,join:ft,relative:pt,toNamespacedPath:lt,dirname:mt,basename:ht,extname:gt,format:yt,parse:At,sep:wt,delimiter:bt}=b;function C(o,s){if(Array.isArray(s)&&!Array.isArray(o))return s;if(Array.isArray(s)&&Array.isArray(o))return s.map((u,d)=>{let f=o[d];if(w(u)&&w(f))return C(f,u);return u});if(!w(s)||!w(o))return s;let i={...o};for(let u in s)if(Object.prototype.hasOwnProperty.call(s,u)){let d=s[u],f=i[u];if(d===null||d===void 0)i[u]=d;else if(w(d)&&w(f))i[u]=C(f,d);else i[u]=d}return i}function w(o){return Boolean(o&&typeof o==="object"&&!Array.isArray(o))}async function I({name:o,cwd:s,defaultConfig:i,endpoint:u,headers:d={Accept:"application/json","Content-Type":"application/json"}}){if(typeof window==="undefined"){let f=V(s||"../../../",`${o}.config`);try{let t=await import(f),r=t.default||t;return C(i,r)}catch(t){return i}}if(!u)return console.warn("An API endpoint is required to load the client config."),i;try{let f=await fetch(u,{method:"GET",headers:d});if(!f.ok)throw new Error(`HTTP error! status: ${f.status}`);let t=await f.json();return C(i,t)}catch(f){return console.error("Failed to load client config:",f),i}}var __dirname="/home/runner/work/audiox/audiox/src",H={verbose:!0},P=await I({name:"audiox",cwd:G(__dirname,".."),defaultConfig:H});function _t(o,s,i){if(i===!1)return;if(i===!0||P.verbose===!0)console.debug(`[audiox:${o}] ${s}`);if(Array.isArray(i)){if(i.some((d)=>o.startsWith(d)))console.log(`[audiox:${o}] ${s}`)}if(Array.isArray(P.verbose)){if(P.verbose.some((d)=>o.startsWith(d)))console.log(`[audiox:${o}] ${s}`)}} export{tt as a,et as b,rt as c,nt as d,at as e,st as f,P as g,_t as h};