@minto-ai/microsoft-tts
Version:
微软LAT 语音转文本
146 lines (145 loc) • 4.1 kB
TypeScript
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 {};