quickspeech: quickly load and switch random audio speech

Guides quickspeech: quickly load and switch random audio speech

quickspeech banner


Have you been playing around with Text to Speech like Uberduck, ElevenLabs, Tortoise, and many more?
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:


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.
  1. Copy audio files/folders to the Audio folder in your Unity project
  2. Drag the files/folders to the Configure tab to create one or more assetbundles
  3. Write a name for your assetbundle:
    3a. Your folders and files show up here
    3b. Set the audio options for your files if needed
  4. Build the assetbundle(s)
    4a. A rotating cog will show up when building the assetbundles. Wait for it to disappear
  5. Add the name(s) of the assetbundle(s) with .assetbundle at the end and click "Copy Build Assetbundles". Make sure the folders above are correct
  6. You're done, congratulate yourself on your first audio assetbundle
Note on folders:
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.
assetbundles.png


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 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
  1. Load a assetbundle in the person's SoundfromAB plugin
  2. Change the quickspeech atom's triggers to the newly loaded assetbundle folders
  3. Save as a quickspeech atom preset
  4. Repeat for all collections you have until you have all the presets you want
Using the quickspeech atom presets

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.

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.


Example setup using UIAssist for fast loading:

Speech
Music
speech.png
music-png.218727


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.
  • music.png
    music.png
    159.5 KB · Views: 0
Author
atani
Downloads
1,738
Views
8,970
Dependencies
19
Packages
1
Total Size
0.39 MB
Version
2
First release
Last update
Rating
5.00 star(s) 2 ratings

More resources from atani

Latest updates

  1. Updated and merged the demo scene with the guide

    The demo scene doesn't need to be a separate resource from the guide, so I'm tidying it up and...
  2. 2023/04/04

    Guide updated to reflect the changes in the demonstration scene using the new MacGruber's...
  3. Added changes to upcoming Logicbricks v14 new options

    MacGruber's Early-Access Logicbricks v14 introduces new options for sounds in assetbundles. This...

Latest reviews

I haven't tried this out right now but 5 stars for the detailed instruction in advance 👏💖
atani
atani
Thanks. The implementation is not important, what matters is the attempt at "modularity" and scaling.
Upvote 0
Thanks for taking the time to write such things down!

A better and simple step-by-step guide regarding the audio asset creation would be the godsend. ;)
atani
atani
Thanks for reviewing. No problem, I can add some screenshots to show the audio assetbundle procedure.
Upvote 0
Back
Top Bottom