Maybe you are planning to, or already did, create collections of audio files with a person, video game character, you name it, saying all kinds of things to you?
If so, continue reading, this may be of your interest.
In this guide I am combining the use of plugins, built-in tools, experiences, comments, tips, external resources, trial and error, etc, into a structure that allows loading and changing speech audio almost as quickly as changing looks.
This is very much a exploratory method, plenty of experimenting and adapting is needed. To get the best results, the scenes you add quickspeech to should be consistent enough to reap the most benefits. Even if it's only used in one scene, pick one where you'd really like to have multiple audio collections to choose from.
While I present this guide and demo with a specific setup in mind, the topics addressed here can be used in all kinds of different ways
What is needed:
- Have a quickspeech atom I provide - or make your own - as a trigger recipient
- Audio speech files as assetbundles
- Have triggers in the animation or UI to trigger the relays in the quickspeech atom or your version
- Add one or more (Random)SoundfromAB plugin(s) to a person
- Have experience with using Logicbricks or be willing to learn
- VaM 1.22.0.3 for the built-in Lip Sync or using the demo provided
There's a demo scene to this guide:
See the VAR quickspeech_demo In Download.
Earlier versions had a single audiobundle (assetbundle with audio files), but now that I shared two collections in the American Preset Pack, I use those in the demo.
Not just about speech, use it for playing music
While the focus on this guide is on speech in headaudio, you can do the same for random music tracks in a AudioSource atom. The setup is much simpler as you only need a preset for the audiosource atom, or manual assetbundle loading if you prefer, and have a trigger to play your collection. I use this option more often than speech.
Audio assetbundles
I'll start with this topic because this is the one you might find strange, why turn audio files into assetbundles? This advice comes from MacGruber's comments when I was perusing the forum.
If you use audio files in a assetbundle, loading is almost immediate and - I haven't compared yet, sorry - might be much softer on available RAM compared to loading all the audio files in Scene Audio. Tons of audio files can be loaded in that single assetbundle instantly, no need to wait many seconds or even minutes for audio files to be loaded into Scene Audio.
Ok, audio assetbundles are instant, that's handy, but how do I make them?
MacGruber again did that work already.
First you need to learn how to make a audio assetbundle and have the tools to do it. Follow MacGruber's guide on how to make assetbundles to install the right Unity version and some extra tools that are very convenient:
Unity AssetBundles for VaM 1.xx - Guides -
After some people essentially begged me to do it, I spend several evenings this week and the this entire Saturday on writing a tutorial on Unity AssetBundles. It ended up to be an 13 page PDF of 2700 words. Lots of pictures, obviously. This...
hub.virtamate.com
Seriously, don't worry, just follow the guide and you'll be fine. I never touched anything Unity wise or the likes before and managed to do audio assetbundles. You only need to do part of the guide, audio is essentially: drag and drop > build assetbundle > done.
Audio assetbundle workflow in a nutshell
The following expects you to have followed MacGruber's guide to install the correct Unity version and his extensions like VaMExporter. The screenshot on the right should be similar to your Unity look, or at least the same sections exist.
You don't have to include folders like the ones in the screenshot, you can just drag and drop files. The SoundfromAB brick has a feature to play files that are inside specific subfolders, not just from the entire assetbundle. It's your choice to use or not this feature. In the demo scene I have a single assetbundle with 4 folders (and sound files) inside. I set it to play a specific folder to each sex part. In this way I only need one assetbundle instead of 4 assetbundles. |
Right, so now how do I use these audio assetbundles?
You guessed it, there's a plugin that MacGruber created that will load and play audio assetbundles. This is in the Logicbricks VAR and the plugin is called SoundfromAB or RandomSoundfromAB.
If you add the plugin in a person atom, load a assetbundle and add the listed files, the head audio will play them randomly. No loading time, ready to play when triggered.
Doesn't have to be just speech, RandomSoundfromAB can be added to Audiosource atoms and you can have audio assetbundles for random music too.
Every day a new Text to Speech system pops up, or you get your files from another source, all this is done outside VaM and it's up to you to find what you want to have.
A tool like Audacity is very useful to edit your audio content, try to make your collections consistent and clear. The web is full of tips on how to improve audio.
A tool like Audacity is very useful to edit your audio content, try to make your collections consistent and clear. The web is full of tips on how to improve audio.
A quickspeech atom
There's nothing special about this atom, the important part is to have a place to control how the speech bundles you made are to be used. Here you provide receivers for triggers in the animation or UI, like Logicbrick relays, delays, or also the new VAMStory (Actions and/or Director). The idea can be as simple as this:
Timeline or UI trigger -> quickspeech receiver -> person plugin (Random)SoundfromAB
It can be as simple as having a quickspeech atom with one relay that when called triggers the (Random)SoundfromAB, or as complex as you want.
In the demo scene
- Use a single SoundfromAB plugin in the female person: before sex, during sex, pre-cum, after sex
- The single assetbundle has folders for each sex part, with the before, pre-cum, after folders having 3 audio files, during with 10 audio files
- The quickspeech atom in the scene has Logicbricks and VAMStoryActions plugins
- Triggers in the quickspeech atom play a random assetbundle folder when the speechcontrol atom triggers them
- Before, and after play once only, pre-cum plays twice, during plays in a random loop until the cum button is pressed
In the demo scene
- I use 4 audio assetbundles for a simple sex scene: before sex, during sex, pre-cum, after sex. Each assetbundle has 3 audio files, during has 10 audio files
- The female atom has 4 RandomSoundfromAB plugins, one for each assetbundle
- The quickspeech atom in the scene has Logicbricks and VAMStoryActions plugins
- Before, and after play once only, pre-cum plays twice, during plays in a random loop until the smiley face button is hit
It's a more complex setup because it's part of a bigger project and I wanted to follow a particular flow of actions. Timeline and UI in that scene have no direct call for quickspeech, it's all done through relays in a TableControl atom.
Connecting the UI or animation tool in the scene with a quickspeech atom
The setup in the demo is done to minimise triggers in UI and Timeline, and instead manage triggers with a empty atom. I think this strategy might work better in the long run as I want to include quickspeech more easily in scenes from other creators. Editing triggers in empty atoms is easier than finding and changing them in Timeline, especially those created by others.
The setup in the demo is like this:
UI -> Control atom -> quickspeech receiver -> person plugin (Random)SoundfromAB
This might allow the quickspeech atom to be the identical in any scene I include it, as the Control atom is the one doing the heavy work of fitting each scene's animation needs and translate them into quickspeech triggers. I find that having a Control atom makes the other scenes retrofitting easier than adapting the existing UI or animation tools, but to each its own.
The quickspeech setup on a scene is done, what now?
I'm picking the demo as a example point again.
In it I include a single audio assetbundle, with the audio in folders for each sex part. This is just a single audio collection; one speaker, same mood. But consider having 15 collections available and you can change them while playing the scene, with barely any effort. That's where quickspeech comes into play.
In it I include a set of 4 audio assetbundles, one for each sex moment. This is just a single audio collection; one speaker, same mood. But consider you have 15 collections available and you want to change them while still playing the scene, as quickly as possible. That's where quickspeech comes into play.
Changing assetbundles quickly
Making quickspeech atom presets
- Load a assetbundle in the person's SoundfromAB plugin
- Change the quickspeech atom's triggers to the newly loaded assetbundle folders
- Save as a quickspeech atom preset
- Repeat for all collections you have until you have all the presets you want
Whenever you want to change your audio collection you can load the preset you made earlier on the quickspeech atom. Simple as that.
One last step needed is to load the assetbundle in the person SoundfromAB plugin. This can be done manually, or like I have in the demo scene, by triggering from the quickspeech atom plugin or using the "Load voice" button that triggers that plugin.
Now you can enjoy any collection and change them in less than 5 seconds.
Tip: The fancy UIAssist preset loading
It's the same quickspeech atom preset setup as above but you can also create a button in UIAssist that loads the atom preset on the target quickspeech atom. You still have to do the "Load voice" part as UIAssist cannot trigger plugins in atoms.
Looks very cool when you add a thumbnail, highly recommended.
The manual way
This one is very simple. You go to the person atom plugins, either reload to clear or open the RandomSoundfromAB plugin and clear existing files, load a assetbundle, click "Add all" to the list. Do the same in all RandomSoundfromAB plugins.
No caveats, but slower and boring.
The plugin preset way
You create a plugin preset for each collection with just the RandomSoundfromAB plugins. The plugin preset is to be merge loaded in the person, and the collection is available immediately.
Caveats, see below.
The fancy UIAssist plugin preset way
Same as the plugin preset option but it's added to a button in UIAssist. Looks very cool if you add a thumbnail.
Caveats, see below.
This one is very simple. You go to the person atom plugins, either reload to clear or open the RandomSoundfromAB plugin and clear existing files, load a assetbundle, click "Add all" to the list. Do the same in all RandomSoundfromAB plugins.
No caveats, but slower and boring.
The plugin preset way
You create a plugin preset for each collection with just the RandomSoundfromAB plugins. The plugin preset is to be merge loaded in the person, and the collection is available immediately.
Caveats, see below.
The fancy UIAssist plugin preset way
Same as the plugin preset option but it's added to a button in UIAssist. Looks very cool if you add a thumbnail.
Caveats, see below.
Caveats
The new SoundfromAB plugin using quickspeech atom presets has 2 caveats: same person name and plugin number among your collections, and you need to load the assetbundle in some way.
The plugin presets you make should be to the same Receiver name and the (Random)SoundfromAB plugin to be the same plugin number. My collections, same as the demo scene, expect a person called "Female" with a SoundfromAB plugin in position 3. These inital choices are yours to decide, the important part is to be consistent so that you can load your collections in a predictable manner. If you have a existing scene that has a different person name or plugin position than the ones in your collection, you can still load the presets but you need to change the triggers inside to reflect the differences. You can't fastload them as before, but still easy enough as the changes are in a single atom.
For the assetbundle loading, considering that it's very useful to have some UI to control aspects of the speech in the first place, like volume for example, adding a button like the "Load voice" used in the demo is probably a non-issue.
The plugin presets options are very fast to load assetbundles, and they look snazzy too if you add a thumbnail to the preset. Making a plugin preset requires you to make the preset first, obviously, and essentially all you need is to remove the non-RandomSoundfromAB plugins from the person, load the assetbundles for the new collection, and save it as a plugin preset.
A problem with the plugin preset option is that the number of the RandomSoundfromAB plugin(s) needs to be the same in the scene and preset to merge load correctly. If the numbers change, the quickspeech atom in the scene will not send the triggers to the right place. If the scenes you have quickspeech in have consistent numbering matching the presets, then you're good, if not you may want to consider making copies of the presets with a different numbering, or edit the scene's JSON to change the plugin order to match the preset's.
Even if you don't have the problem above with preset order, there's still one more caveat, but it's easy to deal. When merge loading, the RandomSoundfromAB will be overwritten, which is what we want to have the new collection, but it also adds a copy of those plugins to the plugins list. This copy does not break anything, but if you do it again it will bring errors in VaM and won't play.
Fortunately, all you need to do is, before loading a new plugin preset, go to the person's plugins list, remove the copies, and you're good to load another preset.
The plugin preset options may be a bit of a pain depending on how you have things, but damn, looks so cool.
A problem with the plugin preset option is that the number of the RandomSoundfromAB plugin(s) needs to be the same in the scene and preset to merge load correctly. If the numbers change, the quickspeech atom in the scene will not send the triggers to the right place. If the scenes you have quickspeech in have consistent numbering matching the presets, then you're good, if not you may want to consider making copies of the presets with a different numbering, or edit the scene's JSON to change the plugin order to match the preset's.
Even if you don't have the problem above with preset order, there's still one more caveat, but it's easy to deal. When merge loading, the RandomSoundfromAB will be overwritten, which is what we want to have the new collection, but it also adds a copy of those plugins to the plugins list. This copy does not break anything, but if you do it again it will bring errors in VaM and won't play.
Fortunately, all you need to do is, before loading a new plugin preset, go to the person's plugins list, remove the copies, and you're good to load another preset.
The plugin preset options may be a bit of a pain depending on how you have things, but damn, looks so cool.
Example setup using UIAssist for fast loading:
Speech | Music | ||
Remarks
- I have made so far about 20 collections that I can change to in any quickspeech enabled scene I made following the audio folders model used.
- I've also started making audioassetbundle collections for types of songs. All it's needed is a AudioSource atom with a RandomSoundfromAB plugin in it, maybe a button or two in the scene to control it, and it's ready to rock.
- Keep a copy of the original audio files, even after you make a assetbundle with them. Chances are you will be changing something at some point in the collections, and it's much easier to make a new assetbundle with the audio files than rip the content from the assetbundle.
- Match your audio assetbundles to the needs of how they are meant to be used in a scene.
- Explore the other guides in the Hub, they're full of great tips and ideas.
Credits and thank yous
This guide is possible because of a collection of existing tools, comments, guides, etc, hard to keep track of who said or did what.
I would like to thank everyone who share their work and knowledge in the Hub and Discord, but if I may mention someone that would be MacGruber. He provides the tools needed (Logicbricks), the guide to make assetbundles, and shared the advantages of using audio assetbundles to do things that someone like me, no Unity or dev familiarity, could follow and use that to find new ways to improve the VaM experience.
Demo scene
AcidBubbles - Embody, Glance, Timeline
crimeless - Cum clothes
Everlaster - FloatParamRandomizerEE, TittyMagic
hazmhox - VAMMoan, VAMOverlays, VAMStory, fluids101
MacGruber - Life, Logicbricks
Molmark - Cum clothes
Saking55 - AutoBulger
Spacegog - Rotate to Camera
Skippy - Cum clothes
ToumeiHitsuji - DiviningRod
WeebU - Morphs
Sorry if I missed anyone whose assets are used in this scene.