求生之路 2 自定义声音和音乐教程

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)

求生之路2 自从2010年8月20日更新以来,《求生之路2》完全支持自定义声音。Valve提供的说明可以在L4D2战役附加内容教程文章(en)中找到。本文介绍了如何在《求生之路2》中使用自定义声音、文件管理和测试方法。

入门

通常来说:

  1. 自定义声音文件适用于多个位置:可以在官方的sound文件夹中,已知搜索路径(en)中的sound文件夹中,或包含sound文件夹的附加内容中。
  2. 在测试之前,请使用snd_buildsoundcachefordirectory在该文件夹中构建一个新的sound.cache。
Tip.png提示:构建/重建一个独立搜索路径或附加内容的sound.cache比使用官方的sound文件夹更快速(尤其是对于旧电脑)。每次构建sound.cache时需要处理的声音文件数量较少。它还有助于在开发过程中模块化管理资源。在准备共享/发布时,也更容易将资源合并成一个VPK。
Warning.png警告:不要将声音文件放在sound目录的根目录中,因为这样会导致错误。应将其放入子目录中(例如:../sound/music/terror)。可以是一个新的子目录,也可以是默认提供的“官方”子目录。
选项 1 - 作为自定义搜索路径:
  1. 在任意位置创建一个包含sound子文件夹的目录。
  2. "..\left 4 dead 2\left4dead2\gameinfo.txt"gameinfo.txt(en)文件中添加目录路径。
  3. sound文件夹中创建另一个文件夹,可以是唯一的或已存在的名称(例如:ambient、music等)。如果可能,保持与官方sound文件夹相同的命名结构。
  4. 使用游戏内控制台构建sound.cache:snd_buildsoundcachefordirectory <绝对目录名,例如:e:\custom_sounds 游戏根目录,例如:../left4dead2/(包含官方sound文件夹)>。此命令将查找名为sound的目录并生成sound.cache。
  5. 重启客户端。
  6. 通过控制台(en)命令测试声音(sound为根目录): play (sound文件夹的子目录)/<声音文件名>
选项 2 - 作为附加内容/VPK:
  1. 在addons目录中创建一个文件夹。它应包含一个名为sound的子文件夹。addons目录位于"..\left 4 dead 2\left4dead2\addons"
  2. sound文件夹中创建另一个文件夹。此文件夹用于存储声音文件。
  3. 使用游戏内控制台为附加内容构建sound.cache:snd_buildsoundcachefordirectory ../left4dead2/addons/<将打包成VPK的VPK附加文件夹名称>。此命令将查找名为sound的目录,并在其中创建名为sound.cache的文件。
  4. 创建VPK(en)作为内容包。换句话说,只需要声音文件(及正确的目录结构)和sound.cache。无需删除解压后的VPK。保留它以便以后进行更改。
  5. 通过控制台(en)命令测试声音(sound为根目录): play (sound文件夹的子目录)/<声音文件名>
  6. 更新sound.cache并重新打包VPK,以便听到新或重新定位的声音。
示例

如果自定义声音文件位于left 4 dead 2/left4dead2/addons/customsoundaddon/sound/ambient/testsound.wav

  • 使用snd_buildsoundcachefordirectory ../left4dead2/addons/customsoundaddon构建sound.cache。
  • 作为自定义搜索路径:添加Game left4dead2/addons/customsoundaddon
  • 作为附加内容:构建sound.cache后,拖动customsoundaddon文件夹到vpk.exe的快捷方式中创建customsoundaddon.vpk。
  • 在游戏中测试testsound.wav,使用play ambient/testsound
Warning.png警告:用于替换声音的sound.cache文件在放入.vpk中时不起作用!
例如:用更长的声音替换原声的MOD需要使用sound.cache才能工作。但这些sound.cache文件只能作为独立文件使用。

一些建议

保持资源的组织结构清晰,独立且尽可能小。并且,在《求生之路2》中,声音通常是通过soundscripts(en)分配的。在使用声音进行开发时,至少应包含以下内容:

  1. 包含自定义声音和sound.cache的独立搜索路径,如上所述。您可以根据需要随意组合或分离资源,只要将挂载路径添加到gameinfo.txt中即可。
  2. 一张可以在游戏中加载的地图,通常是用于发布的地图或测试地图——maps/<地图名称>.bsp
  3. 一份空白的每张地图soundscript(en)(.txt文件)——maps/<地图名称>_level_sounds.txt
  4. 这些文件和文件夹最终将与地图和其他资源一起集成,作为一个独立的附加内容/VPK发布。

使声音效果合适

现在声音在游戏中可以正常播放了……接下来怎么办?文章的其余部分将涵盖这一点:

声音文件兼容性

Icon-Bug.png错误:截至2011年10月6日,.mp3 文件可能会突然停止播放声音脚本条目Event.MissionStart_MusicPostFixString和实体ambient_music的声音。对于实体ambient_generic,如果选中了is NOT looped标志,则Start Silent标志和输入StopSound将对所有声音失效。具体原因尚不清楚,副作用不一致。随着游戏的更新,这可能会发生变化。  [todo tested in?]

游戏可以播放WAV(en)MP3(en)文件,前提是它们具有声音缓存条目

声音缓存兼容性

从版本2.2.2.6开始,您可以为具有以下属性的声音文件构建声音缓存:

扩展名 通道 格式(ffmpeg_format 编解码器(ffmpeg_codec 编解码器配置文件 位深(bit) 采样率(Hz) 比特率(kbps)
.wav 单声道
立体声
s16le adpcm_ms N/A 4* 44100
22050
11025
采样率依赖(en)
pcm_s16le 16
u8 pcm_u8 N/A 8
.mp3 单声道
立体声
mp3 libmp3lame ABR
CBR
VBR
N/A 44100
22050
11025
32‒320

替换声音文件兼容性

许多L4D2模组替换现有的声音文件,而不打包声音缓存。 如果您希望避免让用户直接修改游戏文件,这是唯一的选择,因为附加内容的声音缓存优先级最低,并且会被优先级较高的声音缓存覆盖。 从版本2.2.2.6开始,游戏引擎将能够接受以下属性的替换声音文件无需重新构建声音缓存

扩展名 通道 格式(ffmpeg_format 编解码器(ffmpeg_codec 编解码器配置文件 位深(bit) 采样率(Hz) 比特率(kbps)
.wav 任意 s16le adpcm_ms N/A 4* 任意 采样率依赖(en)
pcm_s16le 16
u8 pcm_u8 8
.mp3 单声道
立体声
mp3 libmp3lame ABR
CBR
VBR
N/A 44100
22050
11025
32‒320

如果您希望您的替换声音正常播放,则必须遵循原始声音的声音缓存条目中的信息:

  • 文件大小
  • 声音时长
  • 循环点(en)(如果是WAV文件)
  • 采样率
  • 通道数

您的替换文件属性应尽可能接近(如果不是完全相同的话)原始文件,以避免异常播放。 如果您尝试在不重新构建声音缓存的情况下播放替换声音,以下情况可能会发生:

扩展名 改变了通道数量? 改变了格式? 改变了编解码器? 改变了编解码器配置文件? 改变了位深? 改变了采样率? 改变了比特率? 小于原始文件? 大于原始文件? 改变了循环点?
.wav 播放混乱 N/A 播放混乱 播放速度错误 N/A 非循环时正常播放;
循环时可能播放异常
截断播放 无变化
.mp3 正常播放 N/A 正常播放 N/A 正常播放 截断播放 N/A

位置很重要!

例如,滚动字幕的音乐music/unalive/themonsterswithin.wav会覆盖几乎所有其他声音。如果该声音文件(以及声音脚本条目)被移动到不同的目录,音乐的表现会有所不同。玩家会听到其他声音与结尾字幕混合播放,例如僵尸呻吟、幸存者的评论、声音景观等。

一个名为soundmixers的功能可能是负责声音优先级/压制的脚本。声音文件在sound目录中的位置会动态控制前景播放的声音以及被软化或静音的声音。脚本位于scripts\soundmixers.txt文件中,包含在pak01_dir.vpk中。有关如何提取脚本以查看详细信息,请参阅GCFScape(en)

待完善: 在游戏中似乎没有完全翻译,因此可能是硬编码的文件夹位置。
Note.png注意:声音压制(
待完善: 这个术语对吗?优先级?压制?
)在本文中尚未完全理解。soundmixers可能是决定歌曲优先级的因素之一,也可能不是。为了完整记录其工作方式,需要更多的测试或文档中的信息。例如,有人怀疑可能涉及文件夹的硬编码(测试具有相同优先级属性的目录)。最近的Source游戏中可能发现的新声音条目属性也可能影响声音优先级。

循环

需要循环的声音必须通过第三方程序进行循环。有关详细信息,请参阅Looping a Sound(en)

循环示例:坦克战斗音乐、发动机声音、被猎人攻击的音乐、玩家在酸池中的音乐。

声音脚本

每个地图的声音脚本似乎是创建自定义或修改声音脚本(en)条目的唯一方法。全新的声音脚本条目可以轻松创建,或者可以安全地覆盖现有的声音脚本条目(例如Event.Tank)来为单个地图定制。当测试或发布时,结果是一个包含每个地图的<map name>_level_sounds.txt的地图文件夹。

用文本编辑器打开<map name>_level_sounds.txt

有关更多详细信息,请参阅L4D2 Soundscripts(en)

待完善: 涵盖L4D2声音脚本。什么是游戏特有的。

声音脚本条目

条目(en)可以通过控制台或实体(例如ambient_generic或ambient_music)在游戏中播放。一个条目的示例:

entry.name
{
	channel		CHAN_AUTO
	volume		VOL_NORM
	pitch		PITCH_NORM
	soundlevel	SNDLVL_NORM
	wave		common/null.wav
}

如果某个值包含空格或制表符,请将其用引号括起来。

声音脚本的常见使用

所有官方游戏内音效、发声和音乐都依赖声音脚本来调整声音的通道、音量、音高等。使用maps/<map name>_level_sounds.txt,您可以自定义现有条目,而不会与其他附加内容和官方战役发生冲突。只需将您希望更改的条目复制到每个地图的声音脚本中。

声音脚本条目可以通过打开pak01_dir.vpk并访问scripts/game_sounds_*.txt文件夹找到。

许多音乐条目依赖于地图属性 > 后缀字符串(en),该属性可在Hammer(en)导航网格属性(en)中找到。例如,地图c5m1_waterfront.bsp的后缀字符串为"BigEasy",并且在游戏中播放其风格的介绍音乐,其中导航网格标记为PLAYER_STARTCHECKPOINT

有趣的声音脚本

所有的声音脚本都很有趣。以下是其中几个:

  • game_sounds_music.txt提供了很好的音乐声音脚本条目示例。一些条目将同一乐器的不同音符串联在一起,并随机播放。
  • game_sounds_physics.txt包含在游戏交互期间播放的声音条目,例如走在雪地上或射击混凝土墙的声音。

声音景观

L4D2中的自定义soundscapes(en)似乎能够很好地工作,无需修改官方的声音景观清单。它们是“每图”文本文件,类似于声音脚本,但位于scripts文件夹中:scripts/soundscapes_<map name>.txt。声音景观通常使用.wav文件,通常涉及循环(en)。.mp3文件也可能有效(不支持循环)。

因为声音景观是“每图”的,每个地图都需要一个声音景观文件。
为了避免复制粘贴整个脚本并跟踪所有声音景观文件中的更改,您可以创建一个“主”声音景观,包含所有必要的内容,而其他所有声音脚本文件只需“包含”主脚本。这样主脚本中的所有更改都会自动加载到所有其他脚本中。
例如:

#include "soundscapes_mymap_master.txt"
声音景观实体

官方地图(en)仅使用env_soundscape来进行关卡声音设计。其他实体和方法可能无法按预期工作。欢迎进行实验!

测试

测试自定义声音脚本条目非常简单,只需创建最新的sound.cache,重新启动游戏,然后在地图中播放声音。如附加组件教程(en)中所述,sound.cache通过控制台命令snd_buildsoundcachefordirectory ..\left4dead2\<sound文件夹位置>构建。当声音缓存成功创建或更新时,控制台会输出在附加组件sound目录中找到的声音文件数量。

Note.png注意:还有其他方法可以确认sound.cache是否已更新。可以进入该附加组件的声音目录并查看修改时间。您甚至可以用文本编辑器打开sound.cache,查看是否包含了预期的声音文件。

通过控制台

  1. 打开<map name>.bsp
    map <map name> coop
  2. 测试声音
    playgamesound entry.name
  3. 在大多数情况下,如果声音拒绝停止播放,可以通过以下命令停止声音
    stopsound

通过实体

  1. 创建一个ambient_generic(en)ambient_music(en)或任何其他具有需要声音名称属性的实体
    Tip.png提示:对于ambient_generic,如果声音文件被编程为循环(en)(文件本身),则需要取消选中“is NOT looped”标志,以便通过输入StopSound停止声音的持续循环。ambient_music(en)没有此标志,循环应该按预期工作。
  2. 更改targetname(en)并更改声音名称为您选择的声音脚本条目
  3. 可选:创建一个触发声音的实体(如果需要或希望)
  4. 通过控制台打开<map name>.bsp
    map <map name> coop
  5. 通过“触发实体”或控制台命令测试声音:
    ent_fire <ambient_generic targetname> PlaySound
    Note.png注意:ambient_generic还具有FadeInFadeOut输入功能。
  6. 在大多数情况下,如果声音由于某种原因拒绝停止播放,可以通过控制台停止声音。请考虑这些声音实体的bug(en),如果您需要使用实体I/O来StopSound
    stopsound //这是控制台命令,格式与这两个声音实体的输入一样。
待完善: 扩展测试:声音是否正确,L4D2中特有的音乐功能。

发布

L4D2 Campaign Add-on Tutorial(en)中所述,最终的、很可能是单独的VPK将包含您的战役或单地图的所有独特资源。在自定义声音方面,只需复制您一直在使用的声音文件夹和每图的声音脚本。恭喜您完成发布!

另见

外部链接