音频播放


本章将为您介绍关于BKE的音频播放部分。

音频文件可以通过音频相关命令来播放,常用的有 bgm , se , voice 等命令。

BKE引擎支持wav、ogg与mp3等常用格式的音频文件。鉴于现在各种各样的转换器的普及,将音频文件从原格式转换到质量较高的wav格式或者是压缩率较高的ogg格式都已经不存在太大的技术困难了,因此我们这里也不再赘述其中的细节。

对于音频系列的命令来说,BKE中还存在着频道的概念。有的时候,您可能希望同时能播放多个音效文件,这个时候您就需要使用不同的频道来控制这些文件的播放以及停止。而 bgmvoice 对应的背景音乐和语音一般不会同时播放多个文件,因此都只占用一个频道。

默认情况下,bgm 命令对应的频道编号是-1,而 voice 命令对应的频道编号是-2。 se 命令无法使用编号小于0的频道(包括 bgm 频道和 voice 频道),这将有助于减少潜在的混乱和错误。

除此之外,您可以使用 volume 命令调整频道的音量。 pause 命令和 resume 命令允许您暂停和继续播放某个频道的音频文件,而 fade 命令可以为您实现音量平滑变化的声音效果。

播放命令

如果您想播放任何音频文件,您必须从 bgm , se , voice 三个命令中选择一个合适的命令来使用。 bgm 命令适合播放游戏的背景音乐, voice 命令适合播放人物语音,而 se命令适合播放其他任何需要播放的音频文件。

bgm *file loop=true vol=100 fadein=0 loopto=0
  在bgm频道播放指定的音频文件。

*file - 字符串
     将要播放的文件。
loop=false - 布尔值
     是否循环,默认为false。
vol=100 - 音量型
     播放音量,范围为0~100。
fadein=0 - 时间型
     淡入时间。若该数值不为0,那么淡入开始时音量将自动被设置为0。
loopto=0 - 时间型
     当音频播放结束时,若loop参数为true,那么将自动从该时间点开始重复播放。

se *file channel=0 loop=false vol=100 fadein=0
  在指定的频道播放指定的音频文件。该命令不接受loopto参数,因此不支持从音频的某一点重复播放功能。

*file - 字符串
     将要播放的文件。
channel=0 - 整数型
     将要使用的频道编号。不能是负数。在此文件播放前BKE将停止该频道当前正在播放的音频。
loop=false - 布尔值
     是否循环,默认为false。
vol=100 - 音量型
     播放音量,范围为0~100。
fadein=0 - 时间型
     淡入时间。若该数值不为0,那么淡入开始时音量将自动被设置为0。

voice *file vol=100
  在voice频道播放指定的音频文件。不能重复播放该频道的音频文件,也不能设置淡入效果。

*file - 字符串
     将要播放的文件。
vol=100 - 音量型
     播放音量,范围为0~100。

在实践中,如果您希望分开管理每个角色的语音音量,我建议您新建一个字典,并将各个角色的音量值保存到该字典的值中,用角色名称作为键,然后在调用voice命令的时候直接将vol参数的值设为该字典中相应角色的值即可。您也可以重新实现voice命令来达到您要的效果。

范例代码:

@bgm file="bgm/bgm01.ogg" vol=80 fadein=1000 loopto=30000
//以80的音量播放bgm,1秒淡入时间,播放完成后loop到30秒处重复播放
@se file="se/car.ogg"
//播放se
@voice file="voice/nanami08213.ogg"
//播放语音

音频控制命令

以下这些命令可以控制音频流,以及某频道的音量大小。

pause channel_
  暂停一个频道,使用resume命令可以从当前位置继续播放该音频。
   _
channel
- 整数型
     将要暂停的频道编号。可以直接填bgm和se(非字符串),系统会自动完成正确的操作。如果希望暂停se频道,您需要提供确切的编号。

resume channel_
  继续播放一个因pause命令停止播放的频道。
   _
channel
- 整数型
     将要继续播放的频道编号。可以直接填bgm和se(非字符串),系统会自动完成正确的操作。如果希望继续播放se频道,您需要提供确切的编号。

stop channel fadeout=0
  停止一个频道,当channel参数不存在时将停止所有频道。
channel - 整数型
     将要停止的频道编号。若不存在则会停止所有频道。
fadeout=0 - 时间型
     淡出的毫秒数。默认为0。

volume *channel get/set
  调整或者获取一个频道的音量大小,瞬间完成。get和set参数至多且至少存在一个
channel - 整数型
     将要处理的频道编号。
set - 音量型
     目标音量。
get - 变量
     目标变量。频道的音量值将保存到这个变量里。

在其他命令的参数中,您也会遇到类似的get/set参数组。您只需要记住,如果您要使用这类命令,只须提供set和get中的一个即可。

fade channel time to stop=false_
  将一个频道的音量渐变到给定值。
channel - 整数型
     将要渐变的频道编号。
   _
time
- 时间型
     渐变的毫秒数。
to - 音量型
     目标音量。
stop=false - 布尔值
     渐变完成后是否停止播放,默认为false。