語音 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
重播最近一次播放的語音。