Help Needed With Custom Sound Effects

Started by Robobermann, July 16, 2018, 03:15:13 PM

Previous topic - Next topic
July 16, 2018, 03:15:13 PM Last Edit: July 16, 2018, 07:22:22 PM by Robobermann
Hello. I'm new to SWBF2 modding and want to make a sides mod that uses custom sound effects for various weapons. I have found several tutorials for this, and spent many hours trying to get it to work, but the sounds still do not play. I was wondering if there is anybody that knows how to do this and is willing to help.

I have attached a file to show my C:\BF2_ModTools\data_ABC\Sound\worlds\ABC folder.
Inside my effects folder there is a .wav file titled "e11"
Contents of ABC.asfx:

effects\e11.wav    -resample pc 22050


Contents of ABC.req:

ucft
{
    REQN
    {
        "str"
        "align=2048"
        "ABC"
    }
    REQN
    {
        "lvl"
   "ABCgcw"
   "ABCcw"
    }

}

Contents of ABCcw.req:

ucft
{
    REQN
    {
    "bnk"
    "align=2048"
    }

    REQN
    {
    "config"
    }
}

Contents of ABCgcw.req:

ucft
{
    REQN
    {
    "bnk"
    "align=2048"
    "ABC"
    }

    REQN
    {
    "config"
    "Sound_Prop_File_Referenced_Here"
    "ABC"
    "global_world"
    "exp_obj"
    "exp_obj_large"
    "wok_vo"
    "gcw_vo"
    "gcw"

    }
}

Contents of Sound_Prop_File_Referenced_Here.snd:

SoundProperties()
{
    Name("e11");
    Group("weapons");
    Inherit("weapon_template");
    SampleList()
    {
        Sample("e11", 1.0);
    }
}

I have also edited the imp_weap_inf_rifle odf in C:\BF2_ModTools\data_ABC\Sides\imp\odf.
I changed the line with FireSound           = "imp_weap_inf_rifle_fire" to FireSound           = "e11"

Next I hit select all in visual munge and get the following error message:

ERROR[levelpack shell.req]:Input file shell.req does not exist. [continuing]
   1 Errors    0 Warnings

Followed by a bunch of:

soundflmunge.exe : Error : Unable to open file ..\

First I copy the ABC file from C:\Program Files (x86)\Steam\steamapps\common\Star Wars Battlefront II\addon\ and paste it to C:\Program Files (x86)\Steam\steamapps\common\Star Wars Battlefront II\\GameData\addon\

Since I have been editing the imperial side, I take the imp.lvl file from C:\Program Files (x86)\Steam\steamapps\common\Star Wars Battlefront II\addon\ABC\data\_LVL_PC\SIDE

and place it in C:\Program Files (x86)\Steam\steamapps\common\Star Wars Battlefront II\GameData\data\_lvl_pc\side

The final result is that the stormtrooper blaster rifle is silent. Again, any help would be appreciated.

I'm not expert on sound and I'm pretty lucky to have got it to work myself. But I'll say this:

If you're having problems with sound, consider these 2 issues. Firstly, sound munging doesn't work properly on a 64-bit PC without the "fixed" munge files. Are you on a 64-bit computer?

Second, the .wav files need to be in the format  22 kHz, 352 kbps, 16 bit, mono. I think there are exceptions but generally I try to keep my sound files in that format.

@swgaming1015

Thanks for the reply! I am using a 64bit computer, so if you can direct me to the sound munge fix, that would be nice. Also, what do you use to keep .wav files in the appropriate format?

Quote from: swgaming1015 on July 17, 2018, 10:43:32 AM
I'm not expert on sound and I'm pretty lucky to have got it to work myself. But I'll say this:

If you're having problems with sound, consider these 2 issues. Firstly, sound munging doesn't work properly on a 64-bit PC without the "fixed" munge files. Are you on a 64-bit computer?

Second, the .wav files need to be in the format  22 kHz, 352 kbps, 16 bit, mono. I think there are exceptions but generally I try to keep my sound files in that format.

Sounds can also be 44kHz, but TBH there's not much of a difference with most sounds between 44kHz and 22kHz, except the size of the sound.
In Progress:
--Star Wars: Battlefront - Anniversary Edition (formerly Star Wars: Battlefront - Legacy Edition)
--Endor: Imperial Base

On Hold:
--Star Wars Battlefront: Elite Squadron For SWBF1

Quote from: Robobermann on July 17, 2018, 11:47:59 AM
@swgaming1015

Thanks for the reply! I am using a 64bit computer, so if you can direct me to the sound munge fix, that would be nice. Also, what do you use to keep .wav files in the appropriate format?

http://www.gametoast.com/viewtopic.php?f=64&t=30415

https://drive.google.com/file/d/0BxNxXL3z8i1GTWJySEI3QlhMbUk/view

This is a link to the fixed munge files that should enable you to munge sound on a 64-bit.

To make sure my sound is in the right format, I like to take .wav files I know work in other mods. Then, I use an audio program like Audacity to replace the audio within the .wav file. That way, I know the .wav is formatted correctly. I'd recommend downloading some assets from the "downloads" section and taking a .wav out of a sound folder there.

If it still doesn't work, let me know. I haven't actually looked at your .req files yet. I just assumed that the problem was the 64-bit.

Quote from: swgaming1015 on July 17, 2018, 05:18:06 PM
http://www.gametoast.com/viewtopic.php?f=64&t=30415

https://drive.google.com/file/d/0BxNxXL3z8i1GTWJySEI3QlhMbUk/view

This is a link to the fixed munge files that should enable you to munge sound on a 64-bit.

To make sure my sound is in the right format, I like to take .wav files I know work in other mods. Then, I use an audio program like Audacity to replace the audio within the .wav file. That way, I know the .wav is formatted correctly. I'd recommend downloading some assets from the "downloads" section and taking a .wav out of a sound folder there.

If it still doesn't work, let me know. I haven't actually looked at your .req files yet. I just assumed that the problem was the 64-bit.

I have gotten the sound to work correctly on my mod map (hooray!). I would like to get them to work on the vanilla maps as well, so I started with Endor. I pasted the .wav file into endor's effects folder and added the end1gcw.asfx file. Then I added the sound properties code to end1gcw.snd, munged it in C:\BF2_ModTools\data_ABD\_BUILD\Sound, and replaced the end.lvl file in C:\Program Files (x86)\Steam\steamapps\common\Star Wars Battlefront II\GameData\data\_lvl_pc\sound with my munged file. All the sounds play fine except for my new sound. I feel like this should work since it is similar to how it works with the mod map, but it seems I'm missing something.

Quote from: Robobermann on July 17, 2018, 10:05:09 PM
I have gotten the sound to work correctly on my mod map (hooray!). I would like to get them to work on the vanilla maps as well, so I started with Endor. I pasted the .wav file into endor's effects folder and added the end1gcw.asfx file. Then I added the sound properties code to end1gcw.snd, munged it in C:\BF2_ModTools\data_ABD\_BUILD\Sound, and replaced the end.lvl file in C:\Program Files (x86)\Steam\steamapps\common\Star Wars Battlefront II\GameData\data\_lvl_pc\sound with my munged file. All the sounds play fine except for my new sound. I feel like this should work since it is similar to how it works with the mod map, but it seems I'm missing something.

I may be wrong here because I haven't modded sound in a while but isn't it necessary to put "dc" in the Endor LUA file. To be honest, I've never added sound to a vanilla map so I'm not sure what's gone wrong.

Quote from: swgaming1015 on July 18, 2018, 08:12:48 AM
I may be wrong here because I haven't modded sound in a while but isn't it necessary to put "dc" in the Endor LUA file. To be honest, I've never added sound to a vanilla map so I'm not sure what's gone wrong.

I think you are right. I think the problem is that I'm trying to do this in the vanilla GCW game mode. I would try and make mod era's instead like BFX, but I wanted this to be compatible with the AI hero support mod which only works on vanilla.

Huzzah! Thank you to @swgaming1015I, for I have successfully implemented a new sound into a vanilla map! It wasn't in the way I wanted, since I had to add a new era and doesn't have ai heroes, but it's good. I haven't found any tutorials for ai hero support, so maybe someone can explain to me how that works.

A more pressing issue:

I really should have noticed this earlier, but sounds such as lightsabers, explosions, weapon switching, etc. aren't playing in my mod. My guess is that global.lvl isn't being referenced correctly, but I don't know how to do that. Here is my LUA if it helps:

--
-- Copyright (c) 2005 Pandemic Studios, LLC. All rights reserved.
--

ScriptCB_DoFile("setup_teams")
ScriptCB_DoFile("ObjectiveConquest")

   --  Empire Attacking (attacker is always #1)
    local ALL = 2
    local IMP = 1
    --  These variables do not change
    local ATT = 1
    local DEF = 2
   
function ScriptPostLoad()      
   
   
    --This defines the CPs.  These need to happen first
    cp1 = CommandPost:New{name = "cp1"}
    cp2 = CommandPost:New{name = "cp2"}
    cp3 = CommandPost:New{name = "cp3"}
    cp4 = CommandPost:New{name = "cp4"}
   
   
   
    --This sets up the actual objective.  This needs to happen after cp's are defined
    conquest = ObjectiveConquest:New{teamATT = ATT, teamDEF = DEF,
                                     textATT = "game.modes.con",
                                     textDEF = "game.modes.con2",
                                     multiplayerRules = true}
   
    --This adds the CPs to the objective.  This needs to happen after the objective is set up
    conquest:AddCommandPost(cp1)
    conquest:AddCommandPost(cp2)
    conquest:AddCommandPost(cp3)
    conquest:AddCommandPost(cp4)   
   
    conquest:Start()

    EnableSPHeroRules()
   
end


---------------------------------------------------------------------------
-- FUNCTION:    ScriptInit
-- PURPOSE:     This function is only run once
-- INPUT:
-- OUTPUT:
-- NOTES:       The name, 'ScriptInit' is a chosen convention, and each
--              mission script must contain a version of this function, as
--              it is called from C to start the mission.
---------------------------------------------------------------------------

function ScriptInit()
   

    ReadDataFile("ingame.lvl")


    SetMaxFlyHeight(40)
   SetMaxPlayerFlyHeight(40)


   SetMemoryPoolSize ("ClothData",20)
    SetMemoryPoolSize ("Combo",50)              -- should be ~ 2x number of jedi classes
    SetMemoryPoolSize ("Combo::State",650)      -- should be ~12x #Combo
    SetMemoryPoolSize ("Combo::Transition",650) -- should be a bit bigger than #Combo::State
    SetMemoryPoolSize ("Combo::Condition",650)  -- should be a bit bigger than #Combo::State
    SetMemoryPoolSize ("Combo::Attack",550)     -- should be ~8-12x #Combo
    SetMemoryPoolSize ("Combo::DamageSample",6000)  -- should be ~8-12x #Combo::Attack
    SetMemoryPoolSize ("Combo::Deflect",100)     -- should be ~1x #combo 
   
    ReadDataFile("DC:sound\\global.lvl;global")
    ReadDataFile("DC:sound\\abd.lvl;ABDgcw") -- my mod world (you probably already knew that)   
    ReadDataFile("sound\\tat.lvl;tat2gcw")
    ReadDataFile("SIDE\\all.lvl",
                    "all_inf_rifleman",
                    "all_inf_rocketeer",
                    "all_inf_sniper",
                    "all_inf_engineer",
                    "all_inf_officer",
                    "all_inf_wookiee",
                    "all_hero_hansolo_tat")
                   
    ReadDataFile("DC:SIDE\\imp.lvl",
                    "imp_inf_rifleman",
                    "imp_inf_rocketeer",
                    "imp_inf_engineer",
                    "imp_inf_sniper",
                    "imp_inf_officer",
                    "imp_inf_dark_trooper",
                    "imp_hero_bobafett",
                    "imp_fly_destroyer_dome" )

   ReadDataFile("SIDE\\tur.lvl",
                  "tur_bldg_tat_barge",   
                  "tur_bldg_laser")   

   SetupTeams{
      all = {
         team = ALL,
         units = 20,
         reinforcements = 150,
         soldier   = { "all_inf_rifleman",9, 25},
         assault   = { "all_inf_rocketeer",1,4},
         engineer = { "all_inf_engineer",1,4},
         sniper   = { "all_inf_sniper",1,4},
         officer   = { "all_inf_officer",1,4},
         special   = { "all_inf_wookiee",1,4},

      },
      imp = {
         team = IMP,
         units = 20,
         reinforcements = 150,
         soldier   = { "imp_inf_rifleman",9, 25},
         assault   = { "imp_inf_rocketeer",1,4},
         engineer = { "imp_inf_engineer",1,4},
         sniper   = { "imp_inf_sniper",1,4},
         officer   = { "imp_inf_officer",1,4},
         special   = { "imp_inf_dark_trooper",1,4},
      },
   }
   
    SetHeroClass(ALL, "all_hero_hansolo_tat")
    SetHeroClass(IMP, "imp_hero_bobafett")

    --  Level Stats
    ClearWalkers()
    AddWalkerType(0, 0) -- special -> droidekas
    AddWalkerType(1, 0) -- 1x2 (1 pair of legs)
    AddWalkerType(2, 0) -- 2x2 (2 pairs of legs)
    AddWalkerType(3, 0) -- 3x2 (3 pairs of legs)
   
    local weaponCnt = 1024
    SetMemoryPoolSize("Aimer", 75)
    SetMemoryPoolSize("AmmoCounter", weaponCnt)
    SetMemoryPoolSize("BaseHint", 1024)
    SetMemoryPoolSize("EnergyBar", weaponCnt)
   SetMemoryPoolSize("EntityCloth", 32)
   SetMemoryPoolSize("EntityFlyer", 32)
    SetMemoryPoolSize("EntityHover", 32)
    SetMemoryPoolSize("EntityLight", 200)
    SetMemoryPoolSize("EntitySoundStream", 4)
    SetMemoryPoolSize("EntitySoundStatic", 32)
    SetMemoryPoolSize("MountedTurret", 32)
   SetMemoryPoolSize("Navigator", 128)
    SetMemoryPoolSize("Obstacle", 1024)
   SetMemoryPoolSize("PathNode", 1024)
    SetMemoryPoolSize("SoundSpaceRegion", 64)
    SetMemoryPoolSize("TreeGridStack", 1024)
   SetMemoryPoolSize("UnitAgent", 128)
   SetMemoryPoolSize("UnitController", 128)
   SetMemoryPoolSize("Weapon", weaponCnt)

    SetSpawnDelay(10.0, 0.25)
    ReadDataFile("dc:ABD\\ABD.lvl", "ABD_conquest")
    SetDenseEnvironment("false")


    --  Sound Stats
   
    voiceSlow = OpenAudioStream("sound\\global.lvl", "all_unit_vo_slow")
    AudioStreamAppendSegments("sound\\global.lvl", "imp_unit_vo_slow", voiceSlow)
    AudioStreamAppendSegments("sound\\global.lvl", "des_unit_vo_slow", voiceSlow)
    AudioStreamAppendSegments("sound\\global.lvl", "global_vo_slow", voiceSlow)
   
    voiceQuick = OpenAudioStream("sound\\global.lvl",  "all_unit_vo_quick")
    AudioStreamAppendSegments("sound\\global.lvl",  "imp_unit_vo_quick", voiceQuick)   
   
    OpenAudioStream("sound\\global.lvl",  "gcw_music")
    OpenAudioStream("sound\\tat.lvl",  "tat2")
    OpenAudioStream("sound\\tat.lvl",  "tat2")
    -- OpenAudioStream("sound\\global.lvl",  "global_vo_quick")
    -- OpenAudioStream("sound\\global.lvl",  "global_vo_slow")

    SetBleedingVoiceOver(ALL, ALL, "all_off_com_report_us_overwhelmed", 1)
    SetBleedingVoiceOver(ALL, IMP, "all_off_com_report_enemy_losing",   1)
    SetBleedingVoiceOver(IMP, ALL, "imp_off_com_report_enemy_losing",   1)
    SetBleedingVoiceOver(IMP, IMP, "imp_off_com_report_us_overwhelmed", 1)

    SetLowReinforcementsVoiceOver(ALL, ALL, "all_off_defeat_im", .1, 1)
    SetLowReinforcementsVoiceOver(ALL, IMP, "all_off_victory_im", .1, 1)
    SetLowReinforcementsVoiceOver(IMP, IMP, "imp_off_defeat_im", .1, 1)
    SetLowReinforcementsVoiceOver(IMP, ALL, "imp_off_victory_im", .1, 1)

    SetOutOfBoundsVoiceOver(2, "Allleaving")
    SetOutOfBoundsVoiceOver(1, "Impleaving")

    SetAmbientMusic(ALL, 1.0, "all_tat_amb_start",  0,1)
    SetAmbientMusic(ALL, 0.8, "all_tat_amb_middle", 1,1)
    SetAmbientMusic(ALL, 0.2, "all_tat_amb_end",    2,1)
    SetAmbientMusic(IMP, 1.0, "imp_tat_amb_start",  0,1)
    SetAmbientMusic(IMP, 0.8, "imp_tat_amb_middle", 1,1)
    SetAmbientMusic(IMP, 0.2, "imp_tat_amb_end",    2,1)

    SetVictoryMusic(ALL, "all_tat_amb_victory")
    SetDefeatMusic (ALL, "all_tat_amb_defeat")
    SetVictoryMusic(IMP, "imp_tat_amb_victory")
    SetDefeatMusic (IMP, "imp_tat_amb_defeat")

    SetSoundEffect("ScopeDisplayZoomIn",  "binocularzoomin")
    SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")
    --SetSoundEffect("WeaponUnableSelect",  "com_weap_inf_weaponchange_null")
    --SetSoundEffect("WeaponModeUnableSelect",  "com_weap_inf_modechange_null")
    SetSoundEffect("SpawnDisplayUnitChange",       "shell_select_unit")
    SetSoundEffect("SpawnDisplayUnitAccept",       "shell_menu_enter")
    SetSoundEffect("SpawnDisplaySpawnPointChange", "shell_select_change")
    SetSoundEffect("SpawnDisplaySpawnPointAccept", "shell_menu_enter")
    SetSoundEffect("SpawnDisplayBack",             "shell_menu_exit")

    --  Camera Stats
    --Tat2 Mos Eisley
   AddCameraShot(0.974338, -0.222180, 0.035172, 0.008020, -82.664650, 23.668301, 43.955681);
   AddCameraShot(0.390197, -0.089729, -0.893040, -0.205362, 23.563562, 12.914885, -101.465561);
   AddCameraShot(0.169759, 0.002225, -0.985398, 0.012916, 126.972809, 4.039628, -22.020613);
   AddCameraShot(0.677453, -0.041535, 0.733016, 0.044942, 97.517807, 4.039628, 36.853477);
   AddCameraShot(0.866029, -0.156506, 0.467299, 0.084449, 7.685640, 7.130688, -10.895234);
end

Were the sounds playing before you made changes to the sound.lvl? Because normally when you create a new map all the sounds (like switching weapons, lightsabers) should work fine.

July 20, 2018, 02:02:32 PM #10 Last Edit: July 20, 2018, 02:10:40 PM by Robobermann
Quote from: swgaming1015 on July 20, 2018, 09:14:40 AM
Were the sounds playing before you made changes to the sound.lvl? Because normally when you create a new map all the sounds (like switching weapons, lightsabers) should work fine.

Yes. I figured out a fix last night, but I have no clue as to why it works. I copied and pasted everything in C:\BF2_ModTools\data_ABD\Sound\worlds\ABD to C:\BF2_ModTools\data_ABD\Sound\gcw and all the sound plays fine. It seems my troubles with sound are at an end. Sorry to spam you guys with all these questions. I'll be sure to show you guys what I've been doing once I have something to show.