Good day, thank you for a great Asset. I’ve run into an issue. When I import the Adventure Creator v2.5.0 Add-on using Salsa v 2.5.2 (current in Asset Store) I get these errors (just going to post a few of them):
Assets\Crazy Minnow Studio\Addons\AdventureCreator\Actions\Eyes_SetRandom.cs(108,8): error CS0103: The name ‘eyes’ does not exist in the current context
Assets\Crazy Minnow Studio\Addons\AdventureCreator\Actions\Eyes_SetRandom.cs(130,21): error CS0103: The name ‘eyes’ does not exist in the current context
Assets\Crazy Minnow Studio\Addons\AdventureCreator\Actions\Eyes_SetAffinity.cs(79,8): error CS0103: The name ‘eyes’ does not exist in the current context
Assets\Crazy Minnow Studio\Addons\AdventureCreator\Actions\Emoter_Emote.cs(96,15): error CS0246: The type or namespace name ‘ExpressionComponent’ could not be found (are you missing a using directive or an assembly reference?)
I’m still not fully understanding why a universal oneclick cannot be created here. The ARKit 52 blendshapelocations involve mesh morphs that are universally defined to specific blend shape keys, similar to how a Daz or iClone character has its own specific set of blendshapes (?) … is there something more standardized about the latter set of characters?
Again, it isn’t that simple. The blendshapes are only part of the issue. The Eyes module would not be able to be configured since the bone names would be unknown to apply to the head and eyes sub-modules. So the Eyes module would have to be left out of the mix. The mesh names are also unknown, although this could possibly be overkill-mitigated and possibly error-prone with a search and configuration for all meshes with SkinnedMeshRenderers. And it would also be subject to everyone’s interpretation of the “standardized” shape. As you might have noticed when you looked through our existing OneClicks when you were researching all of this, we don’t always use full blendshape weight values. Many are partials to get a certain look. And this would be wildly variable based on the designer’s interpretation of the shape. As it is, we suggest our OneClicks to be a starting point and not a final result depending on the model and voice characteristics. All of this completely ignores the idea of the designer possibly making mistakes with spelling and/or forgetting to put shapes on required meshes (like eyelashes, beards, etc.) and generating support requests that take additional time to resolve to ultimately not be an offical OneClick’s issue.
So the end result would be a partially-working OneClick that will require loads of adjustment based on the designer’s interpretation of the blendshape names. Which ultimately will be a template that needs to be edited on a per-designer basis. Which leads us back to the original suggestion for the designer to create a relatively simple custom OneClick, for which we have already created documentation to achieve and there are several ‘templates’ (i.e. existing OneClicks) already available for editing.
We would love nothing more than the ability to create a OneClick that worked for everything. At this point, that just isn’t conceivable – perhaps it will be at some point. We love the idea, we just cannot envision how this works at this point. Once you have created your shapes, and have configured a character with the Suite, and have attempted to make a custom OneClick, we are more than happy to assist with any issues you have with creating a custom OneClick for your custom character model. Let me know when you get to that point and I will be happy to assist if necessary.
Hello! I have Salsa and RT-Voice set up on a Character Creator 3 import. I’ve added components Speaker, LiveSpeaker and Salsa RTVoice_Native to my Salsa-empowered CC3 model.
If I test using the ‘Speak’ radio button in Salsa_RTVoice_Native it works! Audio and lipsync both work.
If I send a string of text from Game Creator’s CallMethod/CC3Model/.LiveSpeaker.SpeakNativeLive the string works in audio (I hear it) but the lips do not sync.
Is it recommended to use Speech Text in this case?
I’m not familiar with Game Creator, but my first suggestion based on how I’ve seen some of these types of systems work would be to make sure that Game Creator isn’t instantiating a one-shot audio source. If this is happening then SALSA would not be linked to it and would not be able to analyze the output audio.
Thank you, I’ll start looking there. Great tech by the way. SALSA let’s me work up a proof of concept in a very short time, and use it as the main attraction for a Watson-enabled demo. There’s a lot of flexibility in setting up expressions and phonemes.
Hello!
I’m pretty sure the problem is there is no id linkage to the returned audio when you are calling it from Game Creator. The RTV Uid needs to be set in the Salsa_RTVoice_Native script when calling “SpeakNative”. If Salsa_RTVoice_Native doesn’t have the Uid, it will bail on the the callback. This guard clause is to prevent the model from responding to all other model “speak” actions. The Salsa_RTVoice_Native script is meant to be an example for you to modify for your solution needs. The easiest solution would be to create a method in Salsa_RTVoice_Native that takes a string and makes the Speaker.Instance.SpeakNative call on it’s own, similar to the way the LateUpdate bool trigger does it. Then remove the LateUpdate callback. Something like the following:
I compared the LiveSpeaker script with Salsa_RTVoice_Native and tried adapting the args from LiveSpeaker with the UID example - essentially to try and expose the test string input of Salsa_RTVoice_Native to external callmethods. It wasn’t quite working; I’ll start again with your example. Thank you!
SALSA RT-Voice Integration
v2.5.1 has been released and is available on the SALSA downloads portal.
This version has a few changes to the RT-Voice Native Voice implementation example:
Clarified many of the comment areas to better explain the functionality.
Added a public Speak(string) method to increase the functionality and demonstrate posibilities for implementation questions such as the above few comments.
Fixed an index bug that caused a visual “pop” to occur at the end of sentences/paragraphs as if audio had a noise pop.
Added a 7-viseme configuration setup and selector to coincide with our standard OneClick viseme layout.
Hopefully this script example is more useful to anyone implementing SALSA RT-Voice integration. Remember, please leverage this integration as an example of how to implement RT-Voice integration with SALSA. It is not intended to be a flexible API for all situations and will likely require modifications to meet your specific requirements.
Thanks! Yes I did do this however I didn’t realise that my setting for the define symbol did not stick. For anyone else out there, once you add it in, you have to press ENTER → Thanks to this post https://discussions.unity.com/t/680488
SALSA Dissonance Integration
SalsaDissonanceLink v2.5.1 has been released and is available on the SALSA downloads portal.
This release fixes a null-ref bug when combining SALSA, Dissonance, and Mirror. This is the only change in this release and if you are not experiencing this issue, you can bypass this update if you wish.
Hello again @Crazy-Minnow-Studio
The asset has been very useful so far and has significantly cut dev time. However, I have come across a massive issue. Since I have applied the animator to the character for it to have animations, it mashes up the visemes. When I turn the animator component off, it’s fine but obviously, that is not a solution. I am using the bone function for the visemes (due to the nature of the character). How do I fix this?
Not quite sure what you’re describing. Please send us an email with screenshots, version numbers, invoice number, etc. and a video demonstrating what you are experiencing.
Hello, is it possible to assign a percentage of an emote to a ‘rest’ expression, and perhaps assign an affinity value?
Use case are to have the model smile slightly in-between sentences rather than having a completely neutral expression.
Trying to stream audio from a socket to Salsa , using NAudio
How do I get this to Salsa do i need to use the ‘Use External Analysis’ option, which params to send ?
using (var wo = new WaveOutEvent())
{
WaveStream blockAlignedStream = new BlockAlignReductionStream(WaveFormatConversionStream.CreatePcmStream(new RawSourceWaveStream(ms, new WaveFormat(22050, 16, 1))));
wo.Init(blockAlignedStream);
wo.Play();
while (wo.PlaybackState == PlaybackState.Playing)
{
Debug.Log($"WaveOutEvent playing");
Thread.Sleep(50);
}
}