DokiMod 开发文档 DokiMod 开发文档
主页
DDLC 中文 Mod 模板
返回主站 (opens new window)
  • Mod 模板 2.0 (opens new window)
  • 新版文档 (opens new window)
  • 新版开发文档 (opens new window)
主页
DDLC 中文 Mod 模板
返回主站 (opens new window)
  • Mod 模板 2.0 (opens new window)
  • 新版文档 (opens new window)
  • 新版开发文档 (opens new window)
  • 序

  • 入门

    • 开始准备环境
    • 第一个简单的脚本
    • 选择菜单与多 Label
    • 变量与定义变量
    • 持久化数据和判断
    • 使用音频
      • 播放音频
      • 停止播放
      • 语音功能
      • 等效语句
    • 角色立绘的那些事
    • 额外脚本介绍
  • 进阶

  • 分发

  • 杂项

  • DDLC 中文 Mod 模板
  • 入门
imgradeone
2023-07-15

使用音频

# 使用音频

在 第一个简单的脚本 中,我们简略的学习了如何添加 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 需要设置的通道名。
上次更新于: 7/15/2023, 10:29:00 AM
持久化数据和判断
角色立绘的那些事

← 持久化数据和判断 角色立绘的那些事→

Theme by Vdoing | Copyright © 2021-2023 DokiMod Team | 本网站是粉丝作品,与 Team Salvato 无关 | hosted by ▲ Vercel | powered by VuePress
访问统计信息
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式