From 6a9c76a1fbbaa4f48070b58ad797eb48c7e10751 Mon Sep 17 00:00:00 2001 From: Ting Chien Meng Date: Wed, 12 Feb 2025 13:54:10 +0800 Subject: [PATCH] clean code --- packages/plugin-elevenlabs/src/index.ts | 53 +------------------------ packages/plugin-elevenlabs/src/utils.ts | 53 +++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 52 deletions(-) create mode 100644 packages/plugin-elevenlabs/src/utils.ts diff --git a/packages/plugin-elevenlabs/src/index.ts b/packages/plugin-elevenlabs/src/index.ts index 71f66fef6ce..91dc27f3130 100644 --- a/packages/plugin-elevenlabs/src/index.ts +++ b/packages/plugin-elevenlabs/src/index.ts @@ -1,58 +1,7 @@ import { IAgentRuntime, Plugin, logger } from "@elizaos/core"; import { Readable } from "node:stream"; import { ModelClass } from "@elizaos/core"; -import { PassThrough } from "stream"; - -export function getWavHeader( - audioLength: number, - sampleRate: number, - channelCount = 1, - bitsPerSample = 16 -): Buffer { - const wavHeader = Buffer.alloc(44); - wavHeader.write("RIFF", 0); - wavHeader.writeUInt32LE(36 + audioLength, 4); // Length of entire file in bytes minus 8 - wavHeader.write("WAVE", 8); - wavHeader.write("fmt ", 12); - wavHeader.writeUInt32LE(16, 16); // Length of format data - wavHeader.writeUInt16LE(1, 20); // Type of format (1 is PCM) - wavHeader.writeUInt16LE(channelCount, 22); // Number of channels - wavHeader.writeUInt32LE(sampleRate, 24); // Sample rate - wavHeader.writeUInt32LE((sampleRate * bitsPerSample * channelCount) / 8, 28); // Byte rate - wavHeader.writeUInt16LE((bitsPerSample * channelCount) / 8, 32); // Block align ((BitsPerSample * Channels) / 8) - wavHeader.writeUInt16LE(bitsPerSample, 34); // Bits per sample - wavHeader.write("data", 36); // Data chunk header - wavHeader.writeUInt32LE(audioLength, 40); // Data chunk size - return wavHeader; -} - -function prependWavHeader( - readable: Readable, - audioLength: number, - sampleRate: number, - channelCount = 1, - bitsPerSample = 16 -): Readable { - const wavHeader = getWavHeader( - audioLength, - sampleRate, - channelCount, - bitsPerSample - ); - let pushedHeader = false; - const passThrough = new PassThrough(); - readable.on("data", (data) => { - if (!pushedHeader) { - passThrough.push(wavHeader); - pushedHeader = true; - } - passThrough.push(data); - }); - readable.on("end", () => { - passThrough.end(); - }); - return passThrough; -} +import { prependWavHeader } from "./utils.ts"; function getVoiceSettings(runtime: IAgentRuntime) { return { diff --git a/packages/plugin-elevenlabs/src/utils.ts b/packages/plugin-elevenlabs/src/utils.ts new file mode 100644 index 00000000000..85fa8b18218 --- /dev/null +++ b/packages/plugin-elevenlabs/src/utils.ts @@ -0,0 +1,53 @@ +import { PassThrough } from "stream"; +import { Readable } from "node:stream"; + +export function getWavHeader( + audioLength: number, + sampleRate: number, + channelCount = 1, + bitsPerSample = 16 +): Buffer { + const wavHeader = Buffer.alloc(44); + wavHeader.write("RIFF", 0); + wavHeader.writeUInt32LE(36 + audioLength, 4); // Length of entire file in bytes minus 8 + wavHeader.write("WAVE", 8); + wavHeader.write("fmt ", 12); + wavHeader.writeUInt32LE(16, 16); // Length of format data + wavHeader.writeUInt16LE(1, 20); // Type of format (1 is PCM) + wavHeader.writeUInt16LE(channelCount, 22); // Number of channels + wavHeader.writeUInt32LE(sampleRate, 24); // Sample rate + wavHeader.writeUInt32LE((sampleRate * bitsPerSample * channelCount) / 8, 28); // Byte rate + wavHeader.writeUInt16LE((bitsPerSample * channelCount) / 8, 32); // Block align ((BitsPerSample * Channels) / 8) + wavHeader.writeUInt16LE(bitsPerSample, 34); // Bits per sample + wavHeader.write("data", 36); // Data chunk header + wavHeader.writeUInt32LE(audioLength, 40); // Data chunk size + return wavHeader; +} + +export function prependWavHeader( + readable: Readable, + audioLength: number, + sampleRate: number, + channelCount = 1, + bitsPerSample = 16 +): Readable { + const wavHeader = getWavHeader( + audioLength, + sampleRate, + channelCount, + bitsPerSample + ); + let pushedHeader = false; + const passThrough = new PassThrough(); + readable.on("data", (data) => { + if (!pushedHeader) { + passThrough.push(wavHeader); + pushedHeader = true; + } + passThrough.push(data); + }); + readable.on("end", () => { + passThrough.end(); + }); + return passThrough; +}