自動語音
Ren’Py支持自動語音模式。在自動語音模式下使用一個語音合成器朗讀出文本和其他介面元素。這個功能能讓有視力缺陷的人也能使用Ren’Py遊戲。
自動語音模式可以按 v 鍵切換開關。
也可以通過無障礙文本可讀性(accessibility)菜單,按 Shift+A 鍵訪問,選擇自動語音模式。
使用 Shift+A 進入無障礙文本可讀性(accessibility)菜單後,按 R 鍵可以重設自動語言的所有設置並啟用自動語言。
該功能可以在用戶修改某些設置導致禁用自動語音的情況下,重新啟動自動語言。
處於自動語音模式時,鍵盤導航會發生變化,上下方向鍵會讓循環經過界面上所有可獲得焦點的可視組件。
當某個可視組件獲得焦點時,Ren’Py會大聲朗讀出與那個可視組件關聯的文本。如果沒有可視組件獲得焦點,Ren’Py會讀出界面上無法獲得焦點的文本內容。自動語音透過這種方式大體上覆蓋了構成遊戲的所有對話和文本。
語音合成
Ren’Py通常使用操作系統和Web瀏覽器提供的語音合成器。Linux是例外——在Linux上,必須安裝 espeak-ng 命令才能使用自動語音。
可透過無障礙文本可讀性菜單選擇語音。該菜單使用 renpy.get_tts_voices() 函數列出可用語音,並使用 Preference() 設置語音。可用語音的具體列表取決於具體平台和設備。
在大多數平台上,Ren’Py依賴操作系統提供語音合成服務。若要調整語音合成的速度和使用的聲音,就需要調整對應平台的語音設置。
- Windows
在Windows平台上,Ren’Py使用微軟語音API。在控制面板“語音識別”中“文本到語音轉換”標籤可以修改語音合成的設置。
- Mac OS X
在Mac OS X平台,Ren’Py使用
say命令。在“Dictation & Speech”控制面板的“Text to Speech”標籤可以修改語音合成設置。- Linux
在Linux平台上,Ren’Py使用
espeak命令。在自動語音模式運行之前,需要先使用package管理器安裝espeak。- Android, iOS, Chrome OS
在安卓、iOS和Chrome OS上,Ren’Py使用平台內建的文本轉語音(text-to-speech)服務。
默認聲音可以在對應平台的基本設置中選擇,使用
config.tts_voice 配置項。舉例:
init python:
if renpy.windows:
config.tts_voice = "Mark"
elif renpy.macintosh:
config.tts_voice = "Alex"
elif renpy.linux:
config.tts_voice = "english_rp"
其他模式
自動語音模式下還有兩種其他模式。
- 剪貼簿模式
剪貼簿模式可以按
Shift+C鍵切換開關。在剪貼簿模式下,文本會被複製到剪貼簿而不是通過TTS播放。這可以與螢幕閱讀器或其他輔助技術一起使用,將剪貼簿內容呈現給用戶。也可以用於翻譯軟體可以從剪貼簿中讀取文本。- 除錯模式
除錯模式可以按
Shift+Alt+V鍵切換開關。在除錯模式下,會在螢幕顯示即將播放語音的文本,用於輔助開發。
創作者關注點
Ren’Py的自動語音會從可視組件中剝離文本並向閱讀給用戶。Ren’Py從兩個地方剝離文本。
- text可視組件
Ren’Py會從文本組件剝離文本,並讓文本可以向用戶閱讀。
轉換過的text
轉換文本由可視組件的
alt樣式特性提供。還可以通過按鈕(button)上的行為Action和條(bar)BarValue的值來獲取。顯示提供的轉換文本優先於行為和值的文本,從文本組件中的自帶文本優先度最低。轉換文本會使用Ren’Py的字串多語言支持機制進行翻譯。轉換文本的優先度高於從可視組件及其子組件剝離出的文本,不過從文本組件剝離出的問題可以使用“[text]”型字串替換。其他文本都不允許使用字串替換。
例如:
screen information(message, planet, badness): text message: color color_from_badness(badness) alt "Information for you : [text]. Badness is " + str(badness) text "ORIGIN_OF_MESSAGE_{color=#f00}[planet!u]{/color}": alt "Origin of message is " + planet在上例中,變數
badness和planet都不能直接使用“[badness]”替換。把所有變數連成一個字串,是個解決方法。傳入Character對象的 who_alt 和 what_alt 參數將alt樣式特性分別設置為角色的名字文本和身體文本。舉個例子,我們定義了一個角色使用斜體表示其內心想法,但通過自動語音顯示表現其想法:
define thought = Character(None, what_italic=True, what_alt="I think, [text]")界面中的可視組件可能會帶有
group_alt特性。 帶有該特性匹配前綴的可視組件首次獲得焦點時,將播放設置的文本轉語音。 但相同前綴的組件獲得焦點後不會重複播放,直到不同前綴的組件獲得焦點。可視組件可能還會帶有
extra_alt特性。當該可視組件獲得焦點且按下鍵盤問號鍵時,將播放額外的語音資訊。
- 描述文本text
描述文本是啟用自動語音功能後,通過旁白顯示(或表述)的文本內容。 如果禁用自動語音則文本不顯示。自動語音文本使用變數
alt,與角色的定義過程類似。- alt = ...
一個類角色的對象,啟動自動語音的情況下會唸出旁白的文本。
舉例:
e "Hang on, this is gonna be a bumpy ride!" alt "And then the sun exploded..." # 一個複雜而且亦可賽艇的特寫場景。 show event sun_exploding pause 10
有一個配置項變數控制描述文本:
- define config.descriptive_text_character = None
若不是None,該項應該是一個用於顯示描述文本角色對象,且不是旁白。
可使用 config.tts_substitutions ` 配置項替換待朗讀文本中的詞語,以便更好地控制發音。語音和語速均可通過無障礙文本可讀性(accessibility)菜單(Shift+A)進行選擇。所選語音保存在 :var:`preferences.tts_voice ,自動語音的語速保存在 preferences.tts_speed 。
使用快捷鍵shift+alt+V可以啟用自動語音的debug模式。debug模式下會顯示界面中會播放語音的文本,用於開發需求。
Python
自動語音系統中包含下列函數:
- renpy.alt(s, translate=True, force=False)
以語音形式播放序列 s。若 translate 為True,播放語音前會轉換成當前系統語言類型對應的文本。 若 force 為True,禁用自動語音情況下依然可以播放語音。
該函數主要用於功能測試,不應用於實際遊戲中。