js-tts-wrapper
Version:
A JavaScript/TypeScript library that provides a unified API for working with multiple cloud-based Text-to-Speech (TTS) services
98 lines (97 loc) • 3.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MockTTSClient = void 0;
const abstract_tts_1 = require("../core/abstract-tts");
/**
* Mock TTS client for testing
*/
class MockTTSClient extends abstract_tts_1.AbstractTTSClient {
/**
* Get available voices (internal implementation)
* @returns Promise resolving to an array of unified voice objects
*/
async _getVoices() {
return [
{
id: "mock-voice-1",
name: "Mock Voice 1",
languageCodes: [
{
bcp47: "en-US",
iso639_3: "eng",
display: "English (United States)",
},
],
gender: "Female",
provider: "azure", // Use a supported provider
},
];
}
/**
* Convert text to audio bytes
* @param _text Text to synthesize
* @param _options Synthesis options
* @returns Promise resolving to audio bytes
*/
async synthToBytes(_text, _options) {
// Return a small WAV file header (44 bytes)
return new Uint8Array([
0x52, 0x49, 0x46, 0x46, 0x24, 0x00, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45,
0x66, 0x6d, 0x74, 0x20, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
0x44, 0xac, 0x00, 0x00, 0x88, 0x58, 0x01, 0x00, 0x02, 0x00, 0x10, 0x00,
0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00,
]);
}
/**
* Convert text to audio stream
* @param text Text to synthesize
* @param options Synthesis options
* @returns Promise resolving to audio stream
*/
async synthToBytestream(text, options) {
const bytes = await this.synthToBytes(text, options);
// Create a readable stream from the bytes
const stream = new ReadableStream({
start(controller) {
controller.enqueue(bytes);
controller.close();
},
});
// If word boundary information is requested
if (options?.useWordBoundary) {
// Create mock word boundaries
const words = text.split(/\s+/);
const wordBoundaries = words.map((word, index) => ({
text: word,
offset: index * 500, // 500ms per word
duration: 500,
}));
return {
audioStream: stream,
wordBoundaries,
};
}
return stream;
}
/**
* Start playback with word boundary callbacks
* @param text Text to speak
* @param callback Callback function for word boundaries
* @param _options Synthesis options
*/
async startPlaybackWithCallbacks(text, callback, _options) {
// Emit the start event
this.emit("start");
// Create mock word boundaries
const words = text.split(/\s+/);
// Call the callback for each word
for (let i = 0; i < words.length; i++) {
const word = words[i];
const offset = i * 500; // 500ms per word
callback(word, offset, offset + 500);
}
// Emit the end event
this.emit("end");
}
}
exports.MockTTSClient = MockTTSClient;