本文档描述了语音转文字数据流SDK的通用TypeScript架构设计,确保SDK可以在任何TypeScript项目中使用,不依赖特定框架。
@agora/stt-sdk@agora/stt-sdk/react@agora/stt-sdk/vue@agora/stt-sdk/angular┌─────────────────────────────────────────┐
│ 应用层 (Application) │
├─────────────────────────────────────────┤
│ 框架适配器 (可选) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ React │ │ Vue │ │ Angular │ │
│ │ Adapter │ │ Adapter │ │ Adapter │ │
│ └─────────┘ └─────────┘ └─────────┘ │
├─────────────────────────────────────────┤
│ 核心SDK层 │
│ ┌─────────┐ ┌─────────┐ │
│ │ SttClient│ │ RtmClient│ │
│ └─────────┘ └─────────┘ │
├─────────────────────────────────────────┤
│ 管理器层 │
│ ┌─────────┐ ┌─────────┐ │
│ │SttManager│ │RtmManager│ │
│ └─────────┘ └─────────┘ │
├─────────────────────────────────────────┤
│ 服务层 │
│ ┌─────────┐ ┌─────────┐ │
│ │ STT API │ │ RTM API │ │
│ └─────────┘ └─────────┘ │
└─────────────────────────────────────────┘
class SttSdk {
// 单例模式,全局配置管理
private static instance: SttSdk
private config: SttSdkConfig
// 管理器实例池
private sttManagers: Map<string, SttManager>
private rtmManagers: Map<string, RtmManager>
// 客户端实例池
private sttClients: Map<string, SttClient>
private rtmClients: Map<string, RtmClient>
// 公共方法
initialize(config: SttSdkConfig): Promise<void>
createSttClient(options: SttClientOptions): SttClient
createRtmClient(options: RtmClientOptions): RtmClient
destroy(): Promise<void>
}
class SttClient {
// 状态管理
private state: SttClientState
// 事件系统
private eventEmitter: EventEmitter
// 依赖注入
private sttManager: SttManager
private rtmManager: RtmManager
// 公共API
initialize(options: SttInitOptions): Promise<void>
startTranscription(options: StartOptions): Promise<void>
stopTranscription(): Promise<void>
// 事件监听
on(event: string, callback: Function): void
off(event: string, callback: Function): void
}
interface SttClientEvents {
initialized: () => void
transcriptionStart: () => void
transcriptionStop: () => void
transcriptionResult: (result: TranscriptionResult) => void
error: (error: SttError) => void
}
interface RtmClientEvents {
connected: () => void
disconnected: () => void
userListChanged: (users: ISimpleUserInfo[]) => void
messageReceived: (message: any) => void
}
stt-sdk/
├── src/
│ ├── core/
│ │ ├── SttSdk.ts # 主SDK类
│ │ ├── SttClient.ts # STT客户端
│ │ ├── RtmClient.ts # RTM客户端
│ │ └── EventEmitter.ts # 事件系统
│ ├── managers/
│ │ ├── SttManager.ts # STT管理器封装
│ │ └── RtmManager.ts # RTM管理器封装
│ ├── types/
│ │ ├── index.ts # 类型定义
│ │ ├── events.ts # 事件类型
│ │ └── errors.ts # 错误类型
│ └── utils/
│ ├── config.ts # 配置工具
│ └── validation.ts # 验证工具
├── dist/ # 构建输出
├── package.json
└── README.md
stt-sdk-react/
├── src/
│ ├── hooks/
│ │ ├── useSttClient.ts # React Hook
│ │ └── useRtmClient.ts # React Hook
│ ├── components/
│ │ ├── SttProvider.tsx # Context Provider
│ │ └── Transcription.tsx # 示例组件
│ └── types/
│ └── index.ts # React特定类型
├── dist/
├── package.json
└── README.md
stt-sdk-vue/
├── src/
│ ├── composables/
│ │ ├── useSttClient.ts # Vue Composable
│ │ └── useRtmClient.ts # Vue Composable
│ ├── components/
│ │ ├── SttProvider.vue # Provide/Inject
│ │ └── Transcription.vue # 示例组件
│ └── types/
│ └── index.ts # Vue特定类型
├── dist/
├── package.json
└── README.md
import { createSttSdk } from "@agora/stt-sdk"
const sdk = createSttSdk()
await sdk.initialize(config)
const sttClient = sdk.createSttClient(options)
sttClient.on("transcriptionResult", handleResult)
await sttClient.initialize()
import { createSttSdk } from "@agora/stt-sdk"
// 可用于服务端的语音处理
const sdk = createSttSdk()
await sdk.initialize(config)
// 处理音频文件转录
const result = await processAudioFile(audioBuffer)
// 在Chrome扩展中使用
const sdk = createSttSdk()
await sdk.initialize(config)
// 捕获标签页音频进行转录
chrome.tabs.captureVisibleTab((audio) => {
// 处理音频转录
})
interface SttPlugin {
name: string
install(sdk: SttSdk): void
}
// 自定义插件示例
class AnalyticsPlugin implements SttPlugin {
install(sdk: SttSdk) {
sdk.on("transcriptionResult", this.trackAnalytics)
}
private trackAnalytics(result: TranscriptionResult) {
// 发送分析数据
}
}
// 为其他框架创建适配器
class CustomFrameworkAdapter {
static createSttClient(sdk: SttSdk, options: any) {
// 返回框架特定的客户端实例
}
}
这个架构设计确保了SDK的通用性、可扩展性和高性能,同时保持了与现有代码的兼容性。