Files
sionrui/frontend/hooks/web/useVoiceText.ts

62 lines
1.7 KiB
TypeScript
Raw Normal View History

2026-01-18 15:27:43 +08:00
import type {
AudioItem,
TranscriptionResult,
2025-11-12 22:45:29 +08:00
TranscriptionResponse,
2026-01-18 15:27:43 +08:00
TranscriptionData
2025-11-12 22:45:29 +08:00
} from '@gold/config/types'
2025-11-10 00:59:40 +08:00
2026-01-18 15:27:43 +08:00
import BaiLianService from '@/api/bailian'
2025-11-10 00:59:40 +08:00
/**
2026-01-18 15:27:43 +08:00
*
2025-11-10 00:59:40 +08:00
* @param list -
* @returns
*/
2025-11-12 22:45:29 +08:00
export async function getVoiceText(
2025-11-13 01:06:28 +08:00
list: AudioItem[]
2025-11-12 22:45:29 +08:00
): Promise<TranscriptionResult[]> {
2026-01-18 15:27:43 +08:00
const ret = await (BaiLianService as any).videoToCharacters({
2025-11-10 00:59:40 +08:00
fileLinkList: list.map(item => item.audio_url),
})
2026-01-18 15:27:43 +08:00
2025-11-10 00:59:40 +08:00
const data: string = ret.data
const rst: TranscriptionResponse = JSON.parse(data)
const transcription_url: string[] = rst.results.map(item => item.transcription_url)
2026-01-18 15:27:43 +08:00
2025-11-10 00:59:40 +08:00
const transcriptions: TranscriptionResult[] = await Promise.all(
(transcription_url || []).filter(Boolean).map(async (url: string): Promise<TranscriptionResult> => {
try {
const resp: Response = await fetch(url)
const contentType: string = resp.headers.get('content-type') || ''
const value: string = contentType.includes('application/json')
? JSON.stringify(await resp.json())
: await resp.text()
const parsed: TranscriptionData = JSON.parse(value)
2026-01-18 15:27:43 +08:00
return {
key: url,
audio_url: parsed.file_url,
value: parsed.transcripts?.[0]?.text || ''
2025-11-10 00:59:40 +08:00
}
} catch (e: unknown) {
console.warn('获取转写内容失败:', url, e)
return { key: url, value: '' }
}
})
)
return transcriptions
}
interface UseVoiceTextReturn {
2025-11-13 01:06:28 +08:00
getVoiceText: (list: AudioItem[]) => Promise<TranscriptionResult[]>
2025-11-10 00:59:40 +08:00
}
/**
2026-01-18 15:27:43 +08:00
* Hook
* @returns getVoiceText方法的对象
2025-11-10 00:59:40 +08:00
*/
2025-11-13 01:06:28 +08:00
export default function useVoiceText(): UseVoiceTextReturn {
2026-01-18 15:27:43 +08:00
return {
2025-11-13 01:06:28 +08:00
getVoiceText
2025-11-12 22:45:29 +08:00
}
2025-11-10 00:59:40 +08:00
}