fix: TTS朗读失败且刷新内容 — 安装edge-tts,前端改用blob播放代替downloadFile
This commit is contained in:
@@ -187,29 +187,59 @@ const copyResult = () => {
|
||||
const playTts = () => {
|
||||
if (!result.value) return
|
||||
const lang = targetLangs[targetIndex.value].code
|
||||
const token = uni.getStorageSync('token')
|
||||
const url = `${BASE_URL}/translate/tts?text=${encodeURIComponent(result.value)}&lang=${lang}`
|
||||
const text = result.value
|
||||
|
||||
uni.showLoading({ title: '语音生成中...' })
|
||||
uni.downloadFile({
|
||||
url,
|
||||
header: { Authorization: `Bearer ${token}` },
|
||||
success: (res) => {
|
||||
uni.hideLoading()
|
||||
if (res.statusCode === 200) {
|
||||
const audioCtx = uni.createInnerAudioContext()
|
||||
audioCtx.src = res.tempFilePath
|
||||
audioCtx.play()
|
||||
audioCtx.onEnded(() => audioCtx.destroy())
|
||||
} else {
|
||||
|
||||
if (typeof window !== 'undefined' && window.Audio) {
|
||||
const token = uni.getStorageSync('token')
|
||||
uni.request({
|
||||
url: `${BASE_URL}/translate/tts?text=${encodeURIComponent(text)}&lang=${lang}`,
|
||||
method: 'GET',
|
||||
header: { Authorization: `Bearer ${token}` },
|
||||
responseType: 'arraybuffer',
|
||||
success: (res) => {
|
||||
uni.hideLoading()
|
||||
if (res.statusCode === 200 && res.data) {
|
||||
const blob = new Blob([res.data], { type: 'audio/mpeg' })
|
||||
const url = URL.createObjectURL(blob)
|
||||
const audio = new Audio(url)
|
||||
audio.onended = () => { URL.revokeObjectURL(url) }
|
||||
audio.play().catch(() => {
|
||||
uni.showToast({ title: '播放失败,请检查音量', icon: 'none' })
|
||||
})
|
||||
} else {
|
||||
uni.showToast({ title: '语音生成失败', icon: 'none' })
|
||||
}
|
||||
},
|
||||
fail: () => {
|
||||
uni.hideLoading()
|
||||
uni.showToast({ title: '语音生成失败', icon: 'none' })
|
||||
}
|
||||
},
|
||||
fail: () => {
|
||||
uni.hideLoading()
|
||||
uni.showToast({ title: '语音生成失败', icon: 'none' })
|
||||
},
|
||||
})
|
||||
},
|
||||
})
|
||||
} else {
|
||||
const token = uni.getStorageSync('token')
|
||||
const url = `${BASE_URL}/translate/tts?text=${encodeURIComponent(text)}&lang=${lang}`
|
||||
uni.downloadFile({
|
||||
url,
|
||||
header: { Authorization: `Bearer ${token}` },
|
||||
success: (res) => {
|
||||
uni.hideLoading()
|
||||
if (res.statusCode === 200) {
|
||||
const audioCtx = uni.createInnerAudioContext()
|
||||
audioCtx.src = res.tempFilePath
|
||||
audioCtx.play()
|
||||
audioCtx.onEnded(() => audioCtx.destroy())
|
||||
} else {
|
||||
uni.showToast({ title: '语音生成失败', icon: 'none' })
|
||||
}
|
||||
},
|
||||
fail: () => {
|
||||
uni.hideLoading()
|
||||
uni.showToast({ title: '语音生成失败', icon: 'none' })
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const handleExtract = async () => {
|
||||
|
||||
Reference in New Issue
Block a user