link-stack/apps/bridge-worker/tasks/voice/voice-line-audio-update.ts

49 lines
1.2 KiB
TypeScript
Raw Normal View History

2023-02-13 12:41:30 +00:00
import { createHash } from "crypto";
2024-04-21 16:59:50 +02:00
import { withDb, AppDatabase } from "../../lib/db";
import { convert } from "../../lib/media-convert";
2023-02-13 12:41:30 +00:00
interface VoiceLineAudioUpdateTaskOptions {
voiceLineId: string;
}
const sha1sum = (v: any) => {
const shasum = createHash("sha1");
shasum.update(v);
return shasum.digest("hex");
};
const voiceLineAudioUpdateTask = async (
2024-04-21 16:59:50 +02:00
payload: VoiceLineAudioUpdateTaskOptions,
2023-02-13 12:41:30 +00:00
): Promise<void> =>
withDb(async (db: AppDatabase) => {
const { voiceLineId } = payload;
const voiceLine = await db.voiceLines.findById({ id: voiceLineId });
if (!voiceLine) return;
if (!voiceLine?.promptAudio?.["audio/webm"]) return;
const webm = Buffer.from(voiceLine.promptAudio["audio/webm"], "base64");
const webmSha1 = sha1sum(webm);
if (
voiceLine.promptAudio.checksum &&
voiceLine.promptAudio.checksum === webmSha1
) {
// already converted
return;
}
const mp3 = await convert(webm);
await db.voiceLines.updateById(
{ id: voiceLine.id },
{
promptAudio: {
...voiceLine.promptAudio,
"audio/mpeg": mp3.toString("base64"),
checksum: webmSha1,
},
2024-04-21 16:59:50 +02:00
},
2023-02-13 12:41:30 +00:00
);
});
export default voiceLineAudioUpdateTask;