模组:音频
← 目录
此页面解释如何使用和编辑游戏音乐和音效(统称为声音提示(cues))。这是一篇面向模组开发者的高级指南。
音频数据
您可以通过编辑Data/AudioChanges素材以添加或编辑声音提示。新的声音提示会被添加到游戏的声音库中,因此它们可以用于任何能使用正常音频的地方(例如Music 地图属性)。
数据格式
Data/AudioChanges素材由一个“字符串 → 数据模型”查询构成,其中,键名匹配相应ID,而键值为包含下述字段的数据模型。
此素材中列出的条目描述了对声音库的重写。此重写对于当前游戏会话是永久性的,即便编辑素材以移除它。重写声音提示会清空指定条目的所有值。
字段 | 效果 | ||||||
---|---|---|---|---|---|---|---|
ID | 当前声音提示的唯一字符串ID。在游戏内播放声音时会用到。 | ||||||
FilePaths | 一个绝对文件路径列表(而不是素材名称),将从中加载音频。每个文件为.ogg 或 .wav 格式。若列出多条路径,则每次播放时选取随机路径。 | ||||||
Category | 音频类别,决定了该音频受到游戏中选项的哪个音量条控制。应当为Default, Music, Sound, Ambient, 或 Footsteps (参见具体描述)。默认为Default。 | ||||||
StreamedVorbis | 是否应该在播放音频时从磁盘流式传输,而不是提前加载到内存中。这只适用于Ogg Vorbis(.ogg)文件,否则这些文件在加载时会在内存中解压缩。默认值为false。
这是内存占用和性能之间的权衡,因此您应当考虑每条声音提示使用何值最佳:
| ||||||
Looped | 是否循环播放声音提示直到停止。默认为false。 | ||||||
UseReverb | 是否对音频应用混响效果。默认为false。 | ||||||
CustomFields | 此条目对应的自定义数据字段。 |
类别列表
每条声音提示都隶属于下列五个类别之一,规定了它受制于游戏选项中具体哪个音量条:
internal ID | name | description |
---|---|---|
1 | Default | 这是一个无用的类别,一般情况下应当避免使用。 |
2 | Music | 用于音乐。对应游戏选项中“音乐音量”。 |
3 | Sound | 用于音效。对应游戏选项中“音效音量”。 |
4 | Ambient | 用于背景音,例如风声、雨声、机器轰鸣声,能够在一个场景的背景播放。对应游戏选项中“背景音量”。 |
5 | Footsteps | 用于脚步声,例如玩家或马的脚步声。对应游戏选项中“脚步音量”。 |
音频文件格式
游戏仅支持.ogg和.wav。若您希望在游戏中使用.mp3等文件,可以使用Audacity等软件先将其转换为.wav或.ogg格式。对应诸如音效的尺寸较小的声音,可使用.wav文件;但对于音乐等尺寸较大的音频,请使用压缩后的.ogg文件。
确保音乐文件尺寸相对较小(最好在2-4MB左右)。文件越大,加载对应音乐时游戏冻结的时间越长。为减少音乐尺寸,可将其转换为.ogg文件并压缩。压缩程度越大,文件尺寸越小,但过度压缩会显著减损音质。
若您正在一次打包许多声音,请留意您的模组文件大小。文件越大,人们下载您的模组用时越长。
示例
如下内容包向游戏添加了新的声音提示,并在玩家进入巴士站时播放之:
{
"Format": "2.3.0",
"Changes": [
// 添加声音提示
{
"Action": "EditData",
"Target": "Data/AudioChanges",
"Entries": {
"{{ModId}}_Music": {
"ID": "{{ModId}}_Music",
"Category": "Music",
"FilePaths": [ "{{AbsoluteFilePath: assets/music.ogg}}" ],
"StreamedVorbis": true,
"Looped": true
}
}
},
// 添加到巴士站
{
"Action": "EditMap",
"Target": "Maps/BusStop",
"MapProperties": {
"Music": "{{ModId}}_Music"
}
}
]
}
审阅音频
解压音频文件
原版游戏的音频以声音库的形式存储在Content/XACT文件夹,后者存储游戏的一切音效和音乐。两个可用的声音库文件包括Wave Bank(1.4).xwb和Wave Bank.xwb。
可使用XWB提取器提取和浏览音频文件:
工具名称 | 支持平台 | 说明 | ||
---|---|---|---|---|
unxwb | Windows, macOS | 直接将XWB声音库提取为.wav文件和十六进制代码。一个直接打开和提取的工具。
| ||
VGMStream插件,用于foobar2000播放器 | Windows | 使用整数代码和包括文件名在内的游戏代码来查看XWB声音库。具备非常便捷的文件浏览器。(出于某些原因,此工具会将音频ID加1,并循环每条声音提示。) | ||
XACTTool | Windows | 将XWB声音库提取为.wav文件和整数的代码。也能操作声音库。仅支持命令行。 |
参见下方完整声音列表。
鉴别游戏中的声音
- 对于音乐,您可以安装的Now Playing模组(参见模组描述,以获得关于将音乐ID追加到消息的具体信息)。当音乐开始时,游戏内会显示一则用户界面消息。
- 对于音效,您可以在SMAPI控制台输入debug logSounds。这会将游戏内所有音效写入日志,包括位置信息(如果可用)。参见控制台命令以获得更多信息。
声音列表
下面是从游戏数据中导出的原始声音库ID(参见讨论页获取导出用代码)。
关于表格各列的说明:
- “名称”是您在游戏中会用到的东西(例如,在Music地图属性中或Game1.changeMusicTrack方法中用到的名称)。当不同声音库ID对应的音频有相同名称,则每次播放时游戏会从中随机选取一个。
- “声音库”指示音频来自Content/XACT/Wave Bank.xwb还是来自Content/XACT/Wave Bank(1.4).xwb。每个声音库都有自己的一套声音库ID,但不冲突。
- “声音索引”是该声音在声音库中的位置。其中,十六进制版本与您使用unxwb解压声音库得到的十六进制代码相匹配。
- “描述”是本维基手动添加的。
另请参阅早期电子表格以获得更详细的描述。(不要从电子表格中粘贴文本到本页面,因为没有许可证!)
脚步声
name | wavebank | soundbank index | description | |
---|---|---|---|---|
decimal | hexadecimal | |||
Cowboy_Footstep | Wavebank | 269 | 0000010d | 主要用于宠物的脚步声,草原之王小游戏,和各种菜单内的悬停音效(包括标题界面按钮)。 |
grassyStep | Wavebank | 22 | 00000016 | 主要用于玩家在草地上的脚步声,向筒仓中添加干草的声音,更换帽子或发型的声音,或在玛妮#6心时间中搜索灌木丛的声音。 |
sandyStep | Wavebank | 16 | 00000010 | 一种安静、窸窸窣窣的声音。当给农夫穿上新衣服时会播放这个声音。 |
snowyStep | Wavebank | 340 | 00000154 | |
stoneStep | Wavebank | 23 | 00000017 | 当玩家选择一个物品栏位或将物品放入他们的背包中时播放。 |
thudStep | Wavebank | 24 | 00000018 | |
woodyStep | Wavebank | 29 | 0000001d |
音乐
name | wavebank | soundbank index | description | |
---|---|---|---|---|
decimal | hexadecimal | |||
50s | Wavebank | 45 | 0000002d | |
AbigailFlute | Wavebank | 279 | 00000117 | |
AbigailFluteDuet | Wavebank | 280 | 00000118 | |
aerobics | Wavebank | 55 | 00000037 | |
archaeo | Wavebank | 0 | 00000000 | |
bigDrums | Wavebank | 172 | 000000ac | |
breezy | Wavebank | 281 | 00000119 | |
caldera | Wavebank | 383 | 0000017f | |
Cavern | Wavebank | 65 | 00000041 | |
christmasTheme | Wavebank | 305 | 00000131 | |
Cloth | Wavebank | 67 | 00000043 | |
CloudCountry | Wavebank | 190 | 000000be | |
clubloop | Wavebank | 102 | 00000066 | |
cowboy_boss | Wavebank | 267 | 0000010b | |
cowboy_outlawsong | Wavebank | 277 | 00000115 | |
Cowboy_OVERWORLD | Wavebank | 261 | 00000105 | |
Cowboy_singing | Wavebank | 262 | 00000106 | |
Cowboy_undead | Wavebank | 270 | 0000010e | |
crane_game | Wavebank(1.4) | 12 | 0000000c | |
crane_game_fast | Wavebank(1.4) | 13 | 0000000d | |
Crystal Bells | Wavebank | 64 | 00000040 | |
Cyclops | Wavebank | 124 | 0000007c | |
desolate | Wavebank | 40 | 00000028 | |
distantBanjo | Wavebank | 347 | 0000015b | |
EarthMine | Wavebank | 64 | 00000040 | |
EarthMine | Wavebank | 65 | 00000041 | |
EarthMine | Wavebank | 66 | 00000042 | |
echos | Wavebank | 49 | 00000031 | |
elliottPiano | Wavebank | 295 | 00000127 | |
EmilyDance | Wavebank | 357 | 00000165 | |
EmilyDream | Wavebank | 358 | 00000166 | |
EmilyTheme | Wavebank | 359 | 00000167 | |
end_credits | Wavebank | 403 | 00000193 | |
event1 | Wavebank | 299 | 0000012b | |
event2 | Wavebank | 302 | 0000012e | |
fall1 | Wavebank | 121 | 00000079 | |
fall2 | Wavebank | 119 | 00000077 | |
fall3 | Wavebank | 120 | 00000078 | |
fallFest | Wavebank | 304 | 00000130 | |
fieldofficeTentMusic | Wavebank | 375 | 00000177 | |
FlowerDance | Wavebank | 301 | 0000012d | |
FrogCave | Wavebank | 387 | 00000183 | |
FrostMine | Wavebank | 67 | 00000043 | |
FrostMine | Wavebank | 68 | 00000044 | |
FrostMine | Wavebank | 69 | 00000045 | |
Ghost Synth | Wavebank | 119 | 00000077 | |
grandpas_theme | Wavebank | 336 | 00000150 | |
gusviolin | Wavebank | 297 | 00000129 | |
harveys_theme_jazz | Wavebank(1.4) | 4 | 00000004 | |
heavy | Wavebank | 51 | 00000033 | |
honkytonky | Wavebank | 52 | 00000034 | |
Icicles | Wavebank | 68 | 00000044 | |
IslandMusic | Wavebank | 374 | 00000176 | |
jaunty | Wavebank | 41 | 00000029 | |
junimoKart | Wavebank(1.4) | 20 | 00000014 | |
junimoKart_ghostMusic | Wavebank(1.4) | 0 | 00000000 | |
junimoKart_mushroomMusic | Wavebank(1.4) | 21 | 00000015 | |
junimoKart_slimeMusic | Wavebank(1.4) | 22 | 00000016 | |
junimoKart_whaleMusic | Wavebank(1.4) | 1 | 00000001 | |
junimoStarSong | Wavebank | 308 | 00000134 | |
kindadumbautumn | Wavebank | 282 | 0000011a | |
LavaMine | Wavebank | 72 | 00000048 | |
LavaMine | Wavebank | 73 | 00000049 | |
LavaMine | Wavebank | 198 | 000000c6 | |
LavaMine | Wavebank | 215 | 000000d7 | |
libraryTheme | Wavebank | 341 | 00000155 | |
MainTheme | Wavebank | 335 | 0000014f | |
Majestic | Wavebank | 121 | 00000079 | |
MarlonsTheme | Wavebank | 349 | 0000015d | |
marnieShop | Wavebank | 180 | 000000b4 | |
mermaidSong | Wavebank | 362 | 0000016a | |
moonlightJellies | Wavebank | 303 | 0000012f | |
movie_classic | Wavebank(1.4) | 7 | 00000007 | |
movie_nature | Wavebank(1.4) | 8 | 00000008 | |
movie_wumbus | Wavebank(1.4) | 9 | 00000009 | |
movieTheater | Wavebank(1.4) | 10 | 0000000a | |
movieTheaterAfter | Wavebank(1.4) | 11 | 0000000b | |
musicboxsong | Wavebank | 44 | 0000002c | |
Near The Planet Core | Wavebank | 72 | 00000048 | |
New Snow | Wavebank | 126 | 0000007e | |
night_market | Wavebank | 364 | 0000016c | |
Of Dwarves | Wavebank | 73 | 00000049 | |
Orange | Wavebank | 122 | 0000007a | |
Overcast | Wavebank | 215 | 000000d7 | |
Pink Petals | Wavebank | 93 | 0000005d | |
PIRATE_THEME | Wavebank | 390 | 00000186 | |
PIRATE_THEME(muffled) | Wavebank | 390 | 00000186 | |
playful | Wavebank | 278 | 00000116 | |
Plums | Wavebank | 120 | 00000078 | |
poppy | Wavebank | 53 | 00000035 | |
ragtime | Wavebank | 46 | 0000002e | |
sad_kid | Wavebank | 389 | 00000185 | |
sadpiano | Wavebank | 47 | 0000002f | |
Saloon1 | Wavebank | 350 | 0000015e | |
sam_acoustic1 | Wavebank(1.4) | 2 | 00000002 | |
sam_acoustic2 | Wavebank(1.4) | 3 | 00000003 | |
sampractice | Wavebank | 50 | 00000032 | |
sappypiano | Wavebank | 43 | 0000002b | |
Secret Gnomes | Wavebank | 66 | 00000042 | |
SettlingIn | Wavebank | 192 | 000000c0 | |
shaneTheme | Wavebank | 361 | 00000169 | |
shimmeringbastion | Wavebank | 54 | 00000036 | |
spaceMusic | Wavebank | 285 | 0000011d | |
spirits_eve | Wavebank | 334 | 0000014e | |
spring1 | Wavebank | 93 | 0000005d | |
spring2 | Wavebank | 91 | 0000005b | |
spring3 | Wavebank | 92 | 0000005c | |
springsongs | Wavebank | 91 | 0000005b | |
springsongs | Wavebank | 92 | 0000005c | |
springsongs | Wavebank | 93 | 0000005d | |
springtown | Wavebank | 94 | 0000005e | |
Stadium_ambient | Wavebank | 356 | 00000164 | |
starshoot | Wavebank | 42 | 0000002a | |
submarine_song | Wavebank | 366 | 0000016e | |
summer1 | Wavebank | 122 | 0000007a | |
summer2 | Wavebank | 123 | 0000007b | |
summer3 | Wavebank | 115 | 00000073 | |
SunRoom | Wavebank(1.4) | 17 | 00000011 | |
sweet | Wavebank | 144 | 00000090 | |
tickTock | Wavebank | 300 | 0000012c | |
tinymusicbox | Wavebank | 296 | 00000128 | |
title_night | Wavebank | 127 | 0000007f | |
tribal | Wavebank | 198 | 000000c6 | |
Tropical Jam | Wavebank | 115 | 00000073 | |
VolcanoMines | Wavebank | 382 | 0000017e | |
VolcanoMines | Wavebank | 384 | 00000180 | |
VolcanoMines1 | Wavebank | 382 | 0000017e | |
VolcanoMines2 | Wavebank | 384 | 00000180 | |
wavy | Wavebank | 95 | 0000005f | |
wedding | Wavebank | 104 | 00000068 | |
winter1 | Wavebank | 126 | 0000007e | |
winter2 | Wavebank | 124 | 0000007c | |
winter3 | Wavebank | 125 | 0000007d | |
WizardSong | Wavebank | 321 | 00000141 | |
woodsTheme | Wavebank | 216 | 000000d8 | |
XOR | Wavebank | 69 | 00000045 |
音乐(背景音)
name | wavebank | soundbank index | description | |
---|---|---|---|---|
decimal | hexadecimal | |||
babblingBrook | Wavebank | 343 | 00000157 | |
bugLevelLoop | Wavebank | 169 | 000000a9 | |
communityCenter | Wavebank | 307 | 00000133 | |
cracklingFire | Wavebank | 342 | 00000156 | |
darkCaveLoop | Wavebank | 168 | 000000a8 | |
fall_day_ambient | Wavebank | 338 | 00000152 | |
Frost_Ambient | Wavebank | 200 | 000000c8 | |
heavyEngine | Wavebank | 344 | 00000158 | |
Hospital_Ambient | Wavebank | 283 | 0000011b | |
jojaOfficeSoundscape | Wavebank | 337 | 00000151 | |
jungle_ambience | Wavebank | 371 | 00000173 | |
Lava_Ambient | Wavebank | 201 | 000000c9 | |
movieScreenAmbience | Wavebank(1.4) | 6 | 00000006 | |
nightTime | Wavebank | 224 | 000000e0 | |
ocean | Wavebank | 175 | 000000af | |
pool_ambient | Wavebank | 288 | 00000120 | |
rain | Wavebank | 116 | 00000074 | |
roadnoise | Wavebank | 189 | 000000bd | |
spring_day_ambient | Wavebank | 179 | 000000b3 | |
spring_night_ambient | Wavebank | 345 | 00000159 | |
summer_day_ambient | Wavebank | 339 | 00000153 | |
tropical_island_day_ambient | Wavebank | 376 | 00000178 | |
Upper_Ambient | Wavebank | 199 | 000000c7 | |
Volcano_Ambient | Wavebank | 377 | 00000179 | |
wind | Wavebank | 85 | 00000055 | |
winter_day_ambient | Wavebank | 354 | 00000162 |
音效
name | wavebank | soundbank index | description | |
---|---|---|---|---|
decimal | hexadecimal | |||
achievement | Wavebank | 103 | 00000067 | |
axchop | Wavebank | 141 | 0000008d | |
axe | Wavebank | 1 | 00000001 | |
backpackIN | Wavebank | 133 | 00000085 | |
barrelBreak | Wavebank | 310 | 00000136 | |
batFlap | Wavebank | 170 | 000000aa | |
batScreech | Wavebank | 171 | 000000ab | |
bigDeSelect | Wavebank | 2 | 00000002 | |
bigSelect | Wavebank | 3 | 00000003 | |
bob | Wavebank | 30 | 0000001e | |
boop | Wavebank | 98 | 00000062 | |
boop | Wavebank | 99 | 00000063 | |
boop | Wavebank | 100 | 00000064 | |
boop | Wavebank | 101 | 00000065 | |
boulderBreak | Wavebank | 238 | 000000ee | |
boulderCrack | Wavebank | 4 | 00000004 | |
breakingGlass | Wavebank | 284 | 0000011c | |
breathin | Wavebank | 84 | 00000054 | |
breathout | Wavebank | 83 | 00000053 | |
bubbles | Wavebank | 235 | 000000eb | |
bubbles | Wavebank | 236 | 000000ec | |
busDoorOpen | Wavebank | 191 | 000000bf | |
busDriveOff | Wavebank | 309 | 00000135 | |
button1 | Wavebank | 250 | 000000fa | 一种高音调的“咔嗒-咔嗒”声。当浮标被系在钓竿上时播放。 |
cacklingWitch | Wavebank | 323 | 00000143 | |
camel | Wavebank(1.4) | 23 | 00000017 | |
cameraNoise | Wavebank | 292 | 00000124 | |
cancel | Wavebank | 353 | 00000161 | |
cast | Wavebank | 246 | 000000f6 | |
cat | Wavebank | 332 | 0000014c | |
cat | Wavebank | 333 | 0000014d | |
cavedrip | Wavebank | 129 | 00000081 | 一种潮湿的“扑通”声。用作矿井和下水道中的随机背景噪音,以及火山地牢入口管道的滴水声。 |
clam_tone | Wavebank | 363 | 0000016b | |
clank | Wavebank | 173 | 000000ad | |
clank | Wavebank | 203 | 000000cb | |
clank | Wavebank | 203 | 000000cb | |
clank | Wavebank | 204 | 000000cc | |
clank | Wavebank | 205 | 000000cd | |
clank | Wavebank | 205 | 000000cd | |
clubhit | Wavebank | 159 | 0000009f | |
clubSmash | Wavebank | 174 | 000000ae | |
clubswipe | Wavebank | 160 | 000000a0 | |
cluck | Wavebank | 31 | 0000001f | |
cluck | Wavebank | 32 | 00000020 | |
cluck | Wavebank | 33 | 00000021 | |
coin | Wavebank | 5 | 00000005 | |
coldSpell | Wavebank | 197 | 000000c5 | |
cow | Wavebank | 80 | 00000050 | |
cow | Wavebank | 81 | 00000051 | |
cow | Wavebank | 82 | 00000052 | |
cowboy_dead | Wavebank | 268 | 0000010c | |
cowboy_explosion | Wavebank | 276 | 00000114 | |
cowboy_gopher | Wavebank | 275 | 00000113 | |
cowboy_gunload | Wavebank | 272 | 00000110 | |
Cowboy_gunshot | Wavebank | 266 | 0000010a | 一种短促而空洞的“嗒”声。用于表示啄木鸟的啄木声、草原之王大冒险的枪声、飞镖的撞击声、赌场的老虎机声和许多游戏内菜单的悬停声。 |
Cowboy_monsterDie | Wavebank | 264 | 00000108 | |
Cowboy_monsterDie | Wavebank | 265 | 00000109 | |
cowboy_monsterhit | Wavebank | 274 | 00000112 | |
cowboy_powerup | Wavebank | 271 | 0000010f | |
Cowboy_Secret | Wavebank | 263 | 00000107 | |
crafting | Wavebank | 36 | 00000024 | |
crane | Wavebank(1.4) | 14 | 0000000e | |
crickets | Wavebank | 117 | 00000075 | |
cricketsAmbient | Wavebank | 346 | 0000015a | |
crit | Wavebank | 352 | 00000160 | |
croak | Wavebank | 138 | 0000008a | |
crow | Wavebank | 324 | 00000144 | |
crystal | Wavebank | 143 | 0000008f | 一种持续几秒的高音“叮!”声。用于矿井电梯的铃声、岛屿水晶谜题、<角色>的对话、唱歌的石头(随机音调)以及矿井水晶被击碎时的声音。 |
cut | Wavebank | 6 | 00000006 | |
daggerswipe | Wavebank | 163 | 000000a3 | |
death | Wavebank | 70 | 00000046 | |
debuffHit | Wavebank | 151 | 00000097 | |
debuffSpell | Wavebank | 152 | 00000098 | |
detector | Wavebank | 37 | 00000025 | |
dialogueCharacter | Wavebank | 7 | 00000007 | |
dialogueCharacterClose | Wavebank | 8 | 00000008 | |
dirtyHit | Wavebank | 243 | 000000f3 | |
dirtyHit | Wavebank | 244 | 000000f4 | |
discoverMineral | Wavebank | 208 | 000000d0 | |
distantTrain | Wavebank | 220 | 000000dc | |
distantTrain | Wavebank | 221 | 000000dd | |
dog_bark | Wavebank | 331 | 0000014b | |
dog_pant | Wavebank | 330 | 0000014a | |
dogs | Wavebank | 228 | 000000e4 | |
dogWhining | Wavebank | 316 | 0000013c | |
doorClose | Wavebank | 9 | 00000009 | |
doorCreak | Wavebank | 319 | 0000013f | |
doorCreakReverse | Wavebank | 322 | 00000142 | |
doorOpen | Wavebank | 320 | 00000140 | |
dropItemInWater | Wavebank | 10 | 0000000a | |
drumkit0 | Wavebank | 110 | 0000006e | |
drumkit1 | Wavebank | 111 | 0000006f | |
drumkit2 | Wavebank | 108 | 0000006c | |
drumkit3 | Wavebank | 107 | 0000006b | |
drumkit4 | Wavebank | 109 | 0000006d | |
drumkit5 | Wavebank | 106 | 0000006a | |
drumkit6 | Wavebank | 105 | 00000069 | 设置菜单的复选框被点击时播放。 |
Duck | Wavebank | 231 | 000000e7 | |
Duggy | Wavebank | 60 | 0000003c | |
dustMeep | Wavebank | 186 | 000000ba | |
DwarvishSentry | Wavebank | 386 | 00000182 | |
dwoop | Wavebank | 34 | 00000022 | |
dwop | Wavebank | 234 | 000000ea | 一种音调向上变化的声音。当用户点击库存中的物品以将其举起并自由拖动时、当垃圾清理熊将物品扔到空中时、当从钓竿上取下浮标时等,都会播放这个声音。 |
eat | Wavebank | 25 | 00000019 | |
explosion | Wavebank | 35 | 00000023 | |
fallDown | Wavebank | 318 | 0000013e | |
fastReel | Wavebank | 248 | 000000f8 | |
fireball | Wavebank | 71 | 00000047 | |
fishBite | Wavebank | 26 | 0000001a | |
fishBite_alternate_0 | Wavebank | 398 | 0000018e | |
fishBite_alternate_1 | Wavebank | 397 | 0000018d | |
fishBite_alternate_2 | Wavebank | 396 | 0000018c | |
fishEscape | Wavebank | 253 | 000000fd | |
FishHit | Wavebank | 251 | 000000fb | |
fishingRodBend | Wavebank | 254 | 000000fe | |
fishingRodBend | Wavebank | 255 | 000000ff | |
fishingRodBend | Wavebank | 256 | 00000100 | |
fishSlap | Wavebank | 260 | 00000104 | |
flameSpell | Wavebank | 150 | 00000096 | |
flameSpellHit | Wavebank | 149 | 00000095 | |
flute | Wavebank | 112 | 00000070 | |
flybuzzing | Wavebank | 164 | 000000a4 | |
frozen | Wavebank | 394 | 0000018a | |
furnace | Wavebank | 38 | 00000026 | |
fuse | Wavebank | 48 | 00000030 | |
getNewSpecialItem | Wavebank | 223 | 000000df | |
ghost | Wavebank | 11 | 0000000b | |
give_gift | Wavebank | 348 | 0000015c | |
glug | Wavebank | 325 | 00000145 | |
goat | Wavebank | 78 | 0000004e | |
goat | Wavebank | 79 | 0000004f | |
goldenWalnut | Wavebank | 372 | 00000174 | |
gorilla_intro | Wavebank | 388 | 00000184 | |
grunt | Wavebank | 12 | 0000000c | |
gulp | Wavebank | 239 | 000000ef | |
gulp | Wavebank | 240 | 000000f0 | |
hammer | Wavebank | 134 | 00000086 | |
harvest | Wavebank | 326 | 00000146 | |
healSound | Wavebank | 196 | 000000c4 | |
hitEnemy | Wavebank | 56 | 00000038 | |
hoeHit | Wavebank | 13 | 0000000d | |
horse_flute | Wavebank | 395 | 0000018b | |
horse_flute | Wavebank | 401 | 00000191 | |
horse_flute | Wavebank | 402 | 00000192 | |
jingle1 | Wavebank | 252 | 000000fc | 一种高音调的“叮”声。在钓到鱼以及完成日志或鱼塘任务时使用。 |
junimoKart_coin | Wavebank(1.4) | 16 | 00000010 | |
junimoMeep1 | Wavebank | 306 | 00000132 | |
keyboardTyping | Wavebank | 293 | 00000125 | |
killAnimal | Wavebank | 233 | 000000e9 | |
leafrustle | Wavebank | 142 | 0000008e | |
magma_sprite_die | Wavebank | 380 | 0000017c | |
magma_sprite_hit | Wavebank | 379 | 0000017b | |
magma_sprite_spot | Wavebank | 381 | 0000017d | |
Meteorite | Wavebank | 225 | 000000e1 | |
Milking | Wavebank | 230 | 000000e6 | |
minecartLoop | Wavebank | 188 | 000000bc | |
miniharp_note | Wavebank(1.4) | 5 | 00000005 | |
money | Wavebank | 61 | 0000003d | |
moneyDial | Wavebank | 237 | 000000ed | 硬币掉落的高调声音。在新的一天开始时,前一天出货的金钱被加到玩家的农场账户上时,这个声音会反复播放。 |
monkey1 | Wavebank | 385 | 00000181 | |
monsterdead | Wavebank | 158 | 0000009e | |
mouseClick | Wavebank | 294 | 00000126 | |
newArtifact | Wavebank | 211 | 000000d3 | 一种低音调的“叮”声。当UI消息(如技能精通等级提升)出现、物品被捐赠给收集包或博物馆、夜市潜水艇到达海底、在铁匠铺打破含有普通物品的晶球,以及游戏中的其他菜单出现时,都会播放这个声音。 |
newRecipe | Wavebank | 214 | 000000d6 | |
newRecord | Wavebank | 213 | 000000d5 | |
objectiveComplete | Wavebank | 132 | 00000084 | |
openBox | Wavebank | 14 | 0000000e | |
openChest | Wavebank | 161 | 000000a1 | |
Ostrich | Wavebank | 367 | 0000016f | |
ow | Wavebank | 63 | 0000003f | |
owl | Wavebank | 227 | 000000e3 | |
parrot | Wavebank | 360 | 00000168 | |
parrot_squawk | Wavebank | 373 | 00000175 | |
parry | Wavebank | 173 | 000000ad | |
phone | Wavebank | 113 | 00000071 | |
Pickup_Coin15 | Wavebank | 273 | 00000111 | |
pickUpItem | Wavebank | 15 | 0000000f | |
pig | Wavebank | 130 | 00000082 | |
pig | Wavebank | 131 | 00000083 | |
potterySmash | Wavebank | 147 | 00000093 | |
powerup | Wavebank | 39 | 00000027 | |
pullItemFromWater | Wavebank | 28 | 0000001c | |
purchase | Wavebank | 145 | 00000091 | |
purchase | Wavebank | 146 | 00000092 | |
purchase | Wavebank | 241 | 000000f1 | |
purchaseClick | Wavebank | 146 | 00000092 | |
purchaseRepeat | Wavebank | 241 | 000000f1 | |
qi_shop | Wavebank | 399 | 0000018f | |
qi_shop_purchase | Wavebank | 400 | 00000190 | |
questcomplete | Wavebank | 128 | 00000080 | |
quickSlosh | Wavebank | 290 | 00000122 | |
quickSlosh | Wavebank | 291 | 00000123 | |
rabbit | Wavebank | 74 | 0000004a | |
rainsound | Wavebank | 135 | 00000087 | |
rainsound | Wavebank | 136 | 00000088 | |
rainsound | Wavebank | 137 | 00000089 | |
reward | Wavebank | 212 | 000000d4 | |
robotBLASTOFF | Wavebank | 287 | 0000011f | |
robotSoundEffects | Wavebank | 286 | 0000011e | |
rockGolemDie | Wavebank | 166 | 000000a6 | |
rockGolemHit | Wavebank | 167 | 000000a7 | |
rockGolemSpawn | Wavebank | 165 | 000000a5 | |
rooster | Wavebank | 329 | 00000149 | |
scissors | Wavebank | 229 | 000000e5 | |
seagulls | Wavebank | 176 | 000000b0 | |
seagulls | Wavebank | 177 | 000000b1 | |
seagulls | Wavebank | 178 | 000000b2 | |
secret1 | Wavebank | 218 | 000000da | |
seeds | Wavebank | 17 | 00000011 | |
select | Wavebank | 148 | 00000094 | 一种高音调且逐渐升高的空洞“噗嗬!”声。用作许多菜单中的点击/选择声音(例如,在标题屏幕上点击按钮)。 |
sell | Wavebank | 242 | 000000f2 | |
serpentDie | Wavebank | 315 | 0000013b | |
serpentHit | Wavebank | 314 | 0000013a | |
sewing_loop | Wavebank(1.4) | 15 | 0000000f | |
shadowDie | Wavebank | 194 | 000000c2 | |
shadowHit | Wavebank | 195 | 000000c3 | |
shadowpeep | Wavebank | 18 | 00000012 | |
sheep | Wavebank | 232 | 000000e8 | |
shiny4 | Wavebank | 19 | 00000013 | |
Ship | Wavebank | 96 | 00000060 | |
Ship | Wavebank | 97 | 00000061 | |
shwip | Wavebank | 317 | 0000013d | |
SinWave | Wavebank | 245 | 000000f5 | |
sipTea | Wavebank | 193 | 000000c1 | |
skeletonDie | Wavebank | 183 | 000000b7 | |
skeletonHit | Wavebank | 184 | 000000b8 | |
skeletonStep | Wavebank | 182 | 000000b6 | |
slime | Wavebank | 57 | 00000039 | |
slimedead | Wavebank | 59 | 0000003b | |
slimedead | Wavebank | 156 | 0000009c | |
slimedead | Wavebank | 157 | 0000009d | |
slimeHit | Wavebank | 185 | 000000b9 | |
slingshot | Wavebank | 207 | 000000cf | |
slosh | Wavebank | 289 | 00000121 | |
slosh | Wavebank | 290 | 00000122 | |
slosh | Wavebank | 291 | 00000123 | |
slowReel | Wavebank | 247 | 000000f7 | |
smallSelect | Wavebank | 20 | 00000014 | |
SpringBirds | Wavebank | 86 | 00000056 | |
SpringBirds | Wavebank | 87 | 00000057 | |
SpringBirds | Wavebank | 88 | 00000058 | |
SpringBirds | Wavebank | 89 | 00000059 | |
SpringBirds | Wavebank | 90 | 0000005a | |
squid_bubble | Wavebank | 392 | 00000188 | |
squid_hit | Wavebank | 393 | 00000189 | |
squid_move | Wavebank | 391 | 00000187 | |
Stadium_cheer | Wavebank | 355 | 00000163 | |
stairsdown | Wavebank | 313 | 00000139 | |
stardrop | Wavebank | 351 | 0000015f | |
steam | Wavebank | 378 | 0000017a | |
stoneCrack | Wavebank | 75 | 0000004b | |
stoneCrack | Wavebank | 76 | 0000004c | |
stumpCrack | Wavebank | 217 | 000000d9 | |
submarine_landing | Wavebank | 365 | 0000016d | |
swordswipe | Wavebank | 58 | 0000003a | |
swordswipe | Wavebank | 162 | 000000a2 | |
telephone_buttonPush | Wavebank | 369 | 00000171 | |
telephone_dialtone | Wavebank | 370 | 00000172 | |
telephone_ringingInEar | Wavebank | 368 | 00000170 | |
throw | Wavebank | 187 | 000000bb | |
throwDownITem | Wavebank | 21 | 00000015 | |
thunder | Wavebank | 114 | 00000072 | |
thunder_small | Wavebank | 327 | 00000147 | |
thunder_small | Wavebank | 328 | 00000148 | |
tinyWhip | Wavebank | 249 | 000000f9 | |
toolCharge | Wavebank | 62 | 0000003e | |
toolSwap | Wavebank | 27 | 0000001b | |
toyPiano | Wavebank | 181 | 000000b5 | |
trainLoop | Wavebank | 222 | 000000de | |
trainWhistle | Wavebank | 219 | 000000db | |
trashbear | Wavebank(1.4) | 25 | 00000019 | |
trashbear_flute | Wavebank(1.4) | 24 | 00000018 | |
trashcan | Wavebank | 209 | 000000d1 | |
trashcanlid | Wavebank | 210 | 000000d2 | |
treecrack | Wavebank | 140 | 0000008c | |
treethud | Wavebank | 139 | 0000008b | |
UFO | Wavebank | 226 | 000000e2 | |
wand | Wavebank | 118 | 00000076 | |
warrior | Wavebank | 206 | 000000ce | |
wateringCan | Wavebank | 153 | 00000099 | |
wateringCan | Wavebank | 154 | 0000009a | |
wateringCan | Wavebank | 155 | 0000009b | |
waterSlosh | Wavebank | 257 | 00000101 | |
waterSlosh | Wavebank | 258 | 00000102 | |
waterSlosh | Wavebank | 259 | 00000103 | |
whistle | Wavebank | 298 | 0000012a | |
woodchipper | Wavebank(1.4) | 18 | 00000012 | |
woodchipper_occasional | Wavebank(1.4) | 19 | 00000013 | |
woodWhack | Wavebank | 311 | 00000137 | |
woodWhack | Wavebank | 312 | 00000138 | |
woodyHit | Wavebank | 77 | 0000004d | |
yoba | Wavebank | 202 | 000000ca |
在C#中管理音频
播放音效
游戏主要通过Game1.sounds字段处理音效。有诸如PlayLocal, PlayAll, GetVolumeForDistance的低级方法。
然而,您应尽量避免直接调用Game1.sounds。游戏中提供了播放音效的四个主要方法:
方法 | 如何使用 |
---|---|
Game1.playSound | 仅对当前玩家播放声音。在多人游戏中不会同步。不受地点或距离影响。主要用于UI和菜单声音。
例如: // for UI elements (e.g. crafting an item)
Game1.playSound("crafting");
|
GameLocation.localSound GameLocation.playSound |
若在相应地点,则只对当前玩家播放(localSound)或对所有玩家播放(playSound)。
可选参数为
例如: // play sound for the current player if they're anywhere on the farm
Game1.getFarm().localSound("doorCreak");
// play sound for the current player if they're on the farm near the mailbox (fading with distance)
Farm farm = Game1.getFarm();
farm.localSound("doorCreak", farm.GetMainMailboxPosition());
// play sound for all players on the farm near the mailbox (fading with distance), with a -200 pitch shift
Farm farm = Game1.getFarm();
farm.playSound("doorCreak", farm.GetMainMailboxPosition(), 1000);
|
DelayedAction.playSoundAfterDelay | 在延迟指定毫秒后,为当前玩家或所有玩家播放声音。您可以选择性地指定位置、地块位置和音高(这与GameLocation方法的作用相同)。您可以反复调用此方法以播放多个声音(例如,播放具有不同延迟的一系列声音)。
例如: // play sound for the current player after 1.5 seconds, no matter where they are
DelayedAction.playSoundAfterDelay("thunder_small", 1500);
// play sound for all players on the farm after 1.5 seconds, fading with distance from the mailbox
Farm farm = Game1.getFarm();
DelayedAction.playSoundAfterDelay("doorCreak", farm, farm.GetMainMailboxPosition());
// play sound for the current player only if they'rte on the farm after 1.5 seconds, fading with distance from the mailbox
Farm farm = Game1.getFarm();
DelayedAction.playSoundAfterDelay("doorCreak", farm, farm.GetMainMailboxPosition(), local: true);
|
添加自定义音频
TODO: 星露谷物语1.6中自定义音频的更新。
游戏音频分解为以下组件:
- SoundEffect(声音效果)是存储声音音频本身的对象。
- Cue(声音提示)是存储声音名称、SoundEffect 以及声音所具有的其他任何设置或属性的对象。
- Soundbank(声音库)存储了要调用、播放或修改的 Cue。
为添加您的音频到音频库(无论是音乐还是音效),您可以定义一个新的CueDefinition并添加名称:
CueDefinition myCueDefinition = new CueDefinition();
// Adding the name for the cue, which will be
// the name of the audio to play when using sound functions.
myCueDefinition.name = "myNewSound";
您还可以确保您的音频每次只播放一个实例,以防止两个相同的音频片段同时播放而相互覆盖。
// If this sound is played multiple times in quick succession,
// only one sound instance will play at a time.
myCueDefinition.instanceLimit = 1;
myCueDefinition.limitBehavior = CueDefinition.LimitBehavior.ReplaceOldest;
然后,通过以下方法将音频文件添加到Cue中:创建一个新的SoundEffect对象,并从一个新的FileStream中获取音频文件,再将其添加到SoundEffect中。
// Get the audio file and add it to a SoundEffect.
SoundEffect audio;
string filePathCombined = Path.Combine(this.Helper.DirectoryPath, "mySound.wav");
using (var stream = new System.IO.FileStream(filePathCombined, System.IO.FileMode.Open)) {
audio = SoundEffect.FromStream(stream);
}
最后,将SoundEffect添加到Cue中,并将Cue分配给Soundbank进行存储。我们还需要设置一个类别,这个类别决定了使用游戏选项中的哪个音量条(参见类别列表)。由于此处代码示例中的Cue是音效而非音乐,因此需要通过调用getter Game1.audioEngine.GetCategoryIndex()将Cue的类别设置为Sound:
// Setting the sound effect to the new cue.
myCueDefinition.SetSound(audio, Game1.audioEngine.GetCategoryIndex("Sound"), false);
// Adding the cue to the sound bank.
Game1.soundBank.AddCue(myCueDefinition);
若您已添加了音效,则可用音效命令播放之:
Game1.playSound("myNewSound");
若您已添加了新的音乐,则可将音乐ID添加到地图中。
编辑已存在的音乐
TODO: 星露谷物语1.6中自定义音频的更新。
要修改游戏中已存在的Cue,您可以从一个已存在的Cue声明一个新的Cue定义,并调用CueDefinition.SetSound来将您的新音频应用到该Cue上。
如上所述,将Cue的类别设置为对应类别(例如debuffHit应位于Sound类别)。
// Get the cue to manipulate.
var existingCueDef = Game1.soundBank.GetCueDefinition("debuffHit");
// Get the audio file and add it to a new SoundEffect, to replace the old one.
SoundEffect audio;
string filePathCombined = Path.Combine(this.Helper.DirectoryPath, "mySound.wav");
using (var stream = new System.IO.FileStream(filePathCombined, System.IO.FileMode.Open)) {
audio = SoundEffect.FromStream(stream);
}
// Assign the new audio to this cue.
existingCueDef.SetSound(audio, audioEngine.GetCategoryIndex("Sound"), false);