XCOM 2
Ikke nok vurderinger
How To Build Voice Packs Ten Times Faster Using Tags
Av nintendoeats
A complete guide to quickly building a voice pack with UDK tags.
   
Utmerkelse
Favoritt
Favoritter
Fjern som favoritt
How To Build Voice Packs Ten Times Faster Using Tags
Making voice packs sucks. The UDK interface is not built for it, and the version with ModBuddy is even worse. I stopped working on a voice pack set after spending many hours getting SoundWaves because I was sick to death of the interface. I decided it would be more fun to work on developing a faster workflow than to spend a week sorting through a thousand waves for one pack. The method I came up with requires a bit more setup the first time and is a little bit inconvenient at the end, but it’s still a million times better than the standard ways of assigning cues. I’m hoping that somebody who knows more about UDK will be able to modify this to eliminate the last step, but this will do for now.

Technically we are hacking the XCOM mod tools a tiny little bit and the process slightly alters how we have to use the UDK. As such I am going to explain the overall theory, follow it up with a step by step guide and then end with some miscellaneous notes. The guide assumes you have never made a voice pack before, but since the workflow is completely altered that’s really the best way to present this information, even to experienced modders.

If you are making a voice pack using clips from movies or TV, It might behoove you to also look at my guide on removing noise and music from audio files.
Wait, Ten Times Faster?
Yes, and I can prove it mathematically. Assume that you have 500 sound clips, and you are assigning them to 75 cues.

The "standard" system is to open a cue, select each sound clip you want, right click in the cue and "add as random". This requires you to at the very least read the name of every single sound wave for every single clip, and often you will need to listen to the clip as well. Sometimes you will need to listen more than once, other times you will sit mulling over how well the clip fits. I estimate that for each cue you will spend an average of 2.5 seconds per clip (that's actually my low end).

2.5 seconds * 500 clips = 1250 seconds
1250 seconds * 75 cues = 93750 seconds
93750 seconds / 60 = 1562.5 = 26 hours, 2 minutes and 30 seconds

TOTAL: 26 hours, 2 minutes and 30 seconds

That is consistent with my experience: assigning cues took me about 4 days of fairly solid work for my first pack (hence 2.5 seconds was my low estimate). That math also assumes that you never mis-click, deselect your sound clips and have to start a cue over again.

Under the tagging system, we listen to a clip once or twice and then assign cues to it. If you have played XCOM a bunch you don't really need to read the cues; you will figure out very quickly what each clip would be best for. It doesn't take long to have your cues memorized and be able to assign them with very little thought. As such, the specific number of cues doesn't really matter. If there were a 50 more it would take a bit longer, if there were a 50 fewer it would take slightly less long. Adding or subtracting 5 cues is completely irrelevant. I estimate that on average each sound wave takes 15 seconds to assign (that is my high estimate).

15 seconds * 500 clips = 7500 seconds
7500 seconds / 60 = 125 minutes = 2 hours and 5 minutes

You also need to add time for the final cue assignment (my high estimate, 15 seconds per cue):

15 seconds * 75 cues = 1125 seconds
1125 seconds = 18 minutes and 45 seconds

TOTAL: 2 hours, 23 minutes and 45 seconds.

Ok, lets call that 2 and a half hours.

2.5 hours * 10 = 25 hours = Still less than the first method!

Oh, and if you want to significantly change a pack made with the first method then you have to either start again or get into weird methods with collections or some such thing. Even modifying the pack will probably still wind up taking longer than starting from scratch with tags. Modifying a tagged pack only requires you to repeat the 20 minute cue assignment step, no matter what changes you make. If you added 300 sound clips it would still take exactly the same amount of time.

But I don't do the first method! Are tags ten times faster than my way?
I have seen other methods such as maintaining a folder structure outside of the UDK or using a file naming scheme. These have potential to be much quicker than the standard method, but they are organizationally problematic in a variety of ways that would take me a whole other section to illustrate. None of them is as fast or as elegant as tagging. You can set up a tagging system from scratch and have an entire pack assigned before you have finished using any other system I know of. The only exception might be if you are making your own voice files, and therefore know that none of them will be assigned to more than one cue and can therefore put them in cue-specific groups within your package.
Theory
The database system in Unreal assumes that everybody is working from a central server. This makes sense when hundreds of people might be working on a game, but not for a single user. It seems that when they shipped the mod tools Firaxis included a copy of their database. However, UDK still really wants to communicate with a server which explains one of error messages you get when starting it up. The engine is partially crippled by loss of the server and one of the things you lose is tagging. Fortunately there is a local mode that can be enabled which enables tagging again and removes that error message.

The database can only learn about files that it either came with or which where created/moved using the UDK AFTER enabling offline mode. It will also never entirely forget about deleted objects because it never gets the chance to flush its changes to the server. The upshot is:
  • If you open a package containing Columbo.XcomCharacterVO, and the UDK installation you’re using didn’t create that file (or it was created before enabling offline mode), the database won’t have an entry for it and you won’t be able to tag it. This is true even if the database does have an entry for the package itself. If you move that file somewhere else and then back into the original package, the database will create entries for those actions and allow you to tag Columbo.XcomCharacerVO.

  • If you delete Columbo.XComCharacterVO from a package, then the file itself will be deleted but UDK will think it’s still there somewhere. Next time you load the package the reference will still be there and you will never be able to completely remove it from the file list. This is true even if the database didn’t previously know about the file, because it then creates an entry “remember to delete Columbo.XcomCharacterVO when I next talk to the server". It is possible to render a package name unmanagable because it is associated with too many deleted files.
As long as you use the New, Move, Copy and Import commands within UDK everything you do will be added to the database.
Step-By-Step Guide
STEP 0: Use one of the many tutorials to setup ModBuddy and the Unreal Development Kit. It’s a bit of a faff, but at least you only have to do it once.

Enabling Tags
1. In the file explorer, go to the folder “XCOM 2 SDK\XComGame\Config”
2. Make a copy of, and then open, both XcomEditor.ini and XcomEditorUserSettings.ini using notepad
3. In each, find or add the section [GameAssetDatabase]
4. Underneath add the lines "UseJournalUpdateAlarm=False" & "OfflineMode=True"
5. Save and close the files

Setting Up
6. Download this template[hallmonitor.ca] (or use your own) and put it in “XCOM 2 SDK\XComGame\Content”.
7. Open the UDK and click the arrows on both the left and right of the content browser.
8. Find the template package in the packages list.
9. Make sure you are happy with the cues and names. Once this is done you don’t want to have to change them, especially if you have already made a few packs with tags. If you used the template I provided you may want to give each heavy weapon a different cue, but I think everything else there is how the average person would want it.
10. Foreach(cue in template){CreateTag(cue.name); IncludeTagInGroup(“VoiceCues”);}
11. Be sure that your cues and tags are in the same order alphabetically, that makes things much easier.
12. Be happy that this was a one time process.

Starting A New Voice Pack
13. Open your template in the content browser and find the VoiceArchitecture file only. If you are using your own template, you want the one that isn’t where you associate cues.
14. Right click VoiceArchitecture and select “Create A Copy”.
15. Change “Package” to the name of your new voice pack.
16. Check the “References” box.
17. Delete the suffix text that was just created. The suffix is only required when making a copy in the same package and UDK doesn’t detect that you aren’t.
18. Click the binoculars next to the “Class Relocation” box.
19. Select the class Archetype.
20. Set the package to the name of your new voice pack. You need to set this manually for every pack because it remembers what package you sent each class to last time. Steps 18 and 19 you only need to do the first time.
21. Repeat steps 18-20 for the class name SoundCue.
22. Click “OK To All”.
23. Go to the package you just created in the content browser.
24. CTRL+S to Save it.
25. Ensure that VoiceArchitecture is referencing the CueBank that was copied into your new package.
26. Ensure that CueBank is referencing the SoundCues stored in your new package.
27. Make sure that you are happy with your sound file names.
28. Open your new VoicePack package in the content browser.
29. Drag and drop your sound files from the file explorer into the file list of the content browser.
30. Click “OK To All”.

Building Your Voice Pack
31. Open the filter and select “Sound Wave Data” under object type. I advise adding this and “Sound Cues” as favourites.
32. Open the tag browser and filter to just your voice cue tags.
33. Sort your SoundWaves alphabetically.
34. Listen to the first SoundWave.
35. Click the tags for each cue it should occupy. If you change your mind about one that you selected, click it again in the “applied tags” box.
36. Repeat 34 and 35 for every SoundWave.
37. Open and detatch a second content browser (henceforth called Browser2), go to your voice pack and filter to just SoundCues.
38. Line up Browser1 and Browser2 so that you can see both at the same time. Leave filtering open in Browser1. If screen space is limited, close the package and tag lists, we don’t need them.
39. (Browser2) Sort the cues alphabetically.
40. (Browser2) Right click the first SoundCue and select “Edit Using Sound Cue Editor”.
41. (Browser1) Filter to the tag which indicates the first SoundCue.
42. (Browser1) Click one one of the SoundWaves.
43. (Browser1) CTRL+A to select all of the relevant SoundWaves.
44. In the SoundCue editor, right click somewhere to the top right of the speaker and select “Random:*NameOfOneOfTheFiles*”
45. Link up the speaker with the random box that was just created.
46. Close the SoundCue editor.
47. CTRL+S to save the package.
48. foreach(SoundCue in Browser2){RepeatSteps(40 to 47);}

Putting It In ModBuddy
49. In ModBuddy, create a new project and use the voice pack template.
50. In ModBuddy delete the contents of the folder, uh, content.
51. Right click the content folder and click Add→Existing Item
52. Navigate to the .upk of your new voice pack, select it and click OK. That file will be COPIED into the modbuddy folder.
53. Under Config, open XcomContent.ini.
54. Remove the female voice pack reference.
55. Replace the Language/Gender/TemplateName fields to whatever is appropriate for your pack. Make sure that the template name is unique, for example “ColumboVoice_ByAdrian”.
56. Replace “MaleVoice1_Russian.VoiceMaleVoice1_Russian” with “*TheNameOfYourVoicePackPackage*.VoiceArchitecture”. If you used your own template, change VoiceArchitecture to whatever your architecture file name was.
57. CTRL+S to save.
58. Under Localization, open XcomGame.int.
59. Remove the female voice pack reference.
60. Replace “MaleVoice1_RUS” with the template name you used in 55.
57. CTRL+S to save.
58. Right click the file just under “Solution ‘blahblahblah’” and select “Properties”.
59. Set the Mod Name and description. In theory these will appear in Steam, but save your description in a text file as well because this almost never works and you will probably need to manually add it in Steam Workshop. This applies if you update as well.
60. CTRL+S to save.
61. Right click the file from 58 and click “Open Folder in File Explorer”.
62. In the file explorer, replace “ModPreview.jpg” with the icon for your pack. Unlike the description this cannot be changed in the workshop and requires you to update the mod. If later you want to do an update just to change the icon, remember that you have to do step 63 as well. The icon is embedded when you build it.
63. In Modbuddy, go to Build→Build Solution. After doing this your mod will be available in-game.

Putting It On The Internet
64. Go to Tools→Publish Mod.
65. Set the tags you want. At least one of them should be “Voice”.
66. Check the title and description. Hope in vain that the description actually gets published.
67. Click the “Upload” tab.
68. Press the big button.
69. Wait for it to finish.
70. Go to your workshop in Steam and find your new mod.
71. Double check that everything is how you like it.
72. Paste in the mod description because it didn’t publish for some reason.
73. Change visibility → Public.
74. Sit there staring at the comments box waiting for somebody to tell you how good your new mod is!
Miscellaneous Notes
  • Modifying a Voice Pack originally made with tags still has to be done the old way, manually adding single files to cues. If you are adding another hundred SoundWaves, I would copy the empty template SoundCues over the existing ones and do steps 31 – 48 again. If you are only adding a few, it's faster to add the SoundWaves to the correct SoundCues by hand (take a moment to set the tags so that the system is still accurate!). If this were Unity I would write a script to automate the cue assignment process, but I don’t have the first idea of how to do that in Unreal. If you know how to do editor scripts in Unreal, I would really appreciate a hand with this bit.

  • Remember that tags are stored in the database as references to files. The file itself does not store the tags! If you just give somebody else your .upk, the tags won’t be included.

  • If you want to share or back up your database, you can simply drag and drop the data base files. These are:
    XCOM 2 SDK\XComGame\Content\GameAssetDatabase.checkpoint
    XCOM 2 SDK\XComGame\Content\GameAssetDatabase.journal

  • I still haven’t found a way to copy a file to another package and keep its tags intact.

  • Given the above point, you want to avoid renaming your packages. If you do, you will need to follow the section on updating old packages to use tags. If you make SomeVoicePack and want to update it to a version 2 while retaining most of the existing assignments, make a copy of the package in the file explorer and call it SomeVoicePackV1. SomeVoicePack will then be the working V2 file.

  • To hide all the useless deleted object references, right click your package and click “Fully Load”. Then open the filters and selected “loaded”. Anything that isn’t actually there obviously can’t be loaded.

  • Steps 16-20 are important because UDK doesn’t assume that you want to change the cue references if you move everything yourself. If you drop all of the voice template files into another package, the new VoiceArchitecture file will still be referencing the template’s CueBank and the new CueBank will still be referencing the template’s Cues. The same would apply if you wanted to copy a cue and all of the sound files it references. On the plus side, this system lets you create a new voice pack by only selecting one file!

  • Personally, I keep the .upk files for my voice packs in their Mod Buddy folders and open them manually every time I open the UDK. To do this, click the folder at the bottom of the asset list and navigate to your voice pack file. As long the package and files were created correctly you can still tag these things, it doesn’t matter where the package is actually stored. If you want these packages loaded automatically you can leave them in the content folder, but you have to remember to replace the .upk in your ModBuddy folder when you are ready to upload. I mainly do it my way because I can easily backup my whole ModBuddy folder and don't need to worry about what might be in the content folder.
Adding Old Packs To The Database
If you have a voice pack that you have already started and want to be able to tag the audio:
  • Open the UDK and load your package.
  • Select all and only the wave files, right click and select “Create a Copy”.
  • Replace the package name with something new but which you will never need (for example, ThisVoicePackTemp).
  • Click “Ok To All”.
  • Go to your new package and do the reverse (send those files back to the original package).
  • Click yes to the first message asking if you want to replace an existing file, then hold down enter to keep saying yes until it finishes.
  • Save the original package.
  • Save the temporary package.
  • Find the temporary package in the file explorer.
  • Right click the temporary package in the content browser and click “unload”.
  • Delete the temporary package in the file explorer. Although the reference to this package is still in the database, it won’t show up in your content browser next time you start the UDK.

Done!

If you want to create a new package for the tagged pack anyway, you can copy your voice architecture file to a package with the new name and set up references for archetypes, cues and waves. This process for assigning references is described in steps 16-20. Doing this will preserve any already assigned cues.
Converting Pre-existing Voice Packs To A Tagging System
If you have imported a completed voice pack using the instructions above and want to quickly tag the clips, the process is the reverse of adding tagged files to a cue. Right click each cue and select "Make Collection With Referenced Objects". For each of these collections, select all of the wave files and give them the associated tag. You can delete the collections when you are finished.

The package must be located in the mod tools content folder in order for the contents to be added to a collection.
Thank You!
I hope that this guide has proved useful and will save much time. If anything is unclear, you need a hand or you know of a way to improve this process, please don’t hesitate to comment!

Oh yeah, I have voice packs you could look at if you want n' stuff.
11 kommentarer
Ewna Yspos 16. mai 2021 kl. 19.10 
All good. I'll see if I can figure anything out and if so, I'll post what I find. Thanks anyway.
nintendoeats  [skaper] 16. mai 2021 kl. 17.53 
@Ewna Yspos Man...I dunno, it has been 3 years since I did this, and the guide was written for the vanilla SDK. I don't even have the tools installed anymore.

It has been so long that I don't even remember the theory of it enough to suggest where they might have moved this functionality to. Sorry, if you figure out the solution please let me know and I will mention it in the guide.
Ewna Yspos 15. mai 2021 kl. 21.12 
I enabled tags and did the setup as instructed, but I've encountered a problem when attempting to start a new voice pack. I followed all the instructions up to step 18; "Click the binoculars next to the “Class Relocation” box." For me there is no binoculars icon anywhere in the popup box. Maybe I'm just dumb and I've missed something somewhere, but I can't continue and I don't know what I'm supposed to do. Is it a problem with my UDK? User error? I don't know if this guide refers to the original UDK or not, (I'm using the WotC UDK [full content, up-to-date]), but should that make any difference? Any idea what the problem is/how I can fix it?
nintendoeats  [skaper] 14. apr. 2020 kl. 14.41 
@SabaraOne I'd be very curios to see how a hybrid system works. Every now and again I think about doing more voice packs, but to me the fun is cleaning audio clips not waiting for UDK to react.
SabaraOne 14. apr. 2020 kl. 13.42 
I must apologize, it appears the Problem Existed Betweek Keyboard And Chair, I somehow contrived to mistake the file panel for the retractable tag manager.

I've been using Robojumper's script as templated by StupidPupil and it does give somewhat of an advantage over "conventional" voice pack creation, but not by much, certainly not compaired to tagging. As I understand it, (I never used the "conventional" method), it allows for easy creation of custom voice cues (Which as a class maker I can see plenty of uses for), and combines the archetype and a simplified sound bank into a single object. It does not, however, make the sorting of sunds any easier the way tagging does.
nintendoeats  [skaper] 14. apr. 2020 kl. 13.19 
@SabaraOne I can't furnish you with a screenshot with the tag editor open right now, however: On the right side of this screen, you can see a vertical bar with a little arrow in it. Clicking that arrow should expand the tag manager.

https://gtm.steamproxy.vip/ugc/2427879522034712305/8C4C5EF1B9C9F1F4E8FF4CF665D52E2101F1D8FE/

I should mention, you might want to look into Robojumper's voice pack script. It might be more efficient than the system described in this guide. I've never used it, so I'm not sure.
nintendoeats  [skaper] 14. apr. 2020 kl. 11.53 
@SabaraOne Sorry, I didn't see your comment. I will look after work to get you a screenshot.
SabaraOne 12. apr. 2020 kl. 20.10 
I'm really sorry to ask such a n00by question, but I can't for the life of me find the tag manager or how to create tags, and my google-fu is coming up with a bunch of stuff for UE4 which isn't very helpful here. How do I open this and add/edit tags? Did the WotC Editor break something?
nintendoeats  [skaper] 8. apr. 2020 kl. 4.14 
@SabaraOne Fixed, thanks!
SabaraOne 7. apr. 2020 kl. 17.35 
Not sure if you're aware, but the template link in setting up seems to havfe broken. Otherwise great tutorial