fix: 上传的配音素材直接使用 file_url,不调 TTS 合成
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 32s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 43s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m48s
AI Code Review / AI Code Review (pull_request) Failing after 1m57s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m32s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m46s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m16s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m59s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 3m9s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 9m57s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 7m48s
CI/CD Pipeline / CI Gate (pull_request) Successful in 11s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 56s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 526h59m59s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 526h59m57s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 527h0m1s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 527h0m12s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 527h0m14s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 527h0m14s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 527h0m32s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 527h7m48s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 527h7m50s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 527h7m51s
CI/CD Pipeline / PR Build API Image (pull_request) Failing after 527h8m5s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 527h10m10s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 527h10m39s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 527h10m41s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 527h10m43s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 527h41m43s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 527h44m6s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 32s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 43s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m48s
AI Code Review / AI Code Review (pull_request) Failing after 1m57s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m32s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m46s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m16s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m59s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 3m9s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 9m57s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 7m48s
CI/CD Pipeline / CI Gate (pull_request) Successful in 11s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 56s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 526h59m59s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 526h59m57s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 527h0m1s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 527h0m12s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 527h0m14s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 527h0m14s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 527h0m32s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 527h7m48s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 527h7m50s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 527h7m51s
CI/CD Pipeline / PR Build API Image (pull_request) Failing after 527h8m5s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 527h10m10s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 527h10m39s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 527h10m41s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 527h10m43s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 527h41m43s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 527h44m6s
- 配音预览逻辑优化:优先检查 selectedVoice 是否为已上传素材 - 如果是上传素材,直接使用其 file_url 作为预览音频 - 仅对预设音色或克隆音色调用 previewTts 接口合成 - 切换配音或标题时自动重新生成预览音频 解决用户反馈:Step3 选择上传的配音素材后预览无声音的问题
This commit is contained in:
@@ -12,6 +12,7 @@ import React, { useMemo, useState, useEffect, useRef } from "react"
|
||||
import { Modal, message } from "antd"
|
||||
import { useNavigate } from "react-router-dom"
|
||||
import type { VoiceClone } from "@/api/voice-clone"
|
||||
import { useQuery } from "@tanstack/react-query"
|
||||
import { useCloneProgress } from "@/hooks/useCloneProgress"
|
||||
import CloneModal from "@/components/voice/CloneModal"
|
||||
import GenerateHeader from "./components/GenerateHeader"
|
||||
@@ -29,6 +30,7 @@ import { useStepNavigation } from "./hooks/useStepNavigation"
|
||||
import { useGenerateVideo } from "./hooks/useGenerateVideo"
|
||||
import { usePreviewAssets } from "./hooks/usePreviewAssets"
|
||||
import { useTitleStyleUpdaters } from "./hooks/useStep4Title/useTitleStyleUpdaters"
|
||||
import { getAssetsByKind } from "@/api/assets"
|
||||
import { previewTts } from "@/api/tts"
|
||||
import "./generate.css"
|
||||
|
||||
@@ -88,19 +90,35 @@ const GeneratePage: React.FC = () => {
|
||||
})
|
||||
|
||||
/* ── 配音预览音频(TTS 试听)── */
|
||||
const { data: voiceMaterials = [] } = useQuery({
|
||||
queryKey: ["assets", "voice"],
|
||||
queryFn: () => getAssetsByKind("voice", { limit: 50 }),
|
||||
})
|
||||
|
||||
const [previewVoiceAudioUrl, setPreviewVoiceAudioUrl] = useState<string | null>(null)
|
||||
const ttsAbortRef = useRef<AbortController | null>(null)
|
||||
|
||||
useEffect(() => {
|
||||
// 如果 selectedVoice 是已上传的配音素材,直接用 file_url
|
||||
const voiceAsset = voiceMaterials.find((m) => m.id === selectedVoice)
|
||||
if (voiceAsset?.file_url) {
|
||||
setPreviewVoiceAudioUrl(voiceAsset.file_url)
|
||||
return
|
||||
}
|
||||
|
||||
// 没有选中的 voice 或标题,跳过
|
||||
const voiceId = selectedClonedVoice || selectedVoice
|
||||
if (!voiceId || !titleSettings.title) {
|
||||
setPreviewVoiceAudioUrl(null)
|
||||
return
|
||||
}
|
||||
|
||||
// 预设音色 / 克隆音色 → 调 TTS 合成
|
||||
ttsAbortRef.current?.abort()
|
||||
const controller = new AbortController()
|
||||
ttsAbortRef.current = controller
|
||||
let cancelled = false
|
||||
|
||||
previewTts({
|
||||
text: titleSettings.title,
|
||||
voice_id: voiceId,
|
||||
@@ -116,12 +134,13 @@ const GeneratePage: React.FC = () => {
|
||||
setPreviewVoiceAudioUrl(null)
|
||||
}
|
||||
})
|
||||
|
||||
return () => {
|
||||
cancelled = true
|
||||
controller.abort()
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [selectedVoice, selectedClonedVoice, titleSettings.title])
|
||||
}, [selectedVoice, selectedClonedVoice, titleSettings.title, voiceMaterials])
|
||||
|
||||
/* ── 克隆声音 ── */
|
||||
const { clones: clonedVoices, addClone, hasProcessing } = useCloneProgress()
|
||||
|
||||
Reference in New Issue
Block a user