finalfrog Posted May 11, 2021 Posted May 11, 2021 I recently completed a voice pack for Devious Followers Continued and I thought it would be good to move questions about the process and what else it can do to a dedicated thread instead of spamming the Devious Followers Continued support thread. Edit: Well it started as step-by-step instructions, but it evolved into a helper script that automates a good part of the process. I'm going to include both though. The script is skyrimDialogueSynthHelper.sh and it's written in BASH. It uses 2 packages that are probably not included in out-of-the-box installs: ffmpeg and sox. To use it I'd recommend installing the Windows Subsystem for Linux (WSL). If you can't install that on your OS for some reason you may be able to use Cygwin instead. The lipFiles.res file contains 30 .lip files with durations of 1-30 seconds. I could have baked it into the script, but decided to keep it separate to keep the main script readable. Just make sure they're in the same folder and the script will be able to access it. Here's a breakdown of my current process: 1. Make stub followers Some mods use factions to filter which NPCs can say dialogue and then dynamically add factions to NPCs during the game. When exporting dialogue the Creation Kit will skip over these dialogues for voices which don't have the required factions at the start of the world. The workaround for this I've found is to create stub NPCs in the CK/xEdit with each voice type you want to create and give the factions required to fulfill all the different dialogues in the mod. The NPCs don't actually have to be placed in the world, they just need to defined. If you as a mod author want to design your mod so that both you and your users can generate their own voice files I'd recommend including these in your mod. 2. Export dialogue This part is fairly painless if you've put in the work upfront in step 1, just open the Creation Kit and run Character->Export Dialogue... 3. Extract dialogue from dialogueExport.txt (This part is a lot easier if you're familiar with a scripting language and regular expressions) The exported dialogue file is formatted as tab separated columns. The columns you'll want are 6, 16, and 21. You'll also want to filter out lines which don't include the name of the plugin, since the exported dialogue includes vanilla lines as well as the mod's lines. Also make sure to filter out NPC voicetypes for which you don't want to (or can't because they're unsupported by xVASynth) generate voice lines. The output should hopefully look something like this: DLC1SeranaVoice Data\Sound\Voice\DeviousFollowers.esp\DLC1SeranaVoice\DialogueFo_DialogueFollowe_0015F0EA_1.xwm I hope you enjoyed our time together as much as I did. I'll think of you while I'm spending the money I made. DLC1SeranaVoice Data\Sound\Voice\DeviousFollowers.esp\DLC1SeranaVoice\DialogueFo_DialogueFollowe_0015F0EB_1.xwm What do you need to take? DLC1SeranaVoice Data\Sound\Voice\DeviousFollowers.esp\DLC1SeranaVoice\_DFLicense__DFLicensesOpti_002FEA48_1.xwm Alright, I'll get you a special deal on licenses and add it to your debt. 4. Edit the dialogues as needed The dialogue in most mods is designed to be read and not spoken out-loud as written. As a result the dialogue text will often include things which should not be included in the text provided to xVASynth. Examples include sound effects (eg. "I'm going to pick this lock! *Click* It's open!" or "I'm going to snap my fingers. Snap!") and information for the user (eg. "Okay! [You may now dismiss this follower]). You should also remove any punctuation that could confuse the model like using emphasis (eg. "Are you -sure- about that?" or "Hey what the *hell* is going on here?"). Once you're left with just the text that is intended to be spoken you can either just roll the dice on how it turns out or put in some effort to polish the worst quirks of the model. If you want to do this I'd recommend picking a sampling of lines and manually generating them in xVASynth with one or more voices you intend to use. If you notice a word is consistently being butchered by the model you can change the spelling to more closely resemble the phonetic spelling of the word you want it to say. One good example of this I've found is to use "klowthz" in place of "clothes" 5. Convert the dialogue to xVASynth batch format The xVASynth batch format looks like this: game_id,voice_id,text,vocoder,out_path,pacing "skyrim","sk_serana","I hope you enjoyed our time together as much as I did. I'll think of you while I'm spending the money I made.","hifi","Data\Sound\Voice\DeviousFollowers.esp\DLC1SeranaVoice\DialogueFo_DialogueFollowe_0015F0EA_1.wav",1 "skyrim","sk_serana","What do you need to take?","hifi","Data\Sound\Voice\DeviousFollowers.esp\DLC1SeranaVoice\DialogueFo_DialogueFollowe_0015F0EB_1.wav",1 This part is pretty hard unless you automate it (such as by using my script). You'll need to convert the voicetype name (eg. DLC1SeranaVoic) to the corresponding model name (eg. sk_serana), change the .xwm extension to .wav, then reorder the columns and add ones for game_id, vocoder, and pacing. Make sure it has the header too. Also be aware that xVASynth doesn't handle gigantic batch files gracefully. If you want to avoid it freezing I'd recommend keeping each batch file to 10k lines or less. 6. Create output folders in xVASynth install directory xVASynth currently doesn't create output directories that are missing when it encounters then during a batch run. Instead it just sorta quietly stalls with no explanation why unless you go check the log file. To avoid this you'll need to create all the output folders ahead of time. Again, my script has a function to automate this. 7. Run batch file in xVASynth Depending on the voice models and the number of lines this can take anywhere from a few minutes to 12 hours. Be prepared to leave your computer on overnight if you're planning on doing tens of thousands of lines. 8. Generate .lip files If you generated the .wav files using a model other than 'hifi' the files generated are likely 32 bit-depth. I know from experience that the Creation Kit will refuse to generate .lip files for them unless you convert them to 16 bit-depth (my script has a command to do this). I don't know whether they will work without conversion if you choose to use fake .lip files option. Try and see what happens I guess? If you care about lip syncing accurate you'll need to use the Creation Kit to generate .lip files. This is impossible with the SSE Creaton Kit, so you'll need to either use the LE Creation Kit or skip to the cheaty method below. If you're lucky you can have the creation kit generate all the .lips for you by running it with the command line arg "-GenerateLips=<PLUGIN>". I've had mixed results with this, with the Creation Kit randomly crashing mid-run or consistently skipping specific topics for no apparent reason. The much easier method is use fake .lip files. The Silent Voice Generation tool includes 30 .lip files with integer durations of 1-30 seconds that are just the actor's lips making the sound 'a e i o u' over and over. If you copy one of these with a duration similar to your voice line and rename it to have the same name as your .wav file it will play in game. My script includes a command which processes the .wav files with ffmpeg to determine their duration, rounds up to the next second, and does the copy and rename for you. 9. Converting to .fuz This step is optional and really only required if you want to publish your voice files and upload them. You can do this easily using Yakitori Audio Converter. It even finds .wav files in sub-directories of the folder you specify, so you can just point it at the top level containing all your .wav and .lip files to convert them all at once. I haven't added automation of this to my script, but it might be something to look into later. lipFiles.res skyrimDialogueSynthHelper.sh
finalfrog Posted May 12, 2021 Author Posted May 12, 2021 Minor update to clarify the usage of how to choose the active voice type and changed default from just Serana's voice to all the decent humanoid xVASynth skyrim voices.
finalfrog Posted May 15, 2021 Author Posted May 15, 2021 You can always find latest version of the script on my OneDrive: https://1drv.ms/u/s!AqG5V0Q4d-MegqVmi1fSP71SVx2p0A?e=RPSZ1O
SacredDatura Posted May 21, 2021 Posted May 21, 2021 Been playing a bit of DFC with your voice packs. They're great! They're not perfect - as you note words where asterisks are used to denote emphasis get skipped over, and sometimes the pronunciation is a bit off - but it still makes a world of difference immersion-wise. I didn't realize how big a difference it made until transitioning from DFC lines to unvoiced SubLola lines (enslavement handover). I'm used to LL mods using silent lines but in this instance I found myself suddenly really feeling the lack of voiced lines.
Guest Posted May 26, 2021 Posted May 26, 2021 Hey, this is a great idea! But I have a question. What would the example script look like, if I wanted to take a mod with it's own dialogue and regenerate it with one of the XVASynth voices? For example.... Let's say I want to take the mod out there that re voiced Lydia (Improved Follower Dialogue - Lydia) And regenerate the dialogue back to Female Event Toned? So, this mod took Lydia, and completely re voiced her with a new VA and new lines. But I want to take those lines and bring then back to Lydia's original voice. ESP= ImprovedCompanionsBoogaloo.esp Mod's Voicetype= FemaleUniqueLydia
Herowynne Posted May 26, 2021 Posted May 26, 2021 @finalfrog The FemaleElfHaughty voice pack for DFC is really great! But I did not see a MaleElfHaughty voice pack for DFC. I would love to hear that one also! Just wondering -- will you be generating a MaleElfHaughty voice pack for DFC ?
Roggvir Posted May 27, 2021 Posted May 27, 2021 I want to let others know, that i recently started working on voices for Submissive Lola: The Resubmission LE/SE. I am not to upload the voices anywhere (in order to prevent a storm of confused idiot players complaining about mismatched dialogue lines at some point in the future when i would presumably stopped updating the voice pack), but i hope HexBolt8 may still change his mind at some point. Anyway, since it is a gargantuan amount of tedious work to make these voices (if you go over every line and manually tweak any that doesn't sound correct), i want others to know that IF they would happen to be working on the same thing, we can save each other some time and share/split the workload. I am currently working on the FemaleDarkElf voice, so if anybody is about to do voices for this mod, skip this voice as i have it already nearly completed.
finalfrog Posted May 31, 2021 Author Posted May 31, 2021 On 5/26/2021 at 4:23 PM, Herowynne said: Just wondering -- will you be generating a MaleElfHaughty voice pack for DFC ? I generated voice packs for all the voices which xVASynth supported at the time I released them. Since then the author has released a number of new voice models, but sadly MaleEflHaughty isn't one of them.
Roggvir Posted June 1, 2021 Posted June 1, 2021 I have a problem with doing Submissive Lola dialogue exports from Creation Kit. The resulting export is missing a lot of lines. The cause of it seems to be a topic info condition like... Quote S | GetIsAliasRef | Alias: Owner | == | 1.0 ...because the alias is only filled at real-time by a script, the condition returns false while in Creation Kit, and because CK apparently evaluates this condition when building list of voice types for this line, it ends up as having no available voice. I am trying to find a reasonable and systemic solution to this. I could set the alias to some NPC, which will result in the line being included in the export - BUT only for the voice that particular NPC is using, so that isn't a systemic solution at all. I could replace the condition with another one, checking the subject's voice type against formlist of all voice types i know can be used by any NPC that can become the "Owner" - BUT there are MANY topic infos where this condition can be, so this is just plain insane. So far, the best i was able to come up with is: Create a dummy "Owner" NPC, create and give it a new "OwnerVoice" voice type, and set this NPC into that "Owner" alias (that will ensure the line appears in the export using my special "OwnerVoice"), and do the export. Then create duplicates of any CSV lines using my special "OwnerVoice" for all the voice types i know the "Owner" to be. But isn't there a better solution? There must be a better way, right? This is just one case out of many where something like this can result in lines not getting exported, surely there must be some intelligent way of handling this problem?
Roggvir Posted June 1, 2021 Posted June 1, 2021 1 hour ago, Roggvir said: I have a problem with doing Submissive Lola dialogue exports from Creation Kit. The resulting export is missing a lot of lines. The cause of it seems to be a topic info condition like... ...because the alias is only filled at real-time by a script, the condition returns false while in Creation Kit, and because CK apparently evaluates this condition when building list of voice types for this line, it ends up as having no available voice. I am trying to find a reasonable and systemic solution to this. I could set the alias to some NPC, which will result in the line being included in the export - BUT only for the voice that particular NPC is using, so that isn't a systemic solution at all. I could replace the condition with another one, checking the subject's voice type against formlist of all voice types i know can be used by any NPC that can become the "Owner" - BUT there are MANY topic infos where this condition can be, so this is just plain insane. So far, the best i was able to come up with is: Create a dummy "Owner" NPC, create and give it a new "OwnerVoice" voice type, and set this NPC into that "Owner" alias (that will ensure the line appears in the export using my special "OwnerVoice"), and do the export. Then create duplicates of any CSV lines using my special "OwnerVoice" for all the voice types i know the "Owner" to be. But isn't there a better solution? There must be a better way, right? This is just one case out of many where something like this can result in lines not getting exported, surely there must be some intelligent way of handling this problem? A better solution for the "Owner" alias is to just set it to Find Matching Reference and use the following condition: ( S | InList | FormList: 'PossibleOwners' | == | 1.0 ) ...and of course you need to create the "PossibleOwners" formlist and fill it with all eligible NPCs. I am just not sure what happens if any Topic Info would be using a condition for the Subject NOT be an "Owner" - would it now remove the line from export, because it would exclude voices of all the "PossibleOwners" from the list of voices available for this line, resulting in line having no voice? I tested it a bit, and it doesn't seem to have that effect - BUT THAT CONFUSES ME ?
Guest Posted June 4, 2021 Posted June 4, 2021 I tried to use the script, but kept getting syntax errors with the expression containing () However, using some spread sheet manipulation, I was able to produce a working CSV from Submissive Lola containing roughly 1k lines per voice type. It was a bit of a manual task, mostly separating values, then cutting and pasting. It wasn't too bad.
Roggvir Posted June 4, 2021 Posted June 4, 2021 On 6/4/2021 at 3:12 PM, bishlapped said: I tried to use the script, but kept getting syntax errors with the expression containing () However, using some spread sheet manipulation, I was able to produce a working CSV from Submissive Lola containing roughly 1k lines per voice type. It was a bit of a manual task, mostly separating values, then cutting and pasting. It wasn't too bad. I think you'r issue may have been caused by SubLola's voice lines containing new lines or line breaks, which are included in the CK dialogue export, resulting in an invalid CSV format (or TSV format, to be precise). I made a python script which will parse the CK dialogue export, remove these problematic characters. It also splits the export into separate files for each voice, which anybody may find usefull too. The intended usage is: Do a dialogue export from CK I export data from each quest separatedly, into its own TXT file, so i made the script process all TXT files it finds. Save/move the TXT files containing the export data into some folder with no other TXT files in it. Run the script I was too lazy to add any handling for optional commandline arguments like input/output paths, etc., so just place the script into the same folder where teh TXT files are, and run it from there. The script will create a folder for each voice, and create at least 3 files inside of each of them: - the "dialogueExport****.txt" file, but containing only the appropriate voice - the "_ALL_COMBINED.TXT" file, containing only the appropriate voice, combining data from ALL the TXT files (if you had more, exporting individual quests like i do). - the "_ALL_COMBINED_xVA.CSV" file, same as above, but its not really a CSV file but just a TXT listing voice lines one per line, to be fed to xVASynth for batch processing. The script requires Python 3 (i am on 3.8.9, but i believe any 3.* version should do). EDIT: i removed the attached script, because it was an obsolete version. Current version of the script is attached to this post.
Roggvir Posted June 4, 2021 Posted June 4, 2021 Regarding Submissive Lola, here is how i do the voice exports for it: Make copy of Lola's plugin and load it in CK Name the plugin copy anything you want, it doesn't matter. Make sure to load the plugin into CK together with all DLCs (if you want the dialogue export to contain lines for followers added by the DLCs) Create formlist "LOLA_Owners" containing all possible followers Create the formlist and drag&drop into it all the possible followers, which are (if i forgot any, or included some that make no sense, pls correct me): Spoiler Adelaisa "Adelaisa Vendicci" [NPC_:0001411D] AelaTheHuntress "Aela the Huntress" [NPC_:0001A696] Ahtar "Ahtar" [NPC_:0001325F] Annekke "Annekke Crag-Jumper" [NPC_:00013666] Athis "Athis" [NPC_:0001A6D5] BYOHHousecarlFalkreath "Rayya" [NPC_:03005215] BYOHHousecarlHjaalmarch "Valdimar" [NPC_:0300521B] BYOHHousecarlPale "Gregor" [NPC_:0300521E] Benor "Benor" [NPC_:000135E8] Borgakh "Borgakh the Steel Heart" [NPC_:00019959] BrelynaMaryon "Brelyna Maryon" [NPC_:0001C196] Cicero "Cicero" [NPC_:0001BDB1] Cosnach "Cosnach" [NPC_:00013390] DA01Aranea "Aranea Ienith" [NPC_:00028AD0] Derkeethus "Derkeethus" [NPC_:0001403E] DLC1Agmaer "Agmaer" [NPC_:0200336E] DLC1Beleval "Beleval" [NPC_:0201541C] DLC1Celann "Celann" [NPC_:0201541E] DLC2dunKolbjornRalis "Ralis Sedarys" [NPC_:040179C7] DLC1Durak "Durak" [NPC_:0201541D] DLC1Ingjard "Ingjard" [NPC_:0201541B] DLC1Serana "Serana" [NPC_:02002B6C] DLC2Frea "Frea" [NPC_:04017934] DLC2RRTeldrynSero "Teldryn Sero" [NPC_:04038560] DLC2Talvas "Talvas Fathryon" [NPC_:04017777] dunDarklightIllia "Illia" [NPC_:00048C2F] Eola "Eola" [NPC_:0001990F] Erandur "Erandur" [NPC_:0002427D] Faendal "Faendal" [NPC_:00013480] Farkas "Farkas" [NPC_:0001A692] Ghorbash "Ghorbash the Iron Hand" [NPC_:00013B81] Golldir "Golldir" [NPC_:00019FE8] HirelingBelrand "Belrand" [NPC_:000B9981] HirelingErikTheSlayer "Erik the Slayer" [NPC_:00065657] HirelingJenassa "Jenassa" [NPC_:000B9982] HirelingMarcurio "Marcurio" [NPC_:000B9980] HirelingStenvar "Stenvar" [NPC_:000B9983] HirelingVorstag "Vorstag" [NPC_:000B997F] HousecarlMarkarth "Argis the Bulwark" [NPC_:000A2C8C] HousecarlRiften "Iona" [NPC_:000A2C91] HousecarlSolitude "Jordis the Sword-Maiden" [NPC_:000A2C8F] HousecarlWhiterun "Lydia" [NPC_:000A2C8E] HousecarlWindhelm "Calder" [NPC_:000A2C90] Jzargo "J'zargo" [NPC_:0001C195] Kharjo "Kharjo" [NPC_:0001B1D2] Lob "Lob" [NPC_:00019E1E] Mjoll "Mjoll the Lioness" [NPC_:0001336B] NjadaStonearm "Njada Stonearm" [NPC_:0001A6D9] Ogol "Ogol" [NPC_:00019E22] Onmund "Onmund" [NPC_:0001C194] Ria "Ria" [NPC_:0001A6D7] Roggi "Roggi Knot-Beard" [NPC_:0001403F] Sven "Sven" [NPC_:0001347F] Torvar "Torvar" [NPC_:0001A6DB] Ugor "Ugor" [NPC_:00019E1A] Uthgerd "Uthgerd the Unbroken" [NPC_:000918E2] Vilkas "Vilkas" [NPC_:0001A694] Create new formlist LOLA_ForbiddenVoices This is a list of voices to exclude, voices that we do not want to have in any of the dialogue exports even if an NPC slips through the cracks of any dialogue conditions (which many do). Drag&Drop the following Voice Types: Spoiler Cr* (any voicetype starting with "cr" is for creature, selected them all and drag&drop into the list) DLC1FemaleUniqueFura [VTYP:02007C48] DLC1LD_FemaleNordUniqueKatria [VTYP:0200A2BD] DLC1MaleUniqueGelebor [VTYP:0201681D] DLC1MaleUniqueJiub [VTYP:0201400A] DLC1MaleUniqueSnowElfGhost [VTYP:0201667D] DLC1MaleUniqueVyrthur [VTYP:02014FC2] DLC2CrBristlebackVoice [VTYP:04024C3E] DLC2CrGiantVoiceKarstaag [VTYP:04028241] DLC2MaleUniqueMiraak [VTYP:04017F7E] DLC2RieklingVoice [VTYP:040208DC] DLC2UniqueBardInstruments [VTYP:0403A4A0] FemaleChild [VTYP:00013AE9] FemaleUniqueAzura [VTYP:0000002E] FemaleUniqueBoethiah [VTYP:0002422B] FemaleUniqueGhost [VTYP:000854EC] FemaleUniqueMephala [VTYP:00028D8C] FemaleUniqueMeridia [VTYP:0004E500] FemaleUniqueNamira [VTYP:0008797B] FemaleUniqueNightMother [VTYP:0001BDB6] FemaleUniqueNocturnal [VTYP:00031894] FemaleUniqueVaermina [VTYP:000E16CE] MaleChild [VTYP:00013AE8] MaleUniqueAventusAretino [VTYP:00047496] MaleUniqueClavicusVile [VTYP:00028CA4] MaleUniqueDBBlackDoor [VTYP:00025BF5] MaleUniqueDBGuardian [VTYP:00074764] MaleUniqueDBSpectralLachance [VTYP:00074765] MaleUniqueGallus [VTYP:0001BB5F] MaleUniqueGhost [VTYP:000854ED] MaleUniqueGhostSvaknir [VTYP:000F4C8C] MaleUniqueHermaeusMora [VTYP:00035817] MaleUniqueHircine [VTYP:00090CF3] MaleUniqueMalacath [VTYP:0003BC2A] MaleUniqueMehrunesDagon [VTYP:0001CA04] MaleUniqueMGAugur [VTYP:000411FB] MaleUniqueMolagBal [VTYP:0000002D] MaleUniquePeryite [VTYP:000A8064] MaleUniqueSongOfTheDragonborn1 [VTYP:000E0C99] MaleUniqueSongOfTheDragonborn2 [VTYP:000E0C9A] SexLabVoiceF [VTYP:0502CBBE] SexLabVoiceM [VTYP:0502CBBD] SPECIALFemaleUniqueGormlaith [VTYP:0009823B] SPECIALMaleUniqueFelldir [VTYP:0009823A] SPECIALMaleUniqueTsun [VTYP:000947D0] Change the "Owner" Alias on quest "vkjStrongHand" Set it to "Find Matching Reference" and use single condition (S.IsInList(LOLA_Owners)==1.0) This allows CK to use any "Owner" onditions on any of the quest dialogue conditions, or even individual topic infos, to populate a list of available voices when making the export. Change quest dialogue condition on "vkjStrongHand" Set the condition to (S.IsInList(LOLA_Owners)==1.0) This will make sure the dlg export for this quest won't list any other voices than those that make sense (ie. possible followers only) Set the following quest dialogue conditions: vkjBardPlay: (S.HasKeyword(ActorTypeNPC)==1.0 AND S.IsUnique==1.0 AND S.IsChild==0.0 AND S.GetIsVoiceType(LOLA_ForbiddenVoices)==0.0) vkjConfessions: (S.HasKeyword(ActorTypeNPC)==1.0 AND S.IsChild==0.0 AND S.GetIsVoiceType(LOLA_ForbiddenVoices)==0.0) vkjLickFeet: (S.HasKeyword(ActorTypeNPC)==1.0 AND S.IsChild==0.0 AND S.GetIsVoiceType(LOLA_ForbiddenVoices)==0.0) vkjNewBuddy: (S.HasKeyword(ActorTypeNPC)==1.0 AND S.IsChild==0.0) vkjPimpedBasic: (S.HasKeyword(ActorTypeNPC)==1.0 AND S.IsChild==0.0 AND S.GetIsVoiceType(LOLA_ForbiddenVoices)==0.0) vkjPonyExpress: (S.HasKeyword(ActorTypeNPC)==1.0 AND S.IsChild==0.0 AND S.GetIsVoiceType(LOLA_ForbiddenVoices)==0.0) vkjStrongHand: (S.IsInList(LOLA_Owners)==1.0) vkjTagged: (S.IsInList(LOLA_Owners) OR S.GetInFaction(JobBlacksmithFaction)) vkjTempleOfLove: (S.HasKeyword(ActorTypeNPC)==1.0 AND S.IsUnique==1.0 AND S.IsChild==0.0 AND S.GetInFaction(FavorJobsBeggarsFaction)==0.0 AND S.GetIsVoiceType(FormList:LOLA_ForbiddenVoices)==0.0) vkjTrophySlave: (S.HasKeyword(ActorTypeNPC) AND S.IsChild==0.0 AND S.GetIsVoiceType(FormList:LOLA_ForbiddenVoices)==0.0) Change vkjConfessions aliases "Citizen1" and "Citizen2", and vkjNewBuddy aliases "Buddy1" and "Buddy2" Add the following condition to the beginning of fill conditions of each mentioned alias: (S.GetIsVoiceType(LOLA_ForbiddenVoices)==0.0) AND Do the dialogue export Double-click the quest to open it, then click the button "Export Dialogue". Do it for every "vkj*" quest except the following: vkjBestowTag, vkjDetectDragon, vkj_MCM, vkjTravelRestriction, vkjSlaveStart Process the export results according to your needs. I use the python script i attached to my previous post, to give me list of lines for each voice type in separate file, and i feed those to xVASynth to be batch processed by the appropriate voice (if it is available in xVA). Then i listen to every created WAV and manually tweak any that do not sound right, but i do that only for the owner voices for now (actually only for the owner voice of the follower i tend to use the most). After that i run another script to rename the WAV files to the filenames expected by the game, using the TXT with dialogue exports to look up the lines to get the filenames for them (this script is attached below). Here is the "rename" python script mentioned in #9. Again, it requires Python 3. - it requires the TXT files(s) with the CK dialogue exports in the same folder as the script is. - it requires WAV files in a folder called "@DONE", located where the script is. - it requires empty folder called "@RENAMED", located where the script is, where it will copy the renamed files. - look inside the script to read a bit more comments on its function, and/or edit it to bend it to your needs (change the folder names, etc.) - notice the DRY_RUN variable in the script (set it to 1 to do a dry run without actually copying any files) rename.py
Roggvir Posted June 4, 2021 Posted June 4, 2021 On 6/4/2021 at 3:58 PM, Roggvir said: I think you'r issue may have been caused by SubLola's voice lines containing new lines or line breaks, which are included in the CK dialogue export, resulting in an invalid CSV format (or TSV format, to be precise). I made a python script which will parse the CK dialogue export, remove these problematic characters. It also splits the export into separate files for each voice, which anybody may find usefull too. The intended usage is: Do a dialogue export from CK I export data from each quest separatedly, into its own TXT file, so i made the script process all TXT files it finds. Save/move the TXT files containing the export data into some folder with no other TXT files in it. Run the script I was too lazy to add any handling for optional commandline arguments like input/output paths, etc., so just place the script into the same folder where teh TXT files are, and run it from there. The script will create a folder for each voice, and create at least 3 files inside of each of them: - the "dialogueExport****.txt" file, but containing only the appropriate voice - the "_ALL_COMBINED.TXT" file, containing only the appropriate voice, combining data from ALL the TXT files (if you had more, exporting individual quests like i do). - the "_ALL_COMBINED_xVA.CSV" file, same as above, but its not really a CSV file but just a TXT listing voice lines one per line, to be fed to xVASynth for batch processing. The script requires Python 3 (i am on 3.8.9, but i believe any 3.* version should do). Just in case anybody would want to use that script. There was an issue that it creates some files with having the TXT extension in uppercase, which xVASynth (currently 1.37) refuses to load. So, here is the script with that problem rectified. EDIT: removed the attached file, it was an old obsolete version, i posted the correct version here.
Guest Posted June 4, 2021 Posted June 4, 2021 Thanks, I will check it out. Are you script generating Lips too? I tried the CK arg, but it just fails every time. CreationKit.exe -GenerateLips:submissivelola_est.esp
Roggvir Posted June 4, 2021 Posted June 4, 2021 1 hour ago, bishlapped said: Thanks, I will check it out. Are you script generating Lips too? I tried the CK arg, but it just fails every time. CreationKit.exe -GenerateLips:submissivelola_est.esp I am still batch processing all voices, but i intend to do LIPs after that. So, i am as clueless as you, but are you trying to use the SSE Creation Kit? If yes, it was stated that it doesn't work (or that it is at best very difficult to make it work), so maybe you should try the Oldrim Creation Kit (if you can, though i believe you should be able to download it even if you don't own Oldrim). EDIT: another problem could be your WAV files - make sure they are using the correct/recommended bitrate and whatnot - i don't know the parameters myself yet, but i'd think it can be found somewhere on the internets, or maybe somebody else will be able to clarify.
Guest Posted June 5, 2021 Posted June 5, 2021 13 hours ago, Roggvir said: I am still batch processing all voices, but i intend to do LIPs after that. So, i am as clueless as you, but are you trying to use the SSE Creation Kit? If yes, it was stated that it doesn't work (or that it is at best very difficult to make it work), so maybe you should try the Oldrim Creation Kit (if you can, though i believe you should be able to download it even if you don't own Oldrim). EDIT: another problem could be your WAV files - make sure they are using the correct/recommended bitrate and whatnot - i don't know the parameters myself yet, but i'd think it can be found somewhere on the internets, or maybe somebody else will be able to clarify. I'm still using LECK, however, I had a solution to the Lip gen, I found it posted here, I think, I can't recall what it was, but it basically hands off the generation to a different app.
Guest Posted June 5, 2021 Posted June 5, 2021 I've also been testing out other applications for this tool as well. I took a follower that had been originally voiced in Japanese, but with the text translated to English. I took those lines and voiced them. But this one I did all manually, I'd like to try it with some other followers too. I re did her voice using V Female from Cyberpunk2077. I asked for permission to publish the translation but never heard back from the original author of the mod. The original mod: https://www.nexusmods.com/skyrim/mods/58460/ Amalia-Eng-Dub.mp4
Guest Posted June 5, 2021 Posted June 5, 2021 14 hours ago, Roggvir said: I am still batch processing all voices, but i intend to do LIPs after that. So, i am as clueless as you, but are you trying to use the SSE Creation Kit? If yes, it was stated that it doesn't work (or that it is at best very difficult to make it work), so maybe you should try the Oldrim Creation Kit (if you can, though i believe you should be able to download it even if you don't own Oldrim). EDIT: another problem could be your WAV files - make sure they are using the correct/recommended bitrate and whatnot - i don't know the parameters myself yet, but i'd think it can be found somewhere on the internets, or maybe somebody else will be able to clarify. Check out FaceFXwrapper https://www.nexusmods.com/skyrimspecialedition/mods/20061?tab=files
Roggvir Posted June 5, 2021 Posted June 5, 2021 5 hours ago, bishlapped said: Check out FaceFXwrapper https://www.nexusmods.com/skyrimspecialedition/mods/20061?tab=files Well, i do have LE and its old Creation Kit, so i can always use that to generate LIP files, but i'll have a look at this too, thanks.
Guest Posted June 5, 2021 Posted June 5, 2021 16 minutes ago, Roggvir said: Well, i do have LE and its old Creation Kit, so i can always use that to generate LIP files, but i'll have a look at this too, thanks. I think the CK in LE is choking on Sub Lol because of the way the dialogue is set up. The Gen Lips batch isn't going to work the way it is now. You can look this over if you'd like. Maybe I am doing something wrong EditorWarnings.txt
Roggvir Posted June 5, 2021 Posted June 5, 2021 2 hours ago, bishlapped said: I think the CK in LE is choking on Sub Lol because of the way the dialogue is set up. The Gen Lips batch isn't going to work the way it is now. You can look this over if you'd like. Maybe I am doing something wrong EditorWarnings.txt 837.29 kB · 0 downloads That is strange, it works fine for me. It works even in 64bit CK for SSE (using the CK fixes). But i made just a test, generating LIP files for only about 1000 voice lines (there are about 2000 in total), and only for one voice (FemaleDarkElf). So, maybe i run into the same problem when i get to the other lines or voices, we'll see.
Roggvir Posted June 5, 2021 Posted June 5, 2021 2 hours ago, bishlapped said: I think the CK in LE is choking on Sub Lol because of the way the dialogue is set up. The Gen Lips batch isn't going to work the way it is now. You can look this over if you'd like. Maybe I am doing something wrong You didn't forget to convert the plugin to an ESM? You need to open the plugin (or make its copy) in xEdit, flag it as ESM, and save it. Don't forget to change the file extension to ESM too, and of course the WAV files must be in path "Data\Sound\Voice\submissivelola_est.esm\..." ...obviously, don't forget to get rid of the ESM plugin version, and renaming the voice folder back to "submissivelola_est.esp" after you are done with generating the LIP files.
Guest Posted June 5, 2021 Posted June 5, 2021 2 hours ago, Roggvir said: You didn't forget to convert the plugin to an ESM? You need to open the plugin (or make its copy) in xEdit, flag it as ESM, and save it. Don't forget to change the file extension to ESM too, and of course the WAV files must be in path "Data\Sound\Voice\submissivelola_est.esm\..." ...obviously, don't forget to get rid of the ESM plugin version, and renaming the voice folder back to "submissivelola_est.esp" after you are done with generating the LIP files. Ahh, it did it backwards then. I, instead, removed all the master refs....I'll convert it to its own master and try it
Guest Posted June 5, 2021 Posted June 5, 2021 Yep, worked like that. Such an obvious thing, staring me right in the face and I over looked it. LOL
Recommended Posts
Archived
This topic is now archived and is closed to further replies.