diff --git a/app.py b/app.py index 6768426..7dcadbe 100644 --- a/app.py +++ b/app.py @@ -62,11 +62,11 @@ def ui_history_dropdown(select_path: str | None = None) -> dict: def _voice_player_html(wav_path: str | None) -> str: - """带播放控件与语速滑块的 HTML 播放器(语速仅影响试听,不改变 WAV 文件)。""" + """带播放控件、语速滑块与按语速保存下载的 HTML 播放器。""" if not wav_path: return ( '
' - "

合成完成后可在此试听,拖动下方滑块调节播放语速(0.5x~2.0x)。

" + "

合成完成后可在此试听,拖动滑块调节语速(0.5x~2.0x),点「保存」下载。

" "
" ) path = Path(wav_path) @@ -79,18 +79,23 @@ def _voice_player_html(wav_path: str | None) -> str: name = path.name src = f"/outputs/{quote(name)}" return f""" -
+
🎧 {name}
- +
播放语速 + oninput="ttsSyncSpeed(this)"> 1.00x - ⬇ 下载 WAV
-

语速仅用于试听,下载的 WAV 仍为原速。

+
+ + ⬇ 原速下载 + +
+

试听语速与保存文件一致;「原速下载」获取未变速的原始 WAV。

""" @@ -203,8 +208,8 @@ def _short_synth_log(msg: str, ok: bool) -> str: segs = re.search(r"共\s*(\d+)\s*段", msg) if chars: seg_note = f",{segs.group(1)} 段拼接" if segs else "" - return f"✅ 配音完成({chars.group(1)} 字{seg_note})。请用下方播放器试听、调节语速或下载。" - return "✅ 配音完成。请用下方播放器试听、调节语速或下载。" + return f"✅ 配音完成({chars.group(1)} 字{seg_note})。请用下方播放器试听,调节语速后点「保存」下载。" + return "✅ 配音完成。请用下方播放器试听,调节语速后点「保存」下载。" def ui_synth_pending(polished_text: str) -> str: @@ -423,6 +428,126 @@ PWA_HEAD = """ }); })(); + """ MIC_HINT_HTML = """ @@ -1042,6 +1167,29 @@ gradio-app, font-weight: 600 !important; min-width: 48px !important; } +.tts-action-row { + display: flex !important; + flex-wrap: wrap !important; + align-items: center !important; + gap: 10px 12px !important; + margin-top: 10px !important; +} +.tts-save-btn { + color: #ffffff !important; + background: #2563eb !important; + border: none !important; + padding: 8px 14px !important; + border-radius: 6px !important; + font-size: 0.88rem !important; + cursor: pointer !important; +} +.tts-save-btn:hover { background: #1d4ed8 !important; } +.tts-save-btn:disabled { opacity: 0.6 !important; cursor: wait !important; } +.tts-save-status { + color: #86efac !important; + font-size: 0.82rem !important; + min-width: 80px; +} .tts-dl-btn { color: #ffffff !important; background: #374151 !important;