feat: 功能

This commit is contained in:
2025-11-12 22:45:29 +08:00
parent 94c114a44d
commit fc7d2ccea5
41 changed files with 2406 additions and 343 deletions

View File

@@ -1,26 +1,33 @@
import CommonService from '@/api/common'
import type { AudioItem, TranscriptionResult } from '@/src/types/global'
// 使用公共类型定义
import type {
AudioItem,
TranscriptionResult,
TranscriptionResponse,
TranscriptionData
} from '@gold/config/types'
/**
* 转录数据接口
* API 服务接口(需要从应用层注入)
*/
interface TranscriptionData {
file_url?: string
transcripts?: Array<{ text: string }>
interface ApiService {
videoToCharacters: (data: { fileLinkList: string[] }) => Promise<{ data: string }>
}
// 全局 API 服务实例(由应用层设置)
let apiServiceInstance: ApiService | null = null
/**
* 响应结果接口
* 设置 API 服务实例
* @param service - API 服务对象
*/
interface TranscriptionResponse {
results: Array<{
transcription_url: string
}>
export function setApiService(service: ApiService) {
apiServiceInstance = service
}
/**
* 将音频列表转换为文本转录
* @param list - 音频项列表
* @param apiService - API 服务实例(可选,如果已通过 setApiService 设置则不需要)
* @returns 转录结果数组
* @throws 当转录过程出错时抛出错误
*
@@ -29,9 +36,19 @@ interface TranscriptionResponse {
* const transcriptions = await getVoiceText(audioList)
* console.log(transcriptions) // [{ key: 'url', value: 'transcribed text' }]
*/
export async function getVoiceText(list: AudioItem[]): Promise<TranscriptionResult[]> {
export async function getVoiceText(
list: AudioItem[],
apiService?: ApiService
): Promise<TranscriptionResult[]> {
// 使用传入的 apiService 或全局实例
const service = apiService || apiServiceInstance
if (!service) {
throw new Error('getVoiceText: 需要提供 API 服务实例。请使用 setApiService() 设置或传入 apiService 参数')
}
// 调用API将视频转换为文本
const ret = await CommonService.videoToCharacters({
const ret = await service.videoToCharacters({
fileLinkList: list.map(item => item.audio_url),
})
@@ -68,19 +85,29 @@ export async function getVoiceText(list: AudioItem[]): Promise<TranscriptionResu
* Hook 返回值接口
*/
interface UseVoiceTextReturn {
getVoiceText: (list: AudioItem[]) => Promise<TranscriptionResult[]>
getVoiceText: (list: AudioItem[], apiService?: ApiService) => Promise<TranscriptionResult[]>
}
/**
* 语音文本转换 Hook
* @param apiService - API 服务实例(可选,如果已通过 setApiService 设置则不需要)
* @returns 包含 getVoiceText 方法的对象
*
* @example
* // 方式一:使用全局设置的 API 服务
* setApiService(myApiService)
* const { getVoiceText } = useVoiceText()
* const result = await getVoiceText(audioList)
*
* @example
* // 方式二:传入 API 服务实例
* const { getVoiceText } = useVoiceText()
* const result = await getVoiceText(audioList, myApiService)
*/
export default function useVoiceText(): UseVoiceTextReturn {
return { getVoiceText }
export default function useVoiceText(apiService?: ApiService): UseVoiceTextReturn {
return {
getVoiceText: (list: AudioItem[]) => getVoiceText(list, apiService)
}
}