import type { AudioItem, TranscriptionResult, TranscriptionResponse, TranscriptionData } from '@gold/config/types' import BaiLianService from '@/api/bailian' /** * 音频转文本 * @param list - 音频项列表 * @returns 转录结果数组 */ export async function getVoiceText( list: AudioItem[] ): Promise { const ret = await (BaiLianService as any).videoToCharacters({ fileLinkList: list.map(item => item.audio_url), }) const data: string = ret.data const rst: TranscriptionResponse = JSON.parse(data) const transcription_url: string[] = rst.results.map(item => item.transcription_url) const transcriptions: TranscriptionResult[] = await Promise.all( (transcription_url || []).filter(Boolean).map(async (url: string): Promise => { 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) return { key: url, audio_url: parsed.file_url, value: parsed.transcripts?.[0]?.text || '' } } catch (e: unknown) { console.warn('获取转写内容失败:', url, e) return { key: url, value: '' } } }) ) return transcriptions } interface UseVoiceTextReturn { getVoiceText: (list: AudioItem[]) => Promise } /** * 语音文本转换Hook * @returns 包含getVoiceText方法的对象 */ export default function useVoiceText(): UseVoiceTextReturn { return { getVoiceText } }