Commit
·
c78a910
1
Parent(s):
34d2a8c
✨ 美化UI并完善场景加载功能
Browse files🎨 UI Enhancement:
- 现代化渐变设计与动画效果
- 响应式布局,支持大屏幕显示
- 改进按钮样式与交互体验
- 美化说话者区域布局
🚀 Feature Enhancement:
- 集成JSON场景文件与默认配置
- 场景选择自动加载对应音频和文本
- 新增'默认音频'快速加载功能
- 确保音频文件与文本严格一一对应
📦 Structure Improvement:
- 统一场景配置管理
- 增强错误处理与用户反馈
- 优化文件路径处理逻辑
- 完善使用说明与提示信息
🎯 User Experience:
- 一键加载预设场景(科技、教育、生活等6个场景)
- 智能路径解析,自动查找音频文件
- 详细的操作指南与质量建议
- app.py +252 -26
- examples/zh_spk1_moon.wav +3 -0
- examples/zh_spk2_moon.wav +3 -0
- scenarios/健康播客_运动健身.jsonl +8 -0
- scenarios/商业播客_创业经验.jsonl +8 -0
- scenarios/心理播客_情绪管理.jsonl +8 -0
- scenarios/教育播客_学习方法.jsonl +8 -0
- scenarios/生活播客_美食文化.jsonl +8 -0
- scenarios/科技播客_AI发展.jsonl +8 -0
app.py
CHANGED
@@ -44,6 +44,52 @@ from generation_utils import load_model, process_batch
|
|
44 |
SYSTEM_PROMPT = (
|
45 |
"You are a speech synthesizer that generates natural, realistic, and human-like conversational audio from dialogue text."
|
46 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
MODEL_PATH = "fnlp/MOSS-TTSD-v0.5"
|
48 |
SPT_CONFIG_PATH = "XY_Tokenizer/config/xy_tokenizer_config.yaml"
|
49 |
|
@@ -72,16 +118,105 @@ device = None
|
|
72 |
# =========================
|
73 |
|
74 |
def get_scenario_examples():
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
"
|
82 |
-
|
83 |
-
|
84 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
|
86 |
|
87 |
def initialize_model():
|
@@ -199,21 +334,70 @@ def generate_dialogue_audio(
|
|
199 |
|
200 |
def create_space_ui() -> gr.Blocks:
|
201 |
custom_css = """
|
|
|
|
|
|
|
|
|
|
|
202 |
.header {
|
203 |
text-align: center;
|
204 |
-
margin-bottom:
|
205 |
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
206 |
-
padding:
|
207 |
-
border-radius:
|
208 |
color: white;
|
209 |
-
box-shadow: 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
210 |
}
|
211 |
.section {
|
212 |
background: #f8fafc;
|
213 |
-
padding:
|
214 |
-
border-radius:
|
215 |
border: 1px solid #e2e8f0;
|
216 |
-
margin-bottom:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
}
|
218 |
"""
|
219 |
|
@@ -246,13 +430,15 @@ def create_space_ui() -> gr.Blocks:
|
|
246 |
|
247 |
with gr.Group():
|
248 |
gr.Markdown("### 🚀 快速操作")
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
with gr.Row():
|
250 |
-
scenario_dropdown = gr.Dropdown(
|
251 |
-
choices=list(get_scenario_examples().keys()),
|
252 |
-
value="科技播客:AI发展",
|
253 |
-
label="🎭 选择场景",
|
254 |
-
)
|
255 |
btn_load_scenario = gr.Button("📥 加载场景", variant="secondary")
|
|
|
256 |
|
257 |
with gr.Row():
|
258 |
with gr.Group():
|
@@ -316,15 +502,55 @@ def create_space_ui() -> gr.Blocks:
|
|
316 |
|
317 |
# ===== 交互逻辑 =====
|
318 |
def on_load_scenario(name: str):
|
|
|
319 |
scenarios = get_scenario_examples()
|
320 |
-
if name in scenarios:
|
321 |
-
return
|
322 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
323 |
|
324 |
btn_load_scenario.click(
|
325 |
fn=on_load_scenario,
|
326 |
inputs=[scenario_dropdown],
|
327 |
-
outputs=[dialogue_text],
|
|
|
|
|
|
|
|
|
|
|
328 |
)
|
329 |
|
330 |
btn_generate.click(
|
|
|
44 |
SYSTEM_PROMPT = (
|
45 |
"You are a speech synthesizer that generates natural, realistic, and human-like conversational audio from dialogue text."
|
46 |
)
|
47 |
+
|
48 |
+
# 场景配置映射
|
49 |
+
SCENARIO_CONFIG = {
|
50 |
+
"科技播客_AI发展": {
|
51 |
+
"title": "🤖 科技播客 - AI发展趋势",
|
52 |
+
"description": "探讨人工智能的最新发展与未来趋势",
|
53 |
+
"file": "scenarios/科技播客_AI发展.jsonl"
|
54 |
+
},
|
55 |
+
"教育播客_学习方法": {
|
56 |
+
"title": "📚 教育播客 - 高效学习方法",
|
57 |
+
"description": "分享科学的学习方法与技巧",
|
58 |
+
"file": "scenarios/教育播客_学习方法.jsonl"
|
59 |
+
},
|
60 |
+
"生活播客_美食文化": {
|
61 |
+
"title": "🍜 生活播客 - 美食文化探索",
|
62 |
+
"description": "品味各地美食文化的魅力",
|
63 |
+
"file": "scenarios/生活播客_美食文化.jsonl"
|
64 |
+
},
|
65 |
+
"商业播客_创业经验": {
|
66 |
+
"title": "💼 商业播客 - 创业经验分享",
|
67 |
+
"description": "创业路上的经验教训与心得",
|
68 |
+
"file": "scenarios/商业播客_创业经验.jsonl"
|
69 |
+
},
|
70 |
+
"健康播客_运动健身": {
|
71 |
+
"title": "🏃 健康播客 - 运动健身指南",
|
72 |
+
"description": "科学健身与健康生活方式",
|
73 |
+
"file": "scenarios/健康播客_运动健身.jsonl"
|
74 |
+
},
|
75 |
+
"心理播客_情绪管理": {
|
76 |
+
"title": "🧠 心理播客 - 情绪管理技巧",
|
77 |
+
"description": "探索情绪管理与心理健康",
|
78 |
+
"file": "scenarios/心理播客_情绪管理.jsonl"
|
79 |
+
}
|
80 |
+
}
|
81 |
+
|
82 |
+
# 默认音频配置
|
83 |
+
DEFAULT_AUDIO_CONFIG = {
|
84 |
+
"speaker1": {
|
85 |
+
"audio": "examples/zh_spk1_moon.wav",
|
86 |
+
"text": "周一到周五,每天早晨七点半到九点半的直播片段。言下之意呢,就是废话有点多,大家也别嫌弃,因为这都是直播间最真实的状态了。"
|
87 |
+
},
|
88 |
+
"speaker2": {
|
89 |
+
"audio": "examples/zh_spk2_moon.wav",
|
90 |
+
"text": "如果大家想听到更丰富更及时的直播内容,记得在周一到周五准时进入直播间,和大家一起畅聊新消费新科技新趋势。"
|
91 |
+
}
|
92 |
+
}
|
93 |
MODEL_PATH = "fnlp/MOSS-TTSD-v0.5"
|
94 |
SPT_CONFIG_PATH = "XY_Tokenizer/config/xy_tokenizer_config.yaml"
|
95 |
|
|
|
118 |
# =========================
|
119 |
|
120 |
def get_scenario_examples():
|
121 |
+
"""获取所有可用的场景示例,整合 JSON 文件和默认配置"""
|
122 |
+
scenarios = {}
|
123 |
+
|
124 |
+
# 加载 JSON 文件场景
|
125 |
+
for key, config in SCENARIO_CONFIG.items():
|
126 |
+
try:
|
127 |
+
if os.path.exists(config["file"]):
|
128 |
+
with open(config["file"], "r", encoding="utf-8") as f:
|
129 |
+
data = json.load(f)
|
130 |
+
scenarios[config["title"]] = {
|
131 |
+
"text": data.get("text", ""),
|
132 |
+
"description": config["description"],
|
133 |
+
"audio1": data.get("prompt_audio_speaker1", ""),
|
134 |
+
"text1": data.get("prompt_text_speaker1", ""),
|
135 |
+
"audio2": data.get("prompt_audio_speaker2", ""),
|
136 |
+
"text2": data.get("prompt_text_speaker2", ""),
|
137 |
+
"base_path": data.get("base_path", ""),
|
138 |
+
}
|
139 |
+
except Exception as e:
|
140 |
+
print(f"⚠️ 加载场景 {key} 失败: {e}")
|
141 |
+
|
142 |
+
# 添加默认示例(如果 JSON 文件不可用)
|
143 |
+
if not scenarios:
|
144 |
+
scenarios = {
|
145 |
+
"🎧 默认示例": {
|
146 |
+
"text": (
|
147 |
+
"[S1]大家好,欢迎收听今天的节目,我是主播小雨。"
|
148 |
+
"[S2]大家好,我是嘉宾阿明,很高兴和大家见面。"
|
149 |
+
"[S1]今天我们要聊的���题非常有趣,相信大家会喜欢的。"
|
150 |
+
"[S2]是的,让我们开始今天的精彩内容吧!"
|
151 |
+
),
|
152 |
+
"description": "默认的示例对话,适合快速体验",
|
153 |
+
"audio1": DEFAULT_AUDIO_CONFIG["speaker1"]["audio"],
|
154 |
+
"text1": DEFAULT_AUDIO_CONFIG["speaker1"]["text"],
|
155 |
+
"audio2": DEFAULT_AUDIO_CONFIG["speaker2"]["audio"],
|
156 |
+
"text2": DEFAULT_AUDIO_CONFIG["speaker2"]["text"],
|
157 |
+
"base_path": "",
|
158 |
+
}
|
159 |
+
}
|
160 |
+
|
161 |
+
return scenarios
|
162 |
+
|
163 |
+
|
164 |
+
def load_scenario_data(scenario_key: str):
|
165 |
+
"""加载场景数据,确保音频和文本一一对应"""
|
166 |
+
if scenario_key not in SCENARIO_CONFIG:
|
167 |
+
return None, None, None, None, None
|
168 |
+
|
169 |
+
try:
|
170 |
+
scenario_file = SCENARIO_CONFIG[scenario_key]["file"]
|
171 |
+
if not os.path.exists(scenario_file):
|
172 |
+
return None, None, None, None, None
|
173 |
+
|
174 |
+
with open(scenario_file, "r", encoding="utf-8") as f:
|
175 |
+
data = json.load(f)
|
176 |
+
|
177 |
+
# 确保音频文件路径正确
|
178 |
+
audio1_path = data.get("prompt_audio_speaker1", "")
|
179 |
+
audio2_path = data.get("prompt_audio_speaker2", "")
|
180 |
+
|
181 |
+
if audio1_path and not audio1_path.startswith("/"):
|
182 |
+
audio1_path = os.path.join(data.get("base_path", ""), audio1_path)
|
183 |
+
if audio2_path and not audio2_path.startswith("/"):
|
184 |
+
audio2_path = os.path.join(data.get("base_path", ""), audio2_path)
|
185 |
+
|
186 |
+
return (
|
187 |
+
data.get("text", ""),
|
188 |
+
audio1_path if os.path.exists(audio1_path) else None,
|
189 |
+
data.get("prompt_text_speaker1", ""),
|
190 |
+
audio2_path if os.path.exists(audio2_path) else None,
|
191 |
+
data.get("prompt_text_speaker2", "")
|
192 |
+
)
|
193 |
+
except Exception as e:
|
194 |
+
print(f"❌ 加载场景失败: {e}")
|
195 |
+
return None, None, None, None, None
|
196 |
+
|
197 |
+
|
198 |
+
def load_default_audio():
|
199 |
+
"""加载默认音频和文本"""
|
200 |
+
audio1 = DEFAULT_AUDIO_CONFIG["speaker1"]["audio"]
|
201 |
+
text1 = DEFAULT_AUDIO_CONFIG["speaker1"]["text"]
|
202 |
+
audio2 = DEFAULT_AUDIO_CONFIG["speaker2"]["audio"]
|
203 |
+
text2 = DEFAULT_AUDIO_CONFIG["speaker2"]["text"]
|
204 |
+
|
205 |
+
# 默认对话文本
|
206 |
+
default_text = (
|
207 |
+
"[S1]大家好,欢迎收听今天的节目,我是主播小雨。"
|
208 |
+
"[S2]大家好,我是嘉宾阿明,很高兴和大家见面。"
|
209 |
+
"[S1]今天我们要聊的话题非常有趣,相信大家会喜欢的。"
|
210 |
+
"[S2]是的,让我们开始今天的精彩内容吧!"
|
211 |
+
)
|
212 |
+
|
213 |
+
return (
|
214 |
+
default_text,
|
215 |
+
audio1 if os.path.exists(audio1) else None,
|
216 |
+
text1,
|
217 |
+
audio2 if os.path.exists(audio2) else None,
|
218 |
+
text2
|
219 |
+
)
|
220 |
|
221 |
|
222 |
def initialize_model():
|
|
|
334 |
|
335 |
def create_space_ui() -> gr.Blocks:
|
336 |
custom_css = """
|
337 |
+
.gradio-container {
|
338 |
+
max-width: 1400px !important;
|
339 |
+
margin: 0 auto !important;
|
340 |
+
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
341 |
+
}
|
342 |
.header {
|
343 |
text-align: center;
|
344 |
+
margin-bottom: 2rem;
|
345 |
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
346 |
+
padding: 2.5rem;
|
347 |
+
border-radius: 20px;
|
348 |
color: white;
|
349 |
+
box-shadow: 0 10px 30px rgba(0,0,0,0.2);
|
350 |
+
}
|
351 |
+
.header h1 {
|
352 |
+
font-size: 2.5rem;
|
353 |
+
margin-bottom: 0.5rem;
|
354 |
+
font-weight: 700;
|
355 |
+
}
|
356 |
+
.header p {
|
357 |
+
font-size: 1.2rem;
|
358 |
+
opacity: 0.9;
|
359 |
+
margin: 0;
|
360 |
}
|
361 |
.section {
|
362 |
background: #f8fafc;
|
363 |
+
padding: 1.5rem;
|
364 |
+
border-radius: 15px;
|
365 |
border: 1px solid #e2e8f0;
|
366 |
+
margin-bottom: 1rem;
|
367 |
+
box-shadow: 0 2px 10px rgba(0,0,0,0.05);
|
368 |
+
}
|
369 |
+
.quick-btn {
|
370 |
+
background: linear-gradient(45deg, #FF6B6B, #4ECDC4) !important;
|
371 |
+
border: none !important;
|
372 |
+
color: white !important;
|
373 |
+
font-weight: 600 !important;
|
374 |
+
border-radius: 10px !important;
|
375 |
+
transition: all 0.3s ease !important;
|
376 |
+
}
|
377 |
+
.quick-btn:hover {
|
378 |
+
transform: translateY(-2px) !important;
|
379 |
+
box-shadow: 0 5px 15px rgba(0,0,0,0.2) !important;
|
380 |
+
}
|
381 |
+
.generate-btn {
|
382 |
+
background: linear-gradient(45deg, #667eea, #764ba2) !important;
|
383 |
+
border: none !important;
|
384 |
+
color: white !important;
|
385 |
+
font-weight: 700 !important;
|
386 |
+
font-size: 1.1rem !important;
|
387 |
+
border-radius: 15px !important;
|
388 |
+
padding: 1rem 2rem !important;
|
389 |
+
width: 100% !important;
|
390 |
+
transition: all 0.3s ease !important;
|
391 |
+
}
|
392 |
+
.generate-btn:hover {
|
393 |
+
transform: translateY(-3px) !important;
|
394 |
+
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4) !important;
|
395 |
+
}
|
396 |
+
.speaker-section {
|
397 |
+
background: linear-gradient(135deg, #667eea15, #764ba215);
|
398 |
+
padding: 1.5rem;
|
399 |
+
border-radius: 15px;
|
400 |
+
border: 2px solid #667eea20;
|
401 |
}
|
402 |
"""
|
403 |
|
|
|
430 |
|
431 |
with gr.Group():
|
432 |
gr.Markdown("### 🚀 快速操作")
|
433 |
+
scenario_dropdown = gr.Dropdown(
|
434 |
+
choices=list(get_scenario_examples().keys()),
|
435 |
+
value=None,
|
436 |
+
label="🎭 选择场景",
|
437 |
+
info="选择一个预设场景,自动填充对话文本和参考音频"
|
438 |
+
)
|
439 |
with gr.Row():
|
|
|
|
|
|
|
|
|
|
|
440 |
btn_load_scenario = gr.Button("📥 加载场景", variant="secondary")
|
441 |
+
btn_load_default = gr.Button("🎧 默认音频", variant="secondary")
|
442 |
|
443 |
with gr.Row():
|
444 |
with gr.Group():
|
|
|
502 |
|
503 |
# ===== 交互逻辑 =====
|
504 |
def on_load_scenario(name: str):
|
505 |
+
"""加载选中的场景,包括文本和音频"""
|
506 |
scenarios = get_scenario_examples()
|
507 |
+
if name not in scenarios:
|
508 |
+
return (
|
509 |
+
f"❌ 无法加载场景: {name}",
|
510 |
+
None, "", None, ""
|
511 |
+
)
|
512 |
+
|
513 |
+
scenario = scenarios[name]
|
514 |
+
|
515 |
+
# 处理音频路径
|
516 |
+
audio1_path = None
|
517 |
+
audio2_path = None
|
518 |
+
|
519 |
+
if scenario.get("audio1"):
|
520 |
+
audio1_full = scenario["audio1"]
|
521 |
+
if scenario.get("base_path") and not audio1_full.startswith("/"):
|
522 |
+
audio1_full = os.path.join(scenario["base_path"], audio1_full)
|
523 |
+
if os.path.exists(audio1_full):
|
524 |
+
audio1_path = audio1_full
|
525 |
+
|
526 |
+
if scenario.get("audio2"):
|
527 |
+
audio2_full = scenario["audio2"]
|
528 |
+
if scenario.get("base_path") and not audio2_full.startswith("/"):
|
529 |
+
audio2_full = os.path.join(scenario["base_path"], audio2_full)
|
530 |
+
if os.path.exists(audio2_full):
|
531 |
+
audio2_path = audio2_full
|
532 |
+
|
533 |
+
return (
|
534 |
+
scenario.get("text", ""),
|
535 |
+
audio1_path,
|
536 |
+
scenario.get("text1", ""),
|
537 |
+
audio2_path,
|
538 |
+
scenario.get("text2", "")
|
539 |
+
)
|
540 |
+
|
541 |
+
def on_load_default():
|
542 |
+
"""加载默认音频和文本"""
|
543 |
+
return load_default_audio()
|
544 |
|
545 |
btn_load_scenario.click(
|
546 |
fn=on_load_scenario,
|
547 |
inputs=[scenario_dropdown],
|
548 |
+
outputs=[dialogue_text, speaker1_audio, speaker1_text, speaker2_audio, speaker2_text],
|
549 |
+
)
|
550 |
+
|
551 |
+
btn_load_default.click(
|
552 |
+
fn=on_load_default,
|
553 |
+
outputs=[dialogue_text, speaker1_audio, speaker1_text, speaker2_audio, speaker2_text],
|
554 |
)
|
555 |
|
556 |
btn_generate.click(
|
examples/zh_spk1_moon.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:dd95ddcb03537bc04d19a6e5ab56b2694c9d65324c231c6676569877dc005ace
|
3 |
+
size 457956
|
examples/zh_spk2_moon.wav
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:1ad41d9c8967148fd0875967c1498c7aaab7dfdd919d7e7e063ae91e7a4a1d19
|
3 |
+
size 414720
|
scenarios/健康播客_运动健身.jsonl
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"base_path": "examples",
|
3 |
+
"text": "[S1]欢迎来到《健康生活家》,我是营养师小慧。[S2]我是健身教练大强。今天我们来聊聊如何建立科学的运动习惯。[S1]现代人工作忙碌,很多人想运动但总是坚持不下来。大强教练,你有什么经验分享吗?[S2]首先要设定合理的目标。很多人一开始就制定过高的目标,比如每天跑步一小时,这样很容易放弃。建议从每天15分钟开始。[S1]确实,循序渐进很重要。我从营养角度补充一下,运动前后的饮食也很关键。[S2]对!运动前1-2小时吃点容易消化的碳水化合物,比如香蕉、燕麦,为身体提供能量。运动后要及时补充蛋白质帮助肌肉恢复。[S1]还有很重要的一点是选择适合自己的运动方式。不一定要去健身房,在家也能很好地锻炼。[S2]没错!比如深蹲、俯卧撑、平板支撑这些徒手动作,就能很好地锻炼全身肌肉。关键是要保持规律性。[S1]对于初学者,我建议一周3-4次,每次30分钟左右比较合适。[S2]还要注意倾听身体的声音,适度休息也是训练的一部分。过度训练反而会带来伤害。[S1]运动不仅能改善身体健康,还能释放压力,改善心情。[S2]是的,运动是最好的天然抗抑郁药。希望大家都能动起来,拥抱健康生活!",
|
4 |
+
"prompt_audio_speaker1": "zh_spk1_moon.wav",
|
5 |
+
"prompt_text_speaker1": "周一到周五,每天早晨七点半到九点半的直播片段。言下之意呢,就是废话有点多,大家也别嫌弃,因为这都是直播间最真实的状态了。",
|
6 |
+
"prompt_audio_speaker2": "zh_spk2_moon.wav",
|
7 |
+
"prompt_text_speaker2": "如果大家想听到更丰富更及时的直播内容,记得在周一到周五准时进入直播间,和大家一起畅聊新消费新科技新趋势。"
|
8 |
+
}
|
scenarios/商业播客_创业经验.jsonl
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"base_path": "examples",
|
3 |
+
"text": "[S1]大家好,欢迎收听《创业观察》,我是主持人李敏。[S2]我是创业导师张总。今天我们来聊聊初创企业如何度过前期的困难阶段。[S1]很多创业者都会遇到资金紧张、团队磨合、市场验证等挑战。张总,您当年是怎么应对的?[S2]创业初期确实很艰难。我的经验是要专注核心问题,不要被太多琐事分散精力。首先要确保产品真正解决了用户的痛点。[S1]产品市场适配确实很关键。那么在团队建设方面,您有什么建议?[S2]早期团队要精而不在多。找到与你价值观一致、能力互补的合伙人比招一堆员工更重要。而且要建立清晰的股权分配和决策机制。[S1]说到资金,很多创业者都为融资发愁。[S2]我建议创业者要学会精打细算,延长资金使用时间。不一定非要拿投资,可以考虑先做到盈亏平衡,再谈增长。[S1]这个观点很实用。那么如何判断一个创业项目是否值得坚持呢?[S2]关键看三个指标:用户是否真正需要你的产品、是否愿意为此付费、市场规模是否足够大。如果这三点都成立,就值得坚持。[S1]对于正在创业路上的朋友,您还有什么寄语吗?[S2]创业是一场马拉松,不是短跑。保持初心,持续学习,相信时间的力量。成功往往在坚持不下去的时候再坚持一下。[S1]感谢张总的精彩分享。创业不易,但梦想值得追求。[S2]希望所有创业者都能在这条路上收获成长和成功!",
|
4 |
+
"prompt_audio_speaker1": "zh_spk1_moon.wav",
|
5 |
+
"prompt_text_speaker1": "周一到周五,每天早晨七点半到九点半的直播片段。言下之意呢,就是废话有点多,大家也别嫌弃,因为这都是直播间最真实的状态了。",
|
6 |
+
"prompt_audio_speaker2": "zh_spk2_moon.wav",
|
7 |
+
"prompt_text_speaker2": "如果大家想听到更丰富更及时的直播内容,记得在周一到周五准时进入直播间,和大家一起畅聊新消费新科技新趋势。"
|
8 |
+
}
|
scenarios/心理播客_情绪管理.jsonl
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"base_path": "examples",
|
3 |
+
"text": "[S1]大家好,欢迎来到《心灵驿站》,我是心理咨询师小晴。[S2]我是情绪管理专家老李。今天我们来聊聊如何在快节奏的生活中管理好自己的情绪。[S1]现代人面临各种压力,工作、学习、人际关系等,情绪波动很正常。但如何让情绪成为我们的朋友而不是敌人呢?[S2]首先要学会认识和接纳自己的情绪。情绪没有好坏之分,愤怒、焦虑、悲伤都是正常的心理反应,关键是如何恰当地表达和处理。[S1]很多人习惯压抑负面情绪,觉得这样就能解决问题。[S2]这其实是不健康的。压抑的情绪就像弹簧,压得越紧反弹得越厉害。我们要学会倾听情绪,理解它想传达的信息。[S1]那么具体应该怎么做呢?[S2]我推荐一个简单的方法:STOP技术。S是停下来,T是深呼吸,O是观察自己的情绪和身体感受,P是暂停反应,选择合适的应对方式。[S1]这个方法很实用。我还想补充一点,就是要培养情绪表达的能力。很多人不知道如何准确表达自己的感受。[S2]对,我们从小被教育要理性,却很少学习如何表达情感。其实,用\"我感到...\"而不是\"你让我...\"的句式,能够更好地表达情绪而不伤害关系。[S1]运动和冥想也是很好的情绪调节方法。[S2]确实,运动能释放内啡肽,改善心情;冥想能让我们更好地觉察当下,不被情绪绑架。每天十分钟的正念练习就很有效果。[S1]最重要的是要记住,情绪管理是一个长期的过程,不要期望一蹴而就。[S2]对,要有耐心和自我慈悲。每个人都在学习如何更好地生活,给自己一些时间和空间成长。[S1]希望大家都能和自己的情绪和谐共处,过上更平衡的生活。",
|
4 |
+
"prompt_audio_speaker1": "zh_spk1_moon.wav",
|
5 |
+
"prompt_text_speaker1": "周一到周五,每天早晨七点半到九点半的直播片段。言下之意呢,就是废话有点多,大家也别嫌弃,因为这都是直播间最真实的状态了。",
|
6 |
+
"prompt_audio_speaker2": "zh_spk2_moon.wav",
|
7 |
+
"prompt_text_speaker2": "如果大家想听到更丰富更及时的直播内容,记得在周一到周五准时进入直播间,和大家一起畅聊新消费新科技新趋势。"
|
8 |
+
}
|
scenarios/教育播客_学习方法.jsonl
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"base_path": "examples",
|
3 |
+
"text": "[S1]大家好,欢迎收听《学习有道》,我是教育咨询师林老师。[S2]我是学习方法专家王老师。今天我们来聊聊如何提高学习效率。[S1]现在很多学生都面临学习压力大、效率低的问题。王老师,你有什么建议吗?[S2]首先要明确一个概念,学习不是时间的堆砌,而是方法的艺术。我推荐使用番茄工作法,25分钟专注学习,5分钟休息。[S1]这个方法确实很实用。我还想补充一点,就是要学会主动学习,不要被动接受知识。[S2]没错,比如在学习新概念时,要学会提问:这是什么?为什么是这样?可以怎么应用?这样的深度思考能让记忆更持久。[S1]还有一个重要的点是要建立知识之间的联系,构建知识网络。[S2]对,孤立的知识点很容易遗忘,但形成体系的知识会相互强化,形成长期记忆。[S1]那么对于不同学科,有没有特殊的学习技巧呢?[S2]当然有。理科重在理解逻辑,要多做练习巩固;文科重在理解背景,要多阅读拓展视野。[S1]好的建议!希望听众朋友们都能找到适合自己的学习方法。[S2]学习是一生的事业,方法对了,事半功倍。我们下期再见!",
|
4 |
+
"prompt_audio_speaker1": "zh_spk1_moon.wav",
|
5 |
+
"prompt_text_speaker1": "周一到周五,每天早晨七点半到九点半的直播片段。言下之意呢,就是废话有点多,大家也别嫌弃,因为这都是直播间最真实的状态了。",
|
6 |
+
"prompt_audio_speaker2": "zh_spk2_moon.wav",
|
7 |
+
"prompt_text_speaker2": "如果大家想听到更丰富更及时的直播内容,记得在周一到周五准时进入直播间,和大家一起畅聊新消费新科技新趋势。"
|
8 |
+
}
|
scenarios/生活播客_美食文化.jsonl
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"base_path": "examples",
|
3 |
+
"text": "[S1]各位听众朋友大家好,欢迎收听《舌尖上的故事》,我是美食博主小雪。[S2]我是文化学者老赵。今天我们来聊聊中华美食背后的文化故事。[S1]中国菜讲究色香味俱全,每道菜都有它的历史和故事。老赵,您觉得中华美食的精髓是什么?[S2]我认为是天人合一的哲学思想。中华美食不仅仅是填饱肚子,更是一种生活艺术,体现了中国人对自然、对生活的理解。[S1]确实,比如说八大菜系,每个菜系都有其地域特色和文化内涵。[S2]对,川菜的麻辣体现了巴蜀人民的豪爽性格,粤菜的清淡反映了岭南地区的气候特点,鲁菜的厚重则展现了齐鲁大地的文化底蕴。[S1]说到制作工艺,中华美食也很有讲究。比如刀工、火候、调味,每一个环节都是技艺的体现。[S2]这就是工匠精神的体现。一道看似简单的家常菜,背后可能有着几百年的传承和无数次的改良。比如红烧肉,各地都有不同的做法。[S1]对,而且中华美食还讲究药食同源,很多食材既是美味也是良药。[S2]像枸杞、山药、桂圆等,既能做菜也能调理身体。这体现了中国人的养生智慧,追求的是身心和谐。[S1]现在随着全球化,中华美食也在传播到世界各地。[S2]是的,但我们也要思考如何在传播中保持本味,既要适应当地口味,又不失传统精髓。[S1]美食是文化的载体,也是情感的纽带。每当我们品尝家乡菜时,都会想起家的温暖。[S2]民以食为天,食以文为魂。希望大家在享受美食的同时,也能感受到其中的文化韵味。",
|
4 |
+
"prompt_audio_speaker1": "zh_spk1_moon.wav",
|
5 |
+
"prompt_text_speaker1": "周一到周五,每天早晨七点半到九点半的直播片段。言下之意呢,就是废话有点多,大家也别嫌弃,因为这都是直播间最真实的状态了。",
|
6 |
+
"prompt_audio_speaker2": "zh_spk2_moon.wav",
|
7 |
+
"prompt_text_speaker2": "如果大家想听到更丰富更及时的直播内容,记得在周一到周五准时进入直播间,和大家一起畅聊新消费新科技新趋势。"
|
8 |
+
}
|
scenarios/科技播客_AI发展.jsonl
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"base_path": "examples",
|
3 |
+
"text": "[S1]欢迎收听《科技前沿》,我是主播小雨。今天我们来聊聊人工智能的最新发展。[S2]大家好,我是科技评论员阿明。最近AI领域确实发生了很多激动人心的变化。[S1]是的,特别是大语言模型和多模态AI的突破。你觉得哪个方向最值得关注?[S2]我觉得AI的实际应用落地是最值得关注的。比如在医疗、教育、创意设计等领域,AI正在真正改变我们的工作方式。[S1]确实,就拿内容创作来说,现在的AI已经能够生成非常自然的语音、图像和文本了。[S2]对,就像我们现在使用的语音合成技术,已经能够生成接近真人的对话效果。这对播客制作、有声读物等领域是革命性的。[S1]不过我们也要思考AI发展带来的挑战,比如就业问题、隐私安全等。[S2]是的,这需要我们在享受AI便利的同时,也要建立相应的规范和伦理框架。[S1]好的,今天的讨论就到这里,感谢大家收听。[S2]我们下期再见!",
|
4 |
+
"prompt_audio_speaker1": "zh_spk1_moon.wav",
|
5 |
+
"prompt_text_speaker1": "周一到周五,每天早晨七点半到九点半的直播片段。言下之意呢,就是废话有点多,大家也别嫌弃,因为这都是直播间最真实的状态了。",
|
6 |
+
"prompt_audio_speaker2": "zh_spk2_moon.wav",
|
7 |
+
"prompt_text_speaker2": "如果大家想听到更丰富更及时的直播内容,记得在周一到周五准时进入直播间,和大家一起畅聊新消费新科技新趋势。"
|
8 |
+
}
|