Skill: wsteve/story-music (version 1.0.0)

--- name: story-music description: 辅助讲故事和放音乐的技能。用于生成故事内容、选择背景音乐、调整音量、控制播放顺序，以及为故事添加语音旁白。使用场景包括：睡前故事、儿童故事、小说朗读、戏剧表演、播客制作等。 --- # 故事音乐技能 辅助创建故事内容并配合背景音乐播放的工具。 ## 核心功能 ### 1. 故事生成 提供各种类型的故事生成功能。 **支持的故事类型：** - 睡前故事 - 轻柔、平静、适合放松 - 儿童故事 - 富有想象力、简单易懂 - 奇幻故事 - 冒险、魔法、奇幻元素 - 科幻故事 - 未来科技、太空探索 - 悬疑故事 - 谜题、推理、紧张氛围 - 历史故事 - 时代背景、人文历史 - 成长故事 - 青春、励志、人生感悟 ### 2. 音乐选择与播放 为故事选择合适的背景音乐。 **音乐分类：** - 轻松舒缓 - 适合放松、日常背景 - 欢快活泼 - 适合儿童、积极主题 - 悲伤感人 - 适合情感故事、回忆 - 紧张刺激 - 适合悬疑、冒险 - 神秘奇幻 - 适合魔法、超自然主题 - 古典优雅 - 适合历史、正式场合 - 现代流行 - 适合现代、青春主题 **音乐控制：** - 播放/暂停 - 音量调节 (0-100%) - 切换歌曲 - 循环播放 - 随机播放 ### 3. 语音旁白 生成故事语音旁白文本。 **功能：** - 根据故事内容生成旁白脚本 - 调整语速 (正常/慢速/极慢) - 调整音调 (柔和/标准/戏剧) - 分段朗读 ## 快速开始 ### 基础故事生成 ```python # 生成一个睡前故事 story = generate_story( genre="bedtime", character="小兔子", setting="森林", duration="5分钟" ) print(story.content) # 输出：故事内容... ``` ### 添加背景音乐 ```python # 选择适合的音乐 music = select_music( mood="relaxing", genre="instrumental", tempo="slow" ) # 播放音乐 play_music(music) ``` ### 完整故事播放 ```python # 创建完整的故事体验 story_experience = StoryExperience( title="小兔子的森林冒险", content=story.content, music=music, narration_speed="slow", narration_tone="gentle" ) # 播放 story_experience.play() # 停止 story_experience.stop() ``` ## 音乐素材 ### 默认音乐库 | 风格 | 文件名 | 时长 | 适用场景 | |------|--------|------|----------| | 轻松舒缓 | relaxing.mp3 | 3:45 | 睡前、放松 | | 欢快活泼 | cheerful.mp3 | 2:30 | 儿童、日常 | | 悲伤感人 | emotional.mp3 | 4:12 | 情感故事 | | 紧张刺激 | intense.mp3 | 3:00 | 悬疑、冒险 | | 神秘奇幻 | magical.mp3 | 3:50 | 魔法、超自然 | | 古典优雅 | classical.mp3 | 5:00 | 历史、正式 | | 现代流行 | pop.mp3 | 3:20 | 现代、青春 | ### 添加自定义音乐 1. 将音乐文件放入 `assets/music/` 目录 2. 在代码中引用： ```python from assets.music import track_list # 添加到音乐库 track_list.append({ 'name': '我的故事音乐', 'file': 'my_story_music.mp3', 'mood': 'happy', 'duration': 3:30 }) ``` ## 语音功能 ### 使用TTS生成语音 ```python from tts import text_to_speech # 生成旁白语音 audio = text_to_speech( text=story.narration, voice='gentle', speed=0.8, # 80% 正常速度 pitch='lower' ) # 播放语音 play_audio(audio) ``` ### 语音控制 **语音风格选项：** - `gentle` - 柔和（适合睡前） - `warm` - 温暖（适合情感故事） - `energetic` - 活力（适合儿童） - `dramatic` - 戏剧（适合冒险） - `calm` - 平静（适合放松） **语速选项：** - `normal` - 正常 (100%) - `slow` - 慢速 (80%) - `very_slow` - 极慢 (60%) - `fast` - 快速 (120%) ## 故事模板 ### 睡前故事模板 ```python bedtime_story = { 'title': '睡梦之旅', 'characters': ['小星星', '云朵'], 'setting': '夜空', 'plot': [ '开头：介绍角色和场景', '发展：小星星的冒险', '高潮：遇到小云朵', '结尾：温馨的睡眠氛围' ], 'music': 'relaxing', 'narration_tone': 'gentle', 'narration_speed': 'slow' } ``` ### 儿童故事模板 ```python children_story = { 'title': '勇敢的小猫', 'characters': ['小猫咪', '小老鼠'], 'setting': '花园', 'plot': [ '开头：介绍小猫咪', '发展：遇到小老鼠', '高潮：合作解决问题', '结尾：友谊和快乐' ], 'music': 'cheerful', 'narration_tone': 'energetic', 'narration_speed': 'normal' } ``` ## 使用场景 ### 场景1：睡前故事 ```python # 为孩子生成睡前故事 experience = create_bedtime_story( child_name="小明", favorite_animal="小熊", duration="10分钟" ) # 播放 experience.play() ``` ### 场景2：小说朗读 ```python # 朗读小说章节 narrate_chapter( title="第一章：神秘的森林", text=novel_chapter, voice='dramatic', speed=1.0, add_background_music=True, music='magical' ) ``` ### 场景3：播客制作 ```python # 制作故事播客 podcast = create_podcast( title="每晚故事时间", episode="第5期", stories=[ { 'title': '森林里的音乐会', 'content': '...', 'music': 'classical', 'duration': '8分钟' }, { 'title': '月亮的故事', 'content': '...', 'music': 'relaxing', 'duration': '6分钟' } ] ) # 播放列表模式 podcast.play_playlist() ``` ## 音频管理 ### 播放列表 ```python # 创建播放列表 playlist = StoryPlaylist([ 'relaxing', # 开场音乐 'story_with_music', # 故事+音乐 'emotional', # 情感转折 'relaxing' # 结尾放松 ]) # 播放 playlist.play() ``` ### 音量控制 ```python # 调节音量 set_volume(80) # 80% set_volume(50) # 50% # 淡入淡出 fade_in(duration=3) # 3秒淡入 fade_out(duration=5) # 5秒淡出 ``` ## 高级功能 ### 动态音乐切换 根据故事情节自动切换音乐： ```python dynamic_music = DynamicMusicController() # 设置情节触发点 dynamic_music.add_trigger( trigger="情节开始", music="magical", volume=70 ) dynamic_music.add_trigger( trigger="情节高潮", music="intense", volume=85 ) # 在故事中应用 dynamic_music.apply_to_story(story) ``` ### 多角色对话 ```python dialogue = CharacterDialogue([ { 'character': '小熊', 'voice': 'gentle', 'lines': ['大家好！', '今天天气真好！'] }, { 'character': '小兔子', 'voice': 'cheerful', 'lines': ['是啊！我们去冒险吧！'] } ]) dialogue.narrate_with_music(music='cheerful') ``` ### 情感氛围调节 根据故事情感调整整体氛围： ```python atmosphere = AtmosphereController( story=story, music='emotional', voice='warm', speed=0.9 ) # 播放 atmosphere.play() # 调整氛围 atmosphere.set_mood('sad', intensity=0.7) atmosphere.set_mood('happy', intensity=0.8) ``` ## 故事参数配置 ### 生成故事参数 ```python story_params = { 'genre': 'bedtime', # 故事类型 'age_group': '6-12', # 年龄组 'length': 'medium', # 长度 'language': 'zh-CN', # 语言 'custom_elements': { # 自定义元素 'main_character': '小狐狸', 'setting': '森林', 'themes': ['友谊', '勇气'] }, 'music': { 'style': 'relaxing', 'volume': 60, 'loop': True } } ``` ### 音频播放参数 ```python audio_params = { 'voice': 'gentle', # 语音风格 'speed': 0.8, # 语速 'pitch': 'lower', # 音调 'volume': 70, # 音量 'fade_in': 3, # 淡入时间 'fade_out': 5, # 淡出时间 'crossfade': 2 # 交叉淡入时间 } ``` ## 故事示例 ### 示例1：睡前故事 ``` 标题：小星星的梦 类型：睡前故事 角色：小星星、云朵妈妈 场景：夜空 时长：5分钟 [音乐：relaxing - 开始播放] 旁白：很久很久以前，在遥远的夜空上... [情节：小星星想要去找朋友] [音乐：切换到magical] 旁白：小星星飘啊飘，飘到了云端... [高潮：遇到云朵妈妈] [音乐：切换到cheerful - 暂停] 旁白：云朵妈妈温柔地说... [结尾：温馨入睡] [音乐：relaxing - 淡出] ``` ### 示例2：儿童故事 ``` 标题：勇敢的小猫 类型：儿童故事 角色：小猫咪、小老鼠 场景：花园 时长：8分钟 [音乐：cheerful - 开始播放] 小猫咪：（欢快）今天天气真好！ [音乐：切换到dramatic] 旁白：突然，小猫咪遇到了困难... [高潮：合作解决问题] [音乐：切换到magical] 小老鼠：（惊喜）我也有办法！ [结尾：友谊和快乐] [音乐：切换到relaxing - 持续播放] ``` ## 故事生成工作流 ### 标准流程 1. **选择故事类型** ``` 睡前故事 / 儿童故事 / 奇幻故事 / 科幻故事... ``` 2. **设定参数** ``` - 故事标题 - 主要角色 - 故事背景 - 目标时长 - 年龄组 ``` 3. **选择音乐风格** ``` - 轻松 / 欢快 / 悲伤 / 紧张... ``` 4. **生成故事** ``` 自动生成故事内容 ``` 5. **配置音频** ``` - 语音风格 - 语速 - 音量 ``` 6. **播放故事** ``` 旁白 + 背景音乐 ``` ### 自定义流程 ```python # 自定义故事生成 custom_story = create_custom_story( theme="环保", length="长篇", age_group="12+", characters=["小树苗", "小水滴"], plot_outline=[ "小树苗努力生长", "遇到干旱困难", "小水滴帮助它", "最终茁壮成长" ], music_style="emotional", voice_style='gentle' ) # 播放 custom_story.play() ``` ## 故事库管理 ### 存储故事 ```python # 保存故事 save_story( title="我的睡前故事", content=story_content, metadata={ 'type': 'bedtime', 'age_group': '3-6', 'created_date': '2026-03-06' } ) # 从库加载 loaded_story = load_story("我的睡前故事") ``` ### 故事分类 ``` stories/ ├── bedtime/ # 睡前故事 │ ├── 小星星的梦.mp3 │ ├── 森林里的音乐会.mp3 │ └── 月亮的故事.mp3 ├── children/ # 儿童故事 │ ├── 勇敢的小猫.mp3 │ ├── 小兔子的冒险.mp3 │ └── 快乐的小熊.mp3 ├── fantasy/ # 奇幻故事 │ └── 魔法森林.mp3 └── science_fiction/ # 科幻故事 └── 太空之旅.mp3 ``` ## 故事分享 ### 导出故事 ```python # 导出为文本 export_story(story, format='txt', filename='story.txt') # 导出为音频 export_story(story, format='audio', filename='story.mp3') # 导出为视频 export_story(story, format='video', filename='story.mp4') ``` ### 分享故事 ```python # 生成分享链接 share_link = generate_share_link(story) # 分享到平台 share_to_platform('wechat', story) share_to_platform('wechat_moments', story) ``` ## 故事编辑 ### 编辑故事内容 ```python # 修改故事文本 edit_story_text( story="小星星的梦", change=from="小星星飘啊飘", to="小星星慢慢地飘" ) # 调整播放顺序 reorder_stories([ "月亮的故事", "森林里的音乐会", "小星星的梦" ]) ``` ### 编辑音频 ```python # 调整音乐音量 adjust_music_volume( story="小星星的梦", volume=75 ) # 调整旁白语速 adjust_narration_speed( story="小星星的梦", speed=0.7 ) # 切换语音风格 switch_voice( story="小星星的梦", voice='warm' ) ``` ## 故事播放器 ### 基础播放器 ```python from player import StoryPlayer # 创建播放器 player = StoryPlayer() # 播放故事 player.play(story="小星星的梦") # 暂停 player.pause() # 恢复 player.resume() # 停止 player.stop() ``` ### 高级播放器 ```python # 创建高级播放器 player = AdvancedStoryPlayer() # 设置播放模式 player.set_mode('continuous') # 连续播放 player.set_mode('single') # 单首播放 player.set_mode('shuffle') # 随机播放 # 设置循环 player.set_loop(True) # 循环播放 player.set_loop(False) # 不循环 # 设置音量 player.set_volume(80) # 设置静音 player.set_muted(True) # 播放历史 print(player.get_history()) # 删除播放历史 player.clear_history() ``` ## 故事效果 ### 音效添加 ```python # 添加环境音效 add_sound_effect( story="小星星的梦", effect='night_noise', # 夜晚声音 volume=20 ) # 添加特殊音效 add_sound_effect( story="魔法森林", effect='magic_chime', # 魔法铃声 volume=30 ) ``` ### 背景氛围 ```python # 设置背景氛围 set_background_atmosphere( story="悲伤的故事", atmosphere='rain', # 雨声氛围 intensity=60 ) set_background_atmosphere( story="欢快的舞会", atmosphere='party', # 聚会氛围 intensity=70 ) ``` ## 常见问题 ### Q: 如何添加自己的音乐？ **A:** 将音乐文件放入 `assets/music/` 目录，然后在代码中引用： ```python # 添加到音乐库 from assets.music import track_list track_list.append({ 'name': '我的音乐', 'file': 'my_music.mp3', 'mood': 'happy', 'duration': 3:30 }) ``` ### Q: 如何调整语速？ **A:** 使用 `narration_speed` 参数： ```python narrate( text="故事内容", speed=0.7 # 0.6-1.5 之间 ) ``` - 1.0: 正常速度 - 0.8: 慢速（适合睡前） - 0.6: 极慢（适合儿童） - 1.2: 快速 ### Q: 如何选择合适的音乐？ **A:** 根据故事类型选择： | 故事类型 | 推荐音乐 | |---------|---------| | 睡前故事 | relaxing, gentle | | 儿童故事 | cheerful, playful | | 悲伤故事 | emotional, piano | | 悬疑故事 | intense, dramatic | | 奇幻故事 | magical, ethereal | | 历史故事 | classical, orchestral | ### Q: 可以同时播放多个音频吗？ **A:** 可以，使用交叉淡入淡出： ```python # 播放音乐 play_music('relaxing', crossfade=2) # 播放旁白 play_narration(story, crossfade=3) # 淡出音乐 fade_out_music(duration=5) ``` ## 故事创作技巧 ### 1. 保持节奏 - 开头：快速引入 - 中间：逐渐展开 - 高潮：紧张刺激 - 结尾：温馨收尾 ### 2. 情感起伏 - 设置1-2个情感高潮 - 使用音乐配合情感变化 - 适当的音量变化 ### 3. 互动性 - 添加提问环节 - 让听众参与决策 - 增加互动音效 ### 4. 重复性 - 重要情节重复强调 - 主题反复出现 - 使用重复的音乐节奏 ## 故事制作清单 ### 制作前检查 - [ ] 确定故事类型和目标受众 - [ ] 选择合适的故事主题 - [ ] 设定主要角色 - [ ] 规划故事情节 - [ ] 选择音乐风格 - [ ] 准备背景音效 ### 制作中检查 - [ ] 生成故事内容 - [ ] 选择合适的音乐 - [ ] 设置语音参数 - [ ] 测试播放效果 - [ ] 调整音量和节奏 ### 制作后检查 - [ ] 完整测试播放流程 - [ ] 检查音频质量 - [ ] 确认所有功能正常 - [ ] 保存故事文件 - [ ] 分享给目标受众 ## 技术支持 ### 问题反馈 遇到问题请记录： 1. **问题描述** 2. **错误信息**（如有） 3. **操作步骤** 4. **预期结果** 5. **实际结果** ### 功能建议 欢迎提出功能改进建议： - 新的故事类型 - 更多音乐素材 - 特殊音效 - 视频功能 - 跨平台支持 ## 更新日志 ### v1.0.0 (2026-03-06) **新增功能：** - 故事生成基础功能 - 音乐选择和播放 - 语音旁白 - 音频控制 **基础素材：** - 7种背景音乐风格 - 多种语音风格 - 故事模板 **支持场景：** - 睡前故事 - 儿童故事 - 小说朗读 - 播客制作 --- **使用提示：** - 首次使用建议从简单场景开始 - 可以根据需要自定义音乐和语音 - 建议定期保存故事文件 - 探索不同组合创造独特体验

path: demo.py
content: #!/usr/bin/env python3
"""故事音乐技能演示脚本"""

import sys
import time

# 添加scripts到路径
sys.path.insert(0, '/Users/liuxing/.openclaw/workspace/skills/story-music')

print("=" * 70)
print("🎵 故事音乐技能演示")
print("=" * 70)
print()

# 模拟故事生成
print("📖 步骤1: 生成睡前故事")
print("-" * 70)
story = {
    'title': '小星星的梦',
    'genre': 'bedtime',
    'characters': ['小星星', '云朵妈妈'],
    'setting': '夜空',
    'duration': '5分钟',
    'content': '''
从前，在遥远的夜空上，有一颗小星星。

一天晚上，小星星做了一个梦。

梦见自己飘啊飘，飘到了柔软的云朵上。

云朵妈妈温柔地说："晚上好，小星星。"

小星星问："我可以和你们一起玩吗？"

云朵妈妈说："当然可以！"

于是，小星星在云朵上睡着了。

夜风吹过，小星星做了一个甜甜的梦...

（故事继续...）
'''
}

print(f"标题: {story['title']}")
print(f"类型: {story['genre']}")
print(f"角色: {', '.join(story['characters'])}")
print(f"场景: {story['setting']}")
print(f"时长: {story['duration']}")
print(f"\n故事内容预览:\n{story['content']}")
print()

# 模拟音乐选择
print("🎵 步骤2: 选择背景音乐")
print("-" * 70)
music_options = {
    'style': 'relaxing',
    'name': '深夜宁静',
    'duration': '3:45',
    'volume': 60,
    'loop': True
}

print(f"音乐风格: {music_options['style']}")
print(f"音乐名称: {music_options['name']}")
print(f"时长: {music_options['duration']}")
print(f"音量: {music_options['volume']}%")
print(f"循环播放: {'是' if music_options['loop'] else '否'}")
print()

# 模拟语音旁白
print("🎙️ 步骤3: 配置语音旁白")
print("-" * 70)
narration = {
    'voice': 'gentle',
    'speed': 0.8,
    'pitch': 'lower',
    'volume': 70
}

print(f"语音风格: {narration['voice']}")
print(f"语速: {narration['speed'] * 100}% (慢速适合睡前)")
print(f"音调: {narration['pitch']}")
print(f"音量: {narration['volume']}%")
print()

# 模拟播放
print("▶️ 步骤4: 播放故事")
print("-" * 70)
print("正在播放...")
print()

# 播放演示
segments = [
    ("开场", 10, music_options['style']),
    ("情节开始", 15, 'magical'),
    ("高潮", 20, 'dramatic'),
    ("结尾", 15, 'relaxing'),
]

total_duration = sum(seg[1] for seg in segments)

for i, (segment_name, duration, music_style) in enumerate(segments, 1):
    print(f"⏱️  [{i}/{len(segments)}] {segment_name}")
    print(f"   🎵 音乐切换到: {music_style}")
    print(f"   ⏱️  时长: {duration}秒")
    time.sleep(0.5)  # 模拟播放

print()
print("✅ 播放完成!")
print()

# 模拟儿童故事示例
print("👦 儿童故事示例")
print("=" * 70)
children_story = {
    'title': '勇敢的小猫',
    'type': 'children',
    'characters': ['小猫咪', '小老鼠'],
    'music': 'cheerful',
    'narration': 'energetic'
}

print(f"标题: {children_story['title']}")
print(f"类型: {children_story['type']}")
print(f"音乐: {children_story['music']} (欢快活泼)")
print(f"旁白: {children_story['narration']} (活力充沛)")
print()

print("🎵 可用的音乐风格:")
print("  - relaxing (轻松舒缓)")
print("  - cheerful (欢快活泼)")
print("  - emotional (悲伤感人)")
print("  - intense (紧张刺激)")
print("  - magical (神秘奇幻)")
print("  - classical (古典优雅)")
print("  - pop (现代流行)")
print()

print("🎙️ 可用的语音风格:")
print("  - gentle (柔和)")
print("  - warm (温暖)")
print("  - energetic (活力)")
print("  - dramatic (戏剧)")
print("  - calm (平静)")
print()

print("=" * 70)
print("🎉 演示完成!")
print("=" * 70)
print()
print("💡 提示:")
print("  1. 使用 generate_story() 生成故事")
print("  2. 使用 select_music() 选择音乐")
print("  3. 使用 narrate() 添加旁白")
print("  4. 使用 StoryPlayer 播放故事")
print()
print("📚 更多示例请查看 SKILL.md")


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)