UNPKG

@minto-ai/microsoft-tts

Version:

微软LAT 语音转文本

146 lines (145 loc) 4.1 kB
import * as SpeechSDK from 'microsoft-cognitiveservices-speech-sdk'; /** * 可注册的文本转语音事件类型 * - audioData: 生成的音频数据(流式返回) * - synthesisStarted: 语音合成开始 * - synthesisCompleted: 语音合成完成 * - synthesisCanceled: 语音合成取消 * - error: 发生错误 * - play: 音频播放事件 * - playCompleted: 音频播放完成事件 */ export type TtsEvent = 'audioData' | 'synthesisStarted' | 'synthesisCompleted' | 'synthesisCanceled' | 'error' | 'play' | 'playCompleted'; /** * 事件回调函数类型定义 */ interface TtsEventCallbacks { audioData?: (data: ArrayBuffer, format: SpeechSDK.SpeechSynthesisOutputFormat) => void; synthesisStarted?: () => void; synthesisCompleted?: () => void; synthesisCanceled?: () => void; error?: (error: string) => void; play?: (data: ArrayBuffer) => void; playCompleted?: () => void; } /** * 文本转语音事件常量 * 用于避免注册事件时的拼写错误 */ export declare const TTS_EVENTS: Record<TtsEvent, TtsEvent>; /** * 语音配置选项 */ export interface SpeechOptions { voiceName?: string; rate?: number; volume?: number; pitch?: number; outputFormat?: SpeechSDK.SpeechSynthesisOutputFormat; language?: string; autoPlay?: boolean; smartBreaking?: boolean; } /** * 流式文本转语音类 * 实现文本到语音的实时流式转换 */ export default class MicrosoftTTS { private speechConfig; private synthesizers; private currentSynthesizerIndex; private callbacks; private outputFormat; private options; private audioContext; private audioQueue; private isPlaying; private source; private playResolve; private textBuffer; private sentenceEndings; private inputEnded; private hasPlayed; private hasPlayCompleted; /** * 构造函数 * @param subscriptionKey Azure语音服务订阅密钥 * @param region Azure语音服务区域(如"southeastasia") * @param options 语音配置选项 */ constructor(subscriptionKey: string, region: string, options?: SpeechOptions); /** * 为指定合成器绑定事件 * @param synthesizer 语音合成器 * @param index 合成器索引 */ private bindSynthesizerEvents; /** * 处理音频队列 */ private processAudioQueue; /** * 播放下一个音频片段 */ private playNextAudio; /** * 从PCM数据创建AudioBuffer * @param pcmData PCM音频数据 * @returns AudioBuffer对象 */ private createAudioBufferFromPCM; /** * 智能断句处理 * @param text 输入文本 * @returns 处理后的句子数组 */ private smartBreakText; /** * 转换文本为语音(流式) * @param text 要转换的文本 * @param ssml 是否使用SSML格式(默认false) */ speakText(text: string, ssml?: boolean): void; /** * 标记输入结束,处理缓冲区剩余文本并标记播放完成状态 */ end(): void; /** * 使用指定合成器处理文本 * @param text 要处理的文本 * @param ssml 是否使用SSML格式 */ private processTextWithSynthesizer; /** * 根据配置选项生成SSML文本 * @param text 原始文本 * @returns 生成的SSML文本 */ private generateSSML; /** * 刷新文本缓冲区,处理剩余文本 */ flush(): void; /** * 销毁实例,释放资源 */ destroy(): void; /** * 更新语音配置 * @param options 新的语音配置选项 */ updateOptions(options: SpeechOptions): void; /** * 注册事件回调 * @param event 事件名称 * @param callback 回调函数 * @throws 当回调不是函数时抛出错误 */ on<T extends TtsEvent>(event: T, callback: TtsEventCallbacks[T]): void; /** * 移除事件回调 * @param event 事件名称 */ off(event: TtsEvent): void; } export {};