语音 link
Ren’Py支持对话文本与语音播放的联结。使用 voice
语句可以实现这个功能,voice
语句指定了播放的语音文件:
voice "line0001.ogg"
"欢迎来到Ren'Py"
通常来说,某个语音会被后面的互动行为中断。voice sustain
语句则可以保证语音会播放完毕,即使遇到某个互动行为。
voice "line0001.ogg"
"欢迎来到Ren'Py..."
voice sustain
"... 你的电子小说引擎。"
config.voice_filename_format
配置项允许你定制化语音文件名,使用的时候省略文件夹和文件扩展名。
语音标签(tag) link
Ren’Py内置了一个语音标签(tag)系统,使得针对某个选定的角色语音的静音和取消静音成为可能。若要活用这个优势,需要在使用 Character()
创建每一个角色对象时都提供一个voice_tag入参,就可以使用 SetVoiceMute()
或 ToggleVoiceMute()
切换角色语音的静音和取消静音状态。
举例:
define e = Character("艾琳", voice_tag="eileen")
define l = Character("露西", voice_tag="lucy")
screen voice_toggle:
vbox:
textbutton "艾琳静音" action ToggleVoiceMute("eileen")
textbutton "露西静音" action ToggleVoiceMute("lucy")
label start:
show screen voice_toggle
voice "e01.ogg"
e "你可以开关一个角色的语音。"
voice "l01.ogg"
l "耶!我现在终于可以让你闭嘴了!"
voice "l02.ogg"
l "等下……也就是说我也被静音了!真的假的?"
自动语音 link
Ren’Py提供了自动匹配语音文件并播放的功能,不用在每行对话脚本之前都写一条voice语句就可以实现语音播放。
要实现这个功能的话,我们创建的语音文件名必须跟对话脚本每行的标识号(identifier)严格匹配。若要确定应该用那个标识号,需要将对话脚本导出为一个表格,操作如下:在启动器上选择“提取对话”,“以制表符分隔的表格 (dialogue.tab)”,“继续”。然后会生成一个文件——dialogue.tab,它可以使用表格程序打开。
表格的第一列就是需要使用的标识号,其他列则是对话的更多别的信息。
要让Ren’Py自动播放语音,需要将 config.auto_voice
设置为一个包含 {id} 格式的字符串。当对话发生, {id} 会被对话标识符替换,并自动组成一个音频文件名。若音频文件名对应的文件真实存在,则那个文件就会播放。
举例,比如我们如下定义:
config.auto_voice = "voice/{id}.ogg"
对话标识号是 demo_minigame_03fc91ef
,那么当对应的对话显示时,Ren’Py会寻找文件 voice/demo_minigame_03fc91ef.ogg
。如果文件存在,Ren’Py会播放这个文件。
包含多种语言的语音 link
得益于Ren’Py的多语言支持系统,游戏可以使用 图片和文件的多语言支持 在多种语言中进行转换。 原生语言为英语的游戏可以翻译为法语:
voice "omelette.ogg"
e "I like scrambled eggs with cheese..."
放好英语版本的语音文件 game/omelette.ogg
和法语版本 game/tl/french/omelette.ogg
,
就能在Ren’Py启用法语版后,播放法语的语音了。
自动语音时的效果也类似,只要翻译文件的路径以 game/tl/<language>/
开头,
会自动匹配 game/
目录中的同名文件。
语音函数 link
- _get_voice_info() link
返回目前say语句对应正在播放语音的有关信息。只有当say语句执行时,该函数才能被调用。
返回对象具有以下几个字段(field):
- VoiceInfo.filename link
正在播放语音的文件名,如果没有任何文件在播放则返回None。
- VoiceInfo.auto_filename link
Ren’Py意图使用自动语音搜索的文件名,如果未找到则返回None。
- VoiceInfo.tag link
目前发言角色(character)的voice_tag参数。
- VoiceInfo.sustain link
该值为False时,用户互动行为会中断语音播放。改值为True时,一次用户互动行为后语音会持续播放。
- voice(filename, tag=None) link
播放voice通道上名为filename的文件。等效于voice语句。
- filename
想要播放的语音文件名。函数会使用
config.voice_filename_format()
拼装成将用播放的文件名。- tag
若该入参非空,其值应该是一个字符串,给定了需要播放的语音标签(tag)。若该入参为None,将使用默认值,即触发下一次互动行为前角色的voice_tag。
语音标签(tag)用于指定发言角色,并允许用户针对某个角色的语音进行静音或取消静音。
- voice_can_replay() link
若当前语音允许回放则返回True。
- voice_replay() link
若当前语音允许回放,则回放该语音。
- voice_sustain(ignored='', **kwargs) link
等效于voice sustain语句。
Voice Actions link
- PlayCharacterVoice(voice_tag, sample, selected=False) link
在voice通道上播放sample语音文件,并将其视为由带有 voice_tag 的某个角色所说。
- sample
语音文件完整路径。不会对该文件的做任何语音相关的处理。
- selected
若该值为True,当sample文件正在播放,调用该行为(action)函数的按钮会被标记为“被选中(selected)”。
- SetCharacterVolume(voice_tag, volume=None) link
该行为允许每个角色的语音音量都可以调整。若 volume 值为None,将返回 voice_tag 对应的音量值。否则的话, voice_tag 对应的音量值会被设置为 volume 。
volume 是一个介于0.0至1.0之间的值,在包含 voice 通道的混合器(mixer)音量中则是一个分量。
- SetVoiceMute(voice_tag, mute) link
若 mute 值为True,带有给定语音标签 voice_tag 的所有语音会被静音。若 mute 值为False,取消语音标签 voice_tag 所有语音的静音。
- ToggleVoiceMute(voice_tag, invert=False) link
切换 voice_tag 的静音状态。 默认情况下,指定 voice_tag 处于静音状态时将选择对应的语音tag对象。如果 invert 值是True,则会选择不处于静音状态时语言tag对象。
- VoiceReplay(*args, **kwargs) link
回放最近一次播放的语音。