// speechgen.ts // Copyright (C) 2025 DTP Technologies, LLC // All Rights Reserved import assert from "node:assert"; import fs from "node:fs"; import { DtpProcess } from "./lib/dtplib.js"; import { SpeechVoice } from "./app/models/lib/speech-personality.js"; import OpenAiService, { IGeneratedFile } from "app/services/openai.js"; class SpeechGenerator extends DtpProcess { static get name ( ) { return "SpeechGenerator"; } static get slug ( ) { return "speechgen"; } constructor ( ) { super(SpeechGenerator); } async generate (model: string, voice: SpeechVoice, input: string) : Promise { try { console.log("requesting audio resource"); const openAiService = this.getService("openAi"); return openAiService.generateSpeech(input, model, voice); } catch (error) { throw new Error("failed to generate speech audio file", { cause: error }); } } async reportStats ( ) : Promise { this.log.info("this process does not report statistics"); } } (async ( ) => { try { console.log("Speech Generator: A command line tool to generate audio"); const generator = new SpeechGenerator(); await generator.start(); const model = process.argv[2]; assert(model, "Must specify model (tts-1, tts-1-hd)"); const voice = process.argv[3] as SpeechVoice; assert(voice, "Must specify voice"); const inputFile = process.argv[4]; assert(inputFile, "Must specify input filename"); const inputText = await fs.promises.readFile(inputFile, "utf-8"); console.log("generating audio"); const response = await generator.generate(model, voice, inputText); generator.log.info("speech audio file generated", response); } catch (error) { console.error("audiogen has failed", error); } })(); /* * NOTEPAD * * import env from "./config/env.js"; * import MinioService from "app/services/minio.js"; * * const minioService = this.getService("minio"); * const bucket = env.minio.buckets.audios; * const key = `${response._id.toString()}.wav`; * const info = await minioService.uploadFile({ bucket, key, filePath: response.file }); */