語音 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

重播最近一次播放的語音。