This commit is contained in:
2026-01-18 15:27:43 +08:00
parent a0378b5cbd
commit 567e77cd87
14 changed files with 358 additions and 620 deletions

View File

@@ -1,39 +1,28 @@
// 使用公共类型定义
import type {
AudioItem,
TranscriptionResult,
import type {
AudioItem,
TranscriptionResult,
TranscriptionResponse,
TranscriptionData
TranscriptionData
} from '@gold/config/types'
// 直接导入 TikHub 服务,无需全局注入
import { TikHubService } from '@gold/api/services'
import BaiLianService from '@/api/bailian'
/**
* 音频列表转换为文本转录
* 音频转文本
* @param list - 音频项列表
* @returns 转录结果数组
* @throws 当转录过程出错时抛出错误
*
* @example
* const audioList = [{ audio_url: 'https://example.com/audio.mp3' }]
* const transcriptions = await getVoiceText(audioList)
* console.log(transcriptions) // [{ key: 'url', value: 'transcribed text' }]
*/
export async function getVoiceText(
list: AudioItem[]
): Promise<TranscriptionResult[]> {
// 直接使用 TikHub 服务
const ret = await TikHubService.videoToCharacters({
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<TranscriptionResult> => {
try {
@@ -43,10 +32,10 @@ export async function getVoiceText(
? 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 || ''
return {
key: url,
audio_url: parsed.file_url,
value: parsed.transcripts?.[0]?.text || ''
}
} catch (e: unknown) {
console.warn('获取转写内容失败:', url, e)
@@ -57,26 +46,16 @@ export async function getVoiceText(
return transcriptions
}
/**
* Hook 返回值接口
*/
interface UseVoiceTextReturn {
getVoiceText: (list: AudioItem[]) => Promise<TranscriptionResult[]>
}
/**
* 语音文本转换 Hook
* @returns 包含 getVoiceText 方法的对象
*
* @example
* const { getVoiceText } = useVoiceText()
* const result = await getVoiceText(audioList)
* 语音文本转换Hook
* @returns 包含getVoiceText方法的对象
*/
export default function useVoiceText(): UseVoiceTextReturn {
return {
return {
getVoiceText
}
}