使用音频
# 使用音频
在 第一个简单的脚本 中,我们简略的学习了如何添加 BGM 。而在本章, 我们将学习音频的详细内容。
Ren’Py 中,我们主要使用三种已经定义好的音频频道:
music
- 音乐播放通道。sound
- 音效播放通道。voice
- 语音播放通道。
# 播放音频
play
语句主要用于播放音效、音频。如果某个文件正在通过通用通道播放,播放会被中断,并开始播放新的文件。
请阅读以下代码,尝试理解 play
语句的结构与用法:
play music audio.t1
play sound audio.closet_open
play music [audio.t1, audio.t2]
play sound [audio.closet_open, "<silence .5>", audio.closet_close]
提示
这里的 <silence .5>
表示播放 0.5 秒的静音。播放静音用于延迟音效文件的播放点。
不难看出,play
语句基本结构如下:
play <频道名> <播放列表/文件名/变量、常量>
play
语句还可以使用淡出、淡入效果和循环效果。
例子:
play music audio.club_festival fadein 0.5 fadeout 1.0 noloop
play music audio.main_menu loop
扩展知识
在上述代码中,noloop
表示不循环,你可能会觉得 noloop
的存在有时什么意义呢?
事实上,当 play
语句中既没有出现 loop
分句也没有出现 noloop
分句时,此时 Ren'Py 会根据通道的默认配置决定实际播放情况。
play
语句还可以调整音量,只需要在后面加上一个 volume
从句即可。
例子:
# 此处 .25 表示 0.25,制定了音频的音量
play music audio.t1 volume .25 loop
# 停止播放
stop
语句以关键词 stop
开头,后面跟的音频通道名。stop
同样可以使用淡出效果。
例子:
stop sound
stop music fadeout 1.0
# 语音功能
Ren'Py 同样支持语音功能。可以使用 voice
语句。
读下列代码,试图理解 voice
语句的用法及结构:
voice 'welcome.ogg'
y "欢迎。"
define voice.a = "hello.ogg"
voice voice.a
y "你好。"
通常来说,某个语音会被后面的互动行为中断。voice sustain
语句则可以保证语音会播放完毕,即使遇到某个互动行为。
例子:
voice 'hooray.ogg'
s "这简直是..."
voice sustain
s "......太棒了!!!!!!"
# 自动语音
Ren’Py 还提供了自动匹配语音文件的功能,省去了麻烦的 voice
语句。
要实现这个功能的话,语音文件名必须跟对话脚本标识号严格匹配。若要确定应该用那个标识号,需要将对话脚本导出为一个表格,操作如下:在启动器上选择 “Extract Dialogue”,“Tab-delimited Spreadsheet (dialogue.tab)”,“Continue”。然后会生成一个文件——dialogue.tab,它可以使用表格程序打开。
表格的第一列就是需要使用的标识号,其他列则是对话的更多别的信息。
要自动播放语音,请将 config.auto_voice
设置为一个包含 {id}
的字符串。若进入对话, {id}
会被对话标识符替换,并自动组成一个音频文件名。若音频文件名对应的文件真实存在,则那个文件就会播放。
举例,比如我们如下定义:
config.auto_voice = "mod_assets/voice/{id}.ogg"
对话标识号是 ch1_n_end_24e41fcf
,那么当对应的对话显示时,Ren’Py会寻找文件 mod_assets/voice/ch1_n_end_24e41fcf.ogg
。如果文件存在,Ren’Py会播放这个文件。
# 等效语句
你同样可以在 Python 中播放、停止音频。
# renpy.play
renpy.play
播放一个音效,它接受两个参数:filename
与 channel
。
renpy.play(filename, channel=None)
例子:
$ renpy.play(audio.closet_open)
$ renpy.play(audio.closet_open, 'sound')
等同于:
play sound closet_open
# renpy.music.play
renpy.music.play
播放一个音乐。
我们通常只使用 renpy.music.play
的部分参数:
renpy.music.play(filenames, channel='music', loop=None, fadeout=None, fadein=0)
例子:
$ renpy.music.play(audio.t1, channel = 'music', loop = True, fadeout = 0.5, fadein = .25)
等同于:
play music audio.t1 loop fadeout .5 fadein .25
# renpy.music.stop
该函数停止正在播放的音乐,并解散播放队列。
$ renpy.music.stop(channel='music', fadeout=None)
如果入参fadeout
为None,使用 config.fade_music
配置值作为淡出效果时间,否则就是用 fadeout
入参值。
该函数将最后组建的待播放文件列表设置为 None
。
# renpy.music.set_volume
设置通道的音量。对于控制多个通道的混合器,该值表示混合器的一个音量分量。
renpy.music.set_volume(volume, delay=0, channel='music')
volume
值位于0.0至1.0的闭合区间。对于控制多个通道的混合器(mixer),该值表示混合器的一个音量分量。delay
值代表一个时间量,用于新旧音量值切换/平滑过渡时的时延,单位为秒。该值会保存在存档中,并接受回滚操作。channel
需要设置的通道名。