VAMMoan
That'd be much appreciated!
Just gonna slap it here.

Needed resources:

-- Unity section --
1. Install Unity 2018.1.9f2 and open up a new project.
2. Drag AssetBundleCreator.cs into the assets folder.
3. Make two new folders in the assets folder called "VAMMoan" and "AssetBundles" by right clicking -> Create -> Folder.
0kWc7cd.png

5. Make a new folder in the VAMMoan folder named with the name of your voice set's character (ex: Seth, Isabella). Doesn't have to be any of the already existing ones that come with VAMMoan.
6. Inside there, drag all your audio clips in. I'll be using Ogg Vorbis clips I made using Audacity using its export selected audio function.
7. Select all the clips with Ctrl+A.
8. Click the dropdown box in the bottom right, click "New..", then input "voices.voicebundle".
LGdtrvl.png

9. Right click the VAMMoan folder -> Build Asset Bundle.
10. Right click the Assets folder -> Show in Explorer, then open the AssetBundles folder in the Explorer window that pops up. Keep this open as we'll need it later.

We're done with Unity now, you can save your project and close it.

-- Plugin section --
1. Unpack the original VAMMoan VAR (7-Zip recommended).
The following step's optional, it prevents clashing. Skip it if you don't plan to carry on using the original plugin as well.
2. Open meta.json with your favourite text editor and change the creator and package name to something else (Ex: sorrow, vammoanextra).
3. Navigate to Custom\Scripts\VAMMoan\audio.
4. Make a new folder with the name from step 5 of the previous section, then copy voice.jsondb to it.
5. Make your changes to the voice.jsondb template in your text editor. Make sure the filenames match and your voice set's name is right. minArousal & maxArousal set to 3.0 means intensity 3.
6. Copy over and replace voices.voicebundle from step 10 of the previous section.
You can delete the original voice folders now if you want (Abby, Claire etc.) as they won't be used.
7. Navigate back to the root of the unpacked VAR.
8. Select the Custom folder & meta.json, then 7-Zip -> right click -> Add to Archive. Name it <creator>.<package name>.1.var (ex: sorrow.vammoanextra.1.var). Store compression's fine.
9. Put your new VAR into VAM's AddonPackages folder.
 
Just gonna slap it here.

Needed resources:

-- Unity section --
1. Install Unity 2018.1.9f2 and open up a new project.
2. Drag AssetBundleCreator.cs into the assets folder.
3. Make two new folders in the assets folder called "VAMMoan" and "AssetBundles" by right clicking -> Create -> Folder.
0kWc7cd.png

5. Make a new folder in the VAMMoan folder named with the name of your voice set's character (ex: Seth, Isabella). Doesn't have to be any of the already existing ones that come with VAMMoan.
6. Inside there, drag all your audio clips in. I'll be using Ogg Vorbis clips I made using Audacity using its export selected audio function.
7. Select all the clips with Ctrl+A.
8. Click the dropdown box in the bottom right, click "New..", then input "voices.voicebundle".
LGdtrvl.png

9. Right click the VAMMoan folder -> Build Asset Bundle.
10. Right click the Assets folder -> Show in Explorer, then open the AssetBundles folder in the Explorer window that pops up. Keep this open as we'll need it later.

We're done with Unity now, you can save your project and close it.

-- Plugin section --
1. Unpack the original VAMMoan VAR (7-Zip recommended).
The following step's optional, it prevents clashing. Skip it if you don't plan to carry on using the original plugin as well.
2. Open meta.json with your favourite text editor and change the creator and package name to something else (Ex: sorrow, vammoanextra).
3. Navigate to Custom\Scripts\VAMMoan\audio.
4. Make a new folder with the name from step 5 of the previous section, then copy voice.jsondb to it.
5. Make your changes to the voice.jsondb template in your text editor. Make sure the filenames match and your voice set's name is right. minArousal & maxArousal set to 3.0 means intensity 3.
6. Copy over and replace voices.voicebundle from step 10 of the previous section.
You can delete the original voice folders now if you want (Abby, Claire etc.) as they won't be used.
7. Navigate back to the root of the unpacked VAR.
8. Select the Custom folder & meta.json, then 7-Zip -> right click -> Add to Archive. Name it <creator>.<package name>.1.var (ex: sorrow.vammoanextra.1.var). Store compression's fine.
9. Put your new VAR into VAM's AddonPackages folder.
I wonder, is there a way we could modify the plugin to allow an 'import' feature so that the community can create/add different voice packs to share? Then just download and 'import' the voices you want?
 
Just gonna slap it here.

Needed resources:

-- Unity section --
1. Install Unity 2018.1.9f2 and open up a new project.
2. Drag AssetBundleCreator.cs into the assets folder.
3. Make two new folders in the assets folder called "VAMMoan" and "AssetBundles" by right clicking -> Create -> Folder.
0kWc7cd.png

5. Make a new folder in the VAMMoan folder named with the name of your voice set's character (ex: Seth, Isabella). Doesn't have to be any of the already existing ones that come with VAMMoan.
6. Inside there, drag all your audio clips in. I'll be using Ogg Vorbis clips I made using Audacity using its export selected audio function.
7. Select all the clips with Ctrl+A.
8. Click the dropdown box in the bottom right, click "New..", then input "voices.voicebundle".
LGdtrvl.png

9. Right click the VAMMoan folder -> Build Asset Bundle.
10. Right click the Assets folder -> Show in Explorer, then open the AssetBundles folder in the Explorer window that pops up. Keep this open as we'll need it later.

We're done with Unity now, you can save your project and close it.

-- Plugin section --
1. Unpack the original VAMMoan VAR (7-Zip recommended).
The following step's optional, it prevents clashing. Skip it if you don't plan to carry on using the original plugin as well.
2. Open meta.json with your favourite text editor and change the creator and package name to something else (Ex: sorrow, vammoanextra).
3. Navigate to Custom\Scripts\VAMMoan\audio.
4. Make a new folder with the name from step 5 of the previous section, then copy voice.jsondb to it.
5. Make your changes to the voice.jsondb template in your text editor. Make sure the filenames match and your voice set's name is right. minArousal & maxArousal set to 3.0 means intensity 3.
6. Copy over and replace voices.voicebundle from step 10 of the previous section.
You can delete the original voice folders now if you want (Abby, Claire etc.) as they won't be used.
7. Navigate back to the root of the unpacked VAR.
8. Select the Custom folder & meta.json, then 7-Zip -> right click -> Add to Archive. Name it <creator>.<package name>.1.var (ex: sorrow.vammoanextra.1.var). Store compression's fine.
9. Put your new VAR into VAM's AddonPackages folder.

Thanks a lot for putting this together. Will go download 2018 and give it a whirl. Will get back to you on the progress.

Thanks again for the hard work, this couldn't have been easy to figure out.

hazmhox created something amazing and this tutorial makes it even more flexible.
 
I wonder, is there a way we could modify the plugin to allow an 'import' feature so that the community can create/add different voice packs to share? Then just download and 'import' the voices you want?
Yea for sure .. but probably hazmhox would be the only one who knows how to do it best. Is he even active anymore?

I dig how our avatars are complete opposites. good vs bad girls. 😆
 
Yea for sure .. but probably hazmhox would be the only one who knows how to do it best. Is he even active anymore?

I dig how our avatars are complete opposites. good vs bad girls. 😆
hahaha yeah they are :) The avatar on mine is a screenshot of my wife's VaMself :)
 
I think I found a bug/issue. If I add VaMMoan to my scene and crank up the Voice Volume all the way up to 100, the moans are plenty loud. However, if I disable the plugin and re-enable it (either manually or via a button), the audio gets cuts down drastically (probably down to 25% of the original volume). No amount of playing with the sliders returns it back to it's original loudness. If I remove the plugin entirely and re-add it, the volume returns to the regular loud volume. Anyone else experience this or know of a fix? Thanks.
 
I think I found a bug/issue. If I add VaMMoan to my scene and crank up the Voice Volume all the way up to 100, the moans are plenty loud. However, if I disable the plugin and re-enable it (either manually or via a button), the audio gets cuts down drastically (probably down to 25% of the original volume). No amount of playing with the sliders returns it back to it's original loudness. If I remove the plugin entirely and re-add it, the volume returns to the regular loud volume. Anyone else experience this or know of a fix? Thanks.
The only issues I've ever had are when mixing plugins that affect the head audio output. And in head audio, disable spatialize and raise the minimize distance.
 
The only issues I've ever had are when mixing plugins that affect the head audio output. And in head audio, disable spatialize and raise the minimize distance.
Yeah, could be something to do with that. Thanks. I'll do some more testing. I was able to get around it with adding a Voice Volume slider. That makes it so the plugin always remains enabled, but I can effectively disable it by sliding the Voice Volume down to 0.
 
Hi hazmhox and community, I am planning to link VAMMoan with a new dynamic plugin erection system. I see that VAMMoan exposes
public JSONStorableFloat VAMMValue_CurrentArousal; and a few more, but how can I read from and post to these values from another plugin?
I tried
Code:
var = GetFloatParamValue ("VAMMValue_CurrentArousal");
but this will only get me zeroes.
Sorry for the noob question, and thanks a lot for any hint!
 
Hi hazmhox and community, I am planning to link VAMMoan with a new dynamic plugin erection system. I see that VAMMoan exposes
public JSONStorableFloat VAMMValue_CurrentArousal; and a few more, but how can I read from and post to these values from another plugin?
I tried
Code:
var = GetFloatParamValue ("VAMMValue_CurrentArousal");
but this will only get me zeroes.
Sorry for the noob question, and thanks a lot for any hint!

Hi!

Sadly you can't grab the value like this : )

You always need to grab the atom that contains the storable and read/update it. As a reference you can use a scene file json to help you out. Let's take an invisible light for instance:
JSON:
      {
         "id" : "InvisibleLight#2",
         "on" : "true",
         "type" : "InvisibleLight",
         "position" : {
            "x" : "0.29",
            "y" : "1.833",
            "z" : "0.238"
         },
         "rotation" : {
            "x" : "0",
            "y" : "0",
            "z" : "0"
         },
         "containerPosition" : {
            "x" : "1.819012",
            "y" : "1.654946",
            "z" : "-4.944258"
         },
         "containerRotation" : {
            "x" : "44.34476",
            "y" : "137.8413",
            "z" : "278.234"
         },
         "storables" : [
            {
               "id" : "Light",
               "intensity" : "1.539382",
               "spotAngle" : "64.16201",
               "shadowStrength" : "0.701265",
               "type" : "Spot",
               "renderType" : "ForcePixel",
               "shadowResolution" : "VeryHigh",
               "color" : {
                  "h" : "0.5810193",
                  "s" : "0.3543967",
                  "v" : "0.7072403"
               }
            }, [...]

There's the "storables" array, and in this case you have the "Light" parameters ( "id":"Light" ).
To access that through code at runtime... let's say you would want to grab the light intensity... you would need to grab the atom and do:

C#:
myAtom.GetStorableByID("Light").GetFloatParamValue("intensity");

So in your case, you need to grab your person, grab the plugin, get the float. Kind of like this ( looking at all Persons, grabing VAMM, logging the value ):

C#:
            foreach(Atom at in SuperController.singleton.GetAtoms().Where(atom => atom.type == "Person") )
            {
                SuperController.LogMessage(""+at.GetStorableByID("plugin#0_VAMMoanPlugin.VAMMoan").GetFloatParamValue("VAMM CurrentArousal"));
                SuperController.LogMessage(""+at.GetStorableByID("plugin#0_VAMMoanPlugin.VAMMoan").GetFloatParamValue("VAMM TriggerCount"));
            }

You obviously can't rely on "plugin#0_VAMMoanPlugin.VAMMoan" like this if you plan to make a plugin that dynamically grabs the value from a person. Because the plugin can be set in any order by the player/creator when making a scene. You would need to look at the pluginmanager storable, locate VAMMoan and then only then, get your values : )

If you haven't noticed, the "name" of the param is always the "full name", not the internal JSONStorable variable name from the target plugin. You can find the full name if they are obviously registered, when you create a trigger:

fullnames-variables.png
 
Hi!

Sadly you can't grab the value like this : )

You always need to grab the atom that contains the storable and read/update it. As a reference you can use a scene file json to help you out. Let's take an invisible light for instance:
JSON:
      {
         "id" : "InvisibleLight#2",
         "on" : "true",
         "type" : "InvisibleLight",
         "position" : {
            "x" : "0.29",
            "y" : "1.833",
            "z" : "0.238"
         },
         "rotation" : {
            "x" : "0",
            "y" : "0",
            "z" : "0"
         },
         "containerPosition" : {
            "x" : "1.819012",
            "y" : "1.654946",
            "z" : "-4.944258"
         },
         "containerRotation" : {
            "x" : "44.34476",
            "y" : "137.8413",
            "z" : "278.234"
         },
         "storables" : [
            {
               "id" : "Light",
               "intensity" : "1.539382",
               "spotAngle" : "64.16201",
               "shadowStrength" : "0.701265",
               "type" : "Spot",
               "renderType" : "ForcePixel",
               "shadowResolution" : "VeryHigh",
               "color" : {
                  "h" : "0.5810193",
                  "s" : "0.3543967",
                  "v" : "0.7072403"
               }
            }, [...]

There's the "storables" array, and in this case you have the "Light" parameters ( "id":"Light" ).
To access that through code at runtime... let's say you would want to grab the light intensity... you would need to grab the atom and do:

C#:
myAtom.GetStorableByID("Light").GetFloatParamValue("intensity");

So in your case, you need to grab your person, grab the plugin, get the float. Kind of like this ( looking at all Persons, grabing VAMM, logging the value ):

C#:
            foreach(Atom at in SuperController.singleton.GetAtoms().Where(atom => atom.type == "Person") )
            {
                SuperController.LogMessage(""+at.GetStorableByID("plugin#0_VAMMoanPlugin.VAMMoan").GetFloatParamValue("VAMM CurrentArousal"));
                SuperController.LogMessage(""+at.GetStorableByID("plugin#0_VAMMoanPlugin.VAMMoan").GetFloatParamValue("VAMM TriggerCount"));
            }

You obviously can't rely on "plugin#0_VAMMoanPlugin.VAMMoan" like this if you plan to make a plugin that dynamically grabs the value from a person. Because the plugin can be set in any order by the player/creator when making a scene. You would need to look at the pluginmanager storable, locate VAMMoan and then only then, get your values : )

If you haven't noticed, the "name" of the param is always the "full name", not the internal JSONStorable variable name from the target plugin. You can find the full name if they are obviously registered, when you create a trigger:

View attachment 351058
Thank you so much for your effort and time, I will happily go through this and try get it running!
 
I think I found a bug/issue. If I add VaMMoan to my scene and crank up the Voice Volume all the way up to 100, the moans are plenty loud. However, if I disable the plugin and re-enable it (either manually or via a button), the audio gets cuts down drastically (probably down to 25% of the original volume). No amount of playing with the sliders returns it back to it's original loudness. If I remove the plugin entirely and re-add it, the volume returns to the regular loud volume. Anyone else experience this or know of a fix? Thanks.

Never had that situation nor succeeded to reproduce it.
One thing I do not understand is that, the plugin by default is at 1.00, how can you "crank it up", it's by default at the maximum value : )

The only modified thing on the voice is the attenuation, and it's properly set and removed no matter what you do (disable or remove). So I don't really know where your bug comes from :/
 
Thanks again for the hard work, this couldn't have been easy to figure out.

A little bit late to the party but...
Well, even tho I do not say that to criticize Sorrow's reverse engineering work, I've explained many times in this discussion and on the forums how the plugin works, so there's that :p
And the other part is, there's a json file in the plugin that has all the paths to the audio files, so it does help too ^^
But! thanks to him for making a quick tutorial : )


I wonder, is there a way we could modify the plugin to allow an 'import' feature so that the community can create/add different voice packs to share? Then just download and 'import' the voices you want?

Almost everything is possible if you take the time. On the other hand, me wanting to inject time for something that nobody will do is another parameter to take into account.

I've answered that question about several times over the years, but I'm gonna do an effort to repeat myself because you know I like you Bob :p
  • I've said a while back I would work on it if someone did bring me a high quality bundle to work with. No one ever did.
  • The "magic" of VAMMoan comes from the sample counts mostly... the code itself is just... playing scheduled sounds. Which means :
    • if people makes bundles with a couple dozen sounds, it won't just work. As in "not be great", it will work, but voices will simply be not nice enough.
    • If you're only bundling a dozen of sounds, why would you need VAMMoan to play that back? You're using an advanced plugin with a lot of triggers and complexity when you could use for instance audiomate to do the same job, without going through the long process of making a bundle for VAMM... or simply, use the vanilla audiosources.
  • Last and most important: VAMM has entered it's "end of life" period due to VAMM2 close arrival.
Bonus stage for the future:
  • VAMM was around 250/300 samples per voice (without counting the additional sfxs), VAMM2 is over 1200 samples per voice (again without sfxs). The complexity and the insane amount of samples of the system makes it even less likely to allow custom content.

The sad reality is: no one is dumb enough to handle, mix, record, slice, export... several hundreds of audio files. It was the case for VAMM, and it's gonna be 10 times worst for VAMM2. If it was the case, we would already have nice additional voice libraries and I could have added them to the plugin... and as you see, pretty much no one has worked towards that goal. Even with another plugin.

It's a long and tedious process and nobody wants to tacle that. And you also need some advanced audio engineering skills if you want to do that properly. But even if you ignore that aspect: you need recordings. No porn rip, or game rip, is gonna work at all with VAMMoan. So people need to contract voice actor/tresses... which, well, no one does because it's not cheap.

I think it covers pretty much everything. TL;DR: if you have a couple dozen sounds, use a plugin to play them back... don't see VAMMoan as a magic wand that will make a short sample pool sound great on it's own. ; )
 
A little bit late to the party but...
Well, even tho I do not say that to criticize Sorrow's reverse engineering work, I've explained many times in this discussion and on the forums how the plugin works, so there's that :p
And the other part is, there's a json file in the plugin that has all the paths to the audio files, so it does help too ^^
But! thanks to him for making a quick tutorial : )




Almost everything is possible if you take the time. On the other hand, me wanting to inject time for something that nobody will do is another parameter to take into account.

I've answered that question about several times over the years, but I'm gonna do an effort to repeat myself because you know I like you Bob :p
  • I've said a while back I would work on it if someone did bring me a high quality bundle to work with. No one ever did.
  • The "magic" of VAMMoan comes from the sample counts mostly... the code itself is just... playing scheduled sounds. Which means :
    • if people makes bundles with a couple dozen sounds, it won't just work. As in "not be great", it will work, but voices will simply be not nice enough.
    • If you're only bundling a dozen of sounds, why would you need VAMMoan to play that back? You're using an advanced plugin with a lot of triggers and complexity when you could use for instance audiomate to do the same job, without going through the long process of making a bundle for VAMM... or simply, use the vanilla audiosources.
  • Last and most important: VAMM has entered it's "end of life" period due to VAMM2 close arrival.
Bonus stage for the future:
  • VAMM was around 250/300 samples per voice (without counting the additional sfxs), VAMM2 is over 1200 samples per voice (again without sfxs). The complexity and the insane amount of samples of the system makes it even less likely to allow custom content.

The sad reality is: no one is dumb enough to handle, mix, record, slice, export... several hundreds of audio files. It was the case for VAMM, and it's gonna be 10 times worst for VAMM2. If it was the case, we would already have nice additional voice libraries and I could have added them to the plugin... and as you see, pretty much no one has worked towards that goal. Even with another plugin.

It's a long and tedious process and nobody wants to tacle that. And you also need some advanced audio engineering skills if you want to do that properly. But even if you ignore that aspect: you need recordings. No porn rip, or game rip, is gonna work at all with VAMMoan. So people need to contract voice actor/tresses... which, well, no one does because it's not cheap.

I think it covers pretty much everything. TL;DR: if you have a couple dozen sounds, use a plugin to play them back... don't see VAMMoan as a magic wand that will make a short sample pool sound great on it's own. ; )
I appreciate the detailed explaination, thank you very much! Also glad to hear you don't hate me, so that's always a plus :)
 
A little bit late to the party but...
Well, even tho I do not say that to criticize Sorrow's reverse engineering work, I've explained many times in this discussion and on the forums how the plugin works, so there's that :p
And the other part is, there's a json file in the plugin that has all the paths to the audio files, so it does help too ^^
But! thanks to him for making a quick tutorial : )




Almost everything is possible if you take the time. On the other hand, me wanting to inject time for something that nobody will do is another parameter to take into account.

I've answered that question about several times over the years, but I'm gonna do an effort to repeat myself because you know I like you Bob :p
  • I've said a while back I would work on it if someone did bring me a high quality bundle to work with. No one ever did.
  • The "magic" of VAMMoan comes from the sample counts mostly... the code itself is just... playing scheduled sounds. Which means :
    • if people makes bundles with a couple dozen sounds, it won't just work. As in "not be great", it will work, but voices will simply be not nice enough.
    • If you're only bundling a dozen of sounds, why would you need VAMMoan to play that back? You're using an advanced plugin with a lot of triggers and complexity when you could use for instance audiomate to do the same job, without going through the long process of making a bundle for VAMM... or simply, use the vanilla audiosources.
  • Last and most important: VAMM has entered it's "end of life" period due to VAMM2 close arrival.
Bonus stage for the future:
  • VAMM was around 250/300 samples per voice (without counting the additional sfxs), VAMM2 is over 1200 samples per voice (again without sfxs). The complexity and the insane amount of samples of the system makes it even less likely to allow custom content.

The sad reality is: no one is dumb enough to handle, mix, record, slice, export... several hundreds of audio files. It was the case for VAMM, and it's gonna be 10 times worst for VAMM2. If it was the case, we would already have nice additional voice libraries and I could have added them to the plugin... and as you see, pretty much no one has worked towards that goal. Even with another plugin.

It's a long and tedious process and nobody wants to tacle that. And you also need some advanced audio engineering skills if you want to do that properly. But even if you ignore that aspect: you need recordings. No porn rip, or game rip, is gonna work at all with VAMMoan. So people need to contract voice actor/tresses... which, well, no one does because it's not cheap.

I think it covers pretty much everything. TL;DR: if you have a couple dozen sounds, use a plugin to play them back... don't see VAMMoan as a magic wand that will make a short sample pool sound great on it's own. ; )
Also, can you define close for us? ;-)
 
A little bit late to the party but...
Well, even tho I do not say that to criticize Sorrow's reverse engineering work, I've explained many times in this discussion and on the forums how the plugin works, so there's that :p
And the other part is, there's a json file in the plugin that has all the paths to the audio files, so it does help too ^^
But! thanks to him for making a quick tutorial : )

Yea sorrow made an awesome tut!

But if you're saying VAM 2 is fast approaching.. I might hold off on installing Unity 2018. :oops:
 
LOL! Why you angry :p

I said VAMM2, not VAM2 (just being sure, because anyone could catch on that sentence and think I'm saying that the game is close). I'm talking about the teaser version of VAM's 2 audio for VAM1.

We were discussing that with Juno recently, firing up Unity, even 2018 is not a loss of time. You will learn precious processes that are 100% transferable to Unity 202x. So it's never a bad time to start!
 
LOL! Why you angry :p

I said VAMM2, not VAM2 (just being sure, because anyone could catch on that sentence and think I'm saying that the game is close). I'm talking about the teaser version of VAM's 2 audio for VAM1.

We were discussing that with Juno recently, firing up Unity, even 2018 is not a loss of time. You will learn precious processes that are 100% transferable to Unity 202x. So it's never a bad time to start!

Not angry face. Stunned face. 😅

I know Unity. Just didn't have time to install 2018. :)

You mean vam moan ver2? That would be exciting news too. :D
 
Back
Top Bottom