Spaces:
Running on Zero
Running on Zero
Improve recorded reference voice similarity
Browse files- README.md +1 -1
- app.py +11 -5
- tests/test_latency_first_mode.py +4 -4
README.md
CHANGED
|
@@ -21,7 +21,7 @@ models:
|
|
| 21 |
## 模式
|
| 22 |
|
| 23 |
- **內建語者**:預設為內建語者 A;Speaker B 使用模型庫 `checkpoints/speaker_b_embedding.pt`,固定 seed 56789 與 projector scale 1.125。
|
| 24 |
-
- **參考音色**:
|
| 25 |
- **長文**:以最多 80 個字元快速分段,各分段單次生成後加入短靜音串接。
|
| 26 |
|
| 27 |
TTS model snapshot 固定為
|
|
|
|
| 21 |
## 模式
|
| 22 |
|
| 23 |
- **內建語者**:預設為內建語者 A;Speaker B 使用模型庫 `checkpoints/speaker_b_embedding.pt`,固定 seed 56789 與 projector scale 1.125。
|
| 24 |
+
- **參考音色**:以 3 秒窗、1.5 秒 hop(最多 4 個窗)平均成單一 speaker embedding,固定 centroid/projector scale 1.25 與 seed 1337;每個文字分段仍只生成一次。
|
| 25 |
- **長文**:以最多 80 個字元快速分段,各分段單次生成後加入短靜音串接。
|
| 26 |
|
| 27 |
TTS model snapshot 固定為
|
app.py
CHANGED
|
@@ -250,10 +250,13 @@ QUALITY_FAST_EXACT_MAX_BOUNDARY_SPEAKER_DROP = 0.08
|
|
| 250 |
QUALITY_MAX_SEQUENCE_PATHS = 3
|
| 251 |
SHORT_AUDIO_SPEAKER_GATE_SECONDS = 1.50
|
| 252 |
REFERENCE_MIN_DURATION_SECONDS = 3.0
|
| 253 |
-
|
| 254 |
-
|
| 255 |
-
|
| 256 |
-
|
|
|
|
|
|
|
|
|
|
| 257 |
SPEAKER_GENERATION_SEED = 56_789
|
| 258 |
SPEAKER_B_LABEL = "內建語者 B"
|
| 259 |
SPEAKER_B_PROJECTOR_SCALE = 1.125
|
|
@@ -3944,7 +3947,10 @@ with gr.Blocks(title="BlueMagpie-TTS Demo", theme=gr.themes.Soft()) as demo:
|
|
| 3944 |
)
|
| 3945 |
|
| 3946 |
with gr.Tab("參考音色"):
|
| 3947 |
-
gr.Markdown(
|
|
|
|
|
|
|
|
|
|
| 3948 |
with gr.Row():
|
| 3949 |
with gr.Column():
|
| 3950 |
reference_text = gr.Textbox(label="文字", lines=4, max_lines=8)
|
|
|
|
| 250 |
QUALITY_MAX_SEQUENCE_PATHS = 3
|
| 251 |
SHORT_AUDIO_SPEAKER_GATE_SECONDS = 1.50
|
| 252 |
REFERENCE_MIN_DURATION_SECONDS = 3.0
|
| 253 |
+
# A short overlapping-window centroid is measurably closer to a recorded
|
| 254 |
+
# reference than one whole-clip embedding. Keep the cap small so extraction
|
| 255 |
+
# remains bounded and generation itself is still exactly single-pass.
|
| 256 |
+
REFERENCE_WINDOW_SECONDS = 3.0
|
| 257 |
+
REFERENCE_HOP_SECONDS = 1.5
|
| 258 |
+
REFERENCE_MAX_WINDOWS = 4
|
| 259 |
+
REFERENCE_FULL_CLIP_MAX_SECONDS = 0.0
|
| 260 |
SPEAKER_GENERATION_SEED = 56_789
|
| 261 |
SPEAKER_B_LABEL = "內建語者 B"
|
| 262 |
SPEAKER_B_PROJECTOR_SCALE = 1.125
|
|
|
|
| 3947 |
)
|
| 3948 |
|
| 3949 |
with gr.Tab("參考音色"):
|
| 3950 |
+
gr.Markdown(
|
| 3951 |
+
"建議錄製 6–12 秒、單一語者且背景乾淨的授權參考音檔;"
|
| 3952 |
+
"至少需要 3 秒。"
|
| 3953 |
+
)
|
| 3954 |
with gr.Row():
|
| 3955 |
with gr.Column():
|
| 3956 |
reference_text = gr.Textbox(label="文字", lines=4, max_lines=8)
|
tests/test_latency_first_mode.py
CHANGED
|
@@ -207,10 +207,10 @@ def test_reference_conditioning_uses_one_fixed_embedding():
|
|
| 207 |
source = APP_PATH.read_text(encoding="utf-8")
|
| 208 |
reference_source = ast.get_source_segment(source, _function_node("tts_reference"))
|
| 209 |
|
| 210 |
-
assert "REFERENCE_WINDOW_SECONDS =
|
| 211 |
-
assert "REFERENCE_HOP_SECONDS =
|
| 212 |
-
assert "REFERENCE_MAX_WINDOWS =
|
| 213 |
-
assert "REFERENCE_FULL_CLIP_MAX_SECONDS =
|
| 214 |
assert "REFERENCE_CONDITIONING_SCALE = 1.25" in source
|
| 215 |
assert "REFERENCE_GENERATION_SEED = 1_337" in source
|
| 216 |
assert "REFERENCE_PROJECTOR_SCALE = 1.25" in source
|
|
|
|
| 207 |
source = APP_PATH.read_text(encoding="utf-8")
|
| 208 |
reference_source = ast.get_source_segment(source, _function_node("tts_reference"))
|
| 209 |
|
| 210 |
+
assert "REFERENCE_WINDOW_SECONDS = 3.0" in source
|
| 211 |
+
assert "REFERENCE_HOP_SECONDS = 1.5" in source
|
| 212 |
+
assert "REFERENCE_MAX_WINDOWS = 4" in source
|
| 213 |
+
assert "REFERENCE_FULL_CLIP_MAX_SECONDS = 0.0" in source
|
| 214 |
assert "REFERENCE_CONDITIONING_SCALE = 1.25" in source
|
| 215 |
assert "REFERENCE_GENERATION_SEED = 1_337" in source
|
| 216 |
assert "REFERENCE_PROJECTOR_SCALE = 1.25" in source
|