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
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 });
|
|
*/
|
|
|