Ren’Py支持对话文本与语音播放的联结。使用voice语句可以实现这个功能,voice语句给定了播放的语音文件:
voice "line0001.ogg"
"欢迎来到Ren'Py"
通常来说,某个语音会被后面的互动行为中断。voice sustain语句则可以保证语音会播放完毕,即使遇到某个互动行为。
voice "line0001.ogg"
"欢迎来到Ren'Py..."
voice sustain
"... 你的电子小说引擎。"
config.voice_filename_format 配置项允许你定制化语音文件名,使用的时候省略文件夹和文件扩展名。
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 "等下……也就是说我也被静音了!真的假的?"
Ren’Py提供了自动匹配语音文件并播放的功能,不用在每行对话脚本之前都写一条voice语句就可以实现语音播放。
要实现这个功能的话,我们创建的语音文件名必须跟对话脚本每行的标识号(identifier)严格匹配。若要确定应该用那个标识号,需要将对话脚本导出为一个表格,操作如下:在启动器上选择“Extract Dialogue”,“Tab-delimited Spreadsheet (dialogue.tab)”,“Continue”。然后会生成一个文件——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会播放这个文件。
_get_voice_info() link返回目前say语句对应正在播放语音的有关信息。只有当say语句执行时,该函数才能被调用。
返回对象具有以下几个字段(field):
VoiceInfo.filename link正在播放语音的文件名,如果没有任何文件在播放则返回None。
VoiceInfo.auto_filename linkRen’Py意图使用自动语音搜索的文件名,如果未找到则返回None。
VoiceInfo.tag link目前发言角色(character)的voice_tag参数。
VoiceInfo.sustain link该值为False时,用户互动行为会中断语音播放。改值为True时,一次用户互动行为后语音会持续播放。
voice(filename, tag=None)播放voice通道上名为filename的文件。等效于voice语句。
config.voice_filename_format() 拼装成将用播放的文件名。若该入参非空,其值应该是一个字符串,给定了需要播放的语音标签(tag)。若该入参为None,将使用默认值,即触发下一次互动行为前角色的voice_tag。
语音标签(tag)用于指定发言角色,并允许用户针对某个角色的语音进行静音或取消静音。
voice_can_replay() link若当前语音允许回放则返回True。
voice_replay() link若当前语音允许回放,则回放该语音。
voice_sustain(ignored=u'', **kwargs) link等效于voice sustain语句。
PlayCharacterVoice(voice_tag, sample, selected=False) link在voice通道上播放sample语音文件,并将其视为由带有 voice_tag 的某个角色所说。
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 的静音状态。This is selected if the given voice tag is muted, unless invert is true, in which case it’s selected if the voice is unmuted.
VoiceReplay(*args, **kwargs) link回放最近一次播放的语音。