A virtual newsroom powered by RSS and AI.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

73 lines
2.1 KiB

// 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<IGeneratedFile> {
try {
console.log("requesting audio resource");
const openAiService = this.getService<OpenAiService>("openAi");
return openAiService.generateSpeech(input, model, voice);
} catch (error) {
throw new Error("failed to generate speech audio file", { cause: error });
}
}
async reportStats ( ) : Promise<void> {
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<MinioService>("minio");
* const bucket = env.minio.buckets.audios;
* const key = `${response._id.toString()}.wav`;
* const info = await minioService.uploadFile({ bucket, key, filePath: response.file });
*/