orate
Version:
The AI toolkit for speech.
2 lines (1 loc) • 1.33 kB
JavaScript
import A from"@google-cloud/speech";import i from"@google-cloud/text-to-speech";import s from"deepmerge";var o=class{constructor(a){if(this.apiKey=a||process.env.GOOGLE_API_KEY||"",!this.apiKey)throw new Error("GOOGLE_API_KEY is not set")}createTTSProvider(){return new i.TextToSpeechClient({apiKey:this.apiKey})}createSTTProvider(){return new A.v2.SpeechClient({apiKey:this.apiKey})}tts(a="en-US-Casual-K",e){let t=this.createTTSProvider();return{generate:async d=>{let r=s({input:{text:d},voice:{name:a,languageCode:"en-US"},audioConfig:{audioEncoding:"MP3"}},e!=null?e:{}),[n]=await t.synthesizeSpeech(r);if(!n.audioContent)throw new Error("No audio content returned.");if(typeof n.audioContent=="string")throw new Error("Audio content is a string.");return new File([n.audioContent],"speech.mp3",{type:"audio/mpeg"})}}}stt(a,e){let t=this.createSTTProvider();return{generate:async d=>{var u,l;let v=await d.arrayBuffer(),r=Buffer.from(v).toString("base64"),N=s({recognizer:a,content:r},e!=null?e:{}),[S]=await t.recognize(N);if(!((u=S.results)!=null&&u.length))throw new Error("No results returned.");if(!((l=S.results[0].alternatives)!=null&&l.length))throw new Error("No alternatives returned.");let{transcript:W}=S.results[0].alternatives[0];if(!W)throw new Error("No transcript returned.");return W}}}};export{o as Google};