Jump to content
Mattiewagg

[Graduate Thread] Trivia - Matthiaswagg

Recommended Posts

Okay, will do a quick voice implementation tutorial here then. You won't get to practice on anything right now, but figure you might as well learn it. I'll assign you some voice implementation for at least one quest when we begin to get lines, so you get practice.

Ignore the below for now, the tutorial isn't done, I just had to run out so figured I'd save this here.

Voice Implementation Tutorial

Install this and familiarize yourself: http://audacityteam.org/ It's quite easy to use, free, and powerful. You'll mostly be cutting and exporting and such. I recommend mapping Export Selection to E in audacity, for speed.

There are several parts to implementing voice. First, you must place all WAV (16-bit, 44100Hz, Mono WAV) files in the right spot, in the right folder, with the right name. These WAV files are the sound. Then, you must generate all the LIP (lipsync) files. Finally, you must FUZ (compress) all the LIP + WAV files, to conserve file space. The details of the process will change based on how the files are sent, but they should usually stay the same.

Dealing with WAVs

There are a few possible ways you may get lines. Most likely, the lines will be separated into different WAVs for every single line. They may or may not be named as the CK likes them. If they are named appropriately - great for you! All you need to do is copy/cut/extract all of the WAVs into the voicetype(s) folders for the people speaking. This folder should (create if not there) be found under Skyrim/Data/Sound/Voice/YourMod.esmoresp/VoiceTypeName. I.e., if I have a line for Cindaia in Applewatch, who has the voicetype CYRFemaleElder, I'd place the files for her speaking under Skyrim/Data/Sound/Voice/BSCyrodiil.esm/CYRFemaleElder folder. Do not implement voice if the file is unmerged. Wait until the dialogue is in BSCyrodiil.esm, THEN begin. The voice files will probably break since they will need to have different names after merged. If I had a line that worked for anybody in the guard faction, then I would have had several VAs send me voice files all saying the same line (in different voicetypes). Let's say the guard faction had 3 possible voicetypes - CYRMaleEvenToned, CYRFemaleDeepToned, and CYRMaleArgonianAccented. I would place the files (from each person) in Skyrim/Data/Sound/Voice/BSCyrodiil.esm/CYRMaleEvenToned, CYRFemaleDeepToned, and CYRMaleArgonianAccented. 

IF they send you individual files, but named something like "Line1" "Hey, get out of here" "1" or anything that is clearly not the CK name, then you will need to:
- Put all of the wrongly named files in a folder - make sure to keep them separate if you have 100 lines for one voicetype, wrongly named, and 200 for another voicetype, also wrongly named. Otherwise you won't know which voicetype folder to copy them to! (I.e., you should have a folder on desktop named Temp Unimplemented Voice, then under that two folders, CYRFemaleDeepToned and CYRMaleEvenToned, inside each they have all the wrongly named files to be implemented.)

- Listen to the file (i.e., listen to Line1)
- Identify where the line is found. Find the quest containing the dialogue first, then whether it is topic or misc or combat, then find the appropriate topic, then the appropriate info.
- Find the info, open it, and click on the response that is the line. Each line should only be ONE RESPONSE, not the entire info. If it's the entire info, split it up with Audacity's export selection into each info. Double click the response.
- The response contains a section that shows all voicetypes that can say it, and whether that voicetype has a LIP, WAV, or XWM. We won't be using XWMs, since we use FUZ (FUZ is more compressed than XWM, XWM more than WAV but is just the compressed WAV, not compressed LIP as well). The WAV part should say N for now, but afterwards, when you reopen the response, would say Y if it is in the correct spot. Every once in a while, it's good to check this to make sure you're doing it right. There is also a File Name/Voice File Name part, with a long name made up of a lot of different characters. Select the entirety of that, and copy it.
- Go back to the line that corresponds to this response. Rename the file by renaming>pasting in the new name. This should rename the file.
- Repeat until all files are done. Finally, move the files to the appropriate voicetype folder as shown earlier, since they now all have appropriate names.

Lastly, there could be a situation (my favorite, actually, other than first) where ALL the lines for a voicetype are in one big file (or several lines are in a file). What you do, is:
- Select some of the sound in the file in Audacity, and play it back. Keep playing it back until you know that a line is complete. VAs usually leave a second or two in between responses, so you should be able to differentiate them. You've now got a response selected in Audacity.
- Press the button in Audacity mapped to Export Selection. 
- Find the response in the CK, copy the file name.
- Paste the file name as what Audacity should export the line as (name wise). Export it to the appropriate voicetype folder for that line.
- Press enter to export that piece of the line into the voicetype folder. Repeat for every single response in the file.

This may sound tedious, but I find it about 3x faster than the "one file per line" thing, when they're not named right. Whatever way you have to do, you'll get into the flow of it and begin to do it faster. You'll also get more in practice. Don't worry - it's a bit tedious, but not too hard, and you get to hear the VAs. :D 

Making the LIPs

There is a very tedious way to make LIPs - open each response, once WAVs are placed, and the first voicetype in the list. Press Generate LIP (won't work if there isn't a Y for WAV - not placed in the right place/right name/etc.). It'll make the LIP (same file name, but .lip) in the folder where the voicetype's WAV is. You have to do that for every voicetype for every response. It's easy but irritating.

Thankfully, there's a way to batch generate. Load up your plugin + masters (just BSCyrodiil.esm most likely), and click Gameplay at the top, top bar. Gameplay>Facial Animations>YES. The CK will load. It will probably "not respond". Unless it actually crashes and says stop the program, let it be. It will take some time, but it will generate LIP files for EVERY SINGLE WAV that does not have a LIP. It will not generate for FUZes. This will most likely just be all the WAVs you just did, as everyone should be making LIPs. Even if it adds a few extra, it won't be a problem - just don't push those. You'll know what to push by sorting by Date Modified later.

Voila. LIPs done. If, for any STRANGE reason, not all of them generated/it broke and won't work even after trying once or twice, you'll have to go through and do it manually as said in the first paragraph. Will take longer, but not awful.

Compressing the Files

You should only compress the files once you have verified that the WAVs have been cleaned by an audio engineer. If not, just leave them WAV/LIP and an audio engineer will go through them later so we can paste over, replace, and then generate FUZes.

To begin with, you have to download the Unfuzer (CPP). Extract it into a folder (I have mine under Desktop/Skyrim Stuff/Utilities/Unfuzer). Then, go find ALL those WAV/LIPs you just made (if you have more than one voicetype worth, be sure to put them in their own folders under your Unfuzer folder - i.e. Utilities/Unfuzer/CYRFemaleDeepToned & Utilities/Unfuzer/CYRMaleEvenToned or just a and b - all WAV/LIPs should be in their appropriate voicetype's folder), and copy them into the folder. Run the Unfuzer, and be sure to check everything. To FUZ files, you want to Refuz. If, for any reason, you ever want to get the WAV and LIP from a FUZ (extract), then Unfuz. Once you've Refuzed, gather all your FUZ files, and paste those back into the appropriate voicetype folders under Data/Sound/Voice/yourmod.esporesm. Delete the WAVs and LIPs, since the FUZ already has them contained.

Y'all done. Go test it out in game. 

Note that FUZes will not show up when you open a response - none of the WAV/LIP/XWM things will have a Y. But in game, it will play.

That's it. Tell me if you have any questions. I'll try to get a way for you to practice soon.

Edited by Mattiewagg

Share this post


Link to post
Share on other sites

Cool. I knew a little bit of this already, like the Audacity and Unfuzing stuff, but this is a lot better than saving a file as Temp.wav, dragging it into the voice folder, then hitting save in the response window, then repeating for the next line, which was the only way I knew how to do it before. Works ok if you're doing stuff for a single character (like a custom follower or merchant), but not so great for multiple voicetypes. :wacko:

  • reaction_title_1 1

Share this post


Link to post
Share on other sites

Cool. I knew a little bit of this already, like the Audacity and Unfuzing stuff, but this is a lot better than saving a file as Temp.wav, dragging it into the voice folder, then hitting save in the response window, then repeating for the next line, which was the only way I knew how to do it before. Works ok if you're doing stuff for a single character (like a custom follower or merchant), but not so great for multiple voicetypes. :wacko:

​Awesome. Tell me when you finish Alammu Nethre's quests and it's all good.

Share this post


Link to post
Share on other sites

I recently found this guys tutorials, and they're really fantastic. I'd recommend you watch most/all of them, but at least take a look at this one (you can skip the adding dialogue part):

 

It'll teach you custom packages, which I didn't, as well as an example of making a scene, which I didn't show you.

Note that custom packages are not something you will use all that often. Usually, you'll be able to use an already done package (Add) - like DefaultSandboxEditorLocation, OR, you can make a new package, but based off of a template (like Forcegreet). However, it's important to know how to do so you can do something more complex without chaining together a bunch of templated packages with conditions.

Edited by Mattiewagg

Share this post


Link to post
Share on other sites

Trivia, you are officially the first complete graduate of the Arcane University: Implementation. Graduate of scripting and quest design.

Normally, you'd graduate after completing Alammu's Veil, but given the fact you've been waiting for a while and seem to have a really good handle on things...

Congrats. :D :victory: :celebration: 

Edited by Mattiewagg
  • reaction_title_1 2

Share this post


Link to post
Share on other sites

A while back I taught you something wrong, and I just learned that I've thought something wrong for a long time.

When you attach a script to a base object (when you attach a script to a Book, MiscItem, Weapon, Armor, Potion, etc.) it should NOT EXTEND THE TYPE OF THAT BASEOBJECT. You do not extend Book, MiscObject, Weapon, Armor, Potion, or whatever. You should be extending ObjectReference:

"base objects don't have scripts. 
end of story 
what you're doing is binding the script to the base type, and when an instance of that is created 
it gets the script"

-Qazyhn/PurpleLunchbox/one of the SKSE guys

So. Yeah. Sorry. :P 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×