Hi! i have a problem this script.
- using UnityEngine;
-
- public class EspressioniScript : MonoBehaviour
- {
- public Animator animComp;
- private enum EspressioniFaccia {TalkB = 1, StopTalk = 0 }
- public AudioSource audioSource;
- public float updateStep = 0.1f;
- public int sampleDataLength = 1024;
- public float TimeChangeAnim = 2;
-
- private float currentUpdateTime = 0f;
-
- public float clipLoudness;
- private float[ ] clipSampleData;
-
- private int RandomAnimWord;
- public int AnimWord;
-
- public bool MyFunctionCalled;
-
- [Header(“Prossimo Audio Script”)]
-
- public AudioSource AudioS;
-
- [Header(“Write here the Size Of AudioC”)]
- public int n;
- [SerializeField]
- public AudioClip[ ] AudioC;
-
- public bool MyFunctionCalled2;
-
- public int NumeroAudio = 0;
-
- void Start()
- {
- clipSampleData = new float[sampleDataLength];
-
- FirstAudio();
- }
-
-
-
- // Update is called once per frame
-
-
- void Update()
- {
- currentUpdateTime += Time.deltaTime;
- if (currentUpdateTime >= updateStep)
- {
- currentUpdateTime = 0f;
- float[ ] samples = new float[audioSource.clip.samples * audioSource.clip.channels];
- audioSource.clip.GetData(clipSampleData, audioSource.timeSamples);
- clipLoudness = 0f;
- foreach (var sample in clipSampleData)
- {
- clipLoudness += Mathf.Abs(sample);
- }
- clipLoudness /= sampleDataLength;
- }
- {
- if (clipLoudness > 0.025)
- {
- animComp.SetInteger(“EspressioniFaccia”, AnimWord);
- }
- if (clipLoudness < 0.025 && clipLoudness != 0)
- {
- animComp.SetInteger(“EspressioniFaccia”, 0);
- {
- if (MyFunctionCalled == false)
- {
- RandomAnim();
- MyFunctionCalled = true;
- }
- }
-
- }
- if (clipLoudness == 0)
- {
- animComp.SetInteger(“EspressioniFaccia”, 0);
- StopRandomAnim();
- }
- }
- // Update Prossimo Audio
- if (NumeroAudio >= n + 1)
- {
- ResetAudio();
- }
-
- if (!AudioS.isPlaying && NumeroAudio <= n && MyFunctionCalled2 == false)
- {
- MyFunctionCalled2 = true;
- NextAudio();
- }
- }
-
- void RandomAnim()
- {
- int RandomAnimWord = Random.Range(1, 4);
- AnimWord = RandomAnimWord;
- Invoke(“RandomAnim”, TimeChangeAnim);
-
- }
- void StopRandomAnim()
- {
- MyFunctionCalled = false;
- CancelInvoke(“RandomAnim”);
- }
- //Script Audio
- void NextAudio()
- {
- MyFunctionCalled2 = false;
- NumeroAudio += 1;
- AudioS.clip = AudioC[NumeroAudio];
- AudioS.Play();
- }
- void FirstAudio()
- {
- MyFunctionCalled2 = false;
- NumeroAudio = 0;
- AudioS.clip = AudioC[NumeroAudio];
- AudioS.Play();
- }
- void ResetAudio()
- {
- NumeroAudio = 0;
- AudioS.clip = AudioC[NumeroAudio];
- AudioS.Play();
- }
-
-
- }
-
This script syncronize an animation controlled by an animator with the Decibels of an audioclip (the character talk when there are Decibels). i get this two errors:
-1- C:\buildslave\unity\build\Modules/Audio/Public/sound/SoundManager.cpp(519) : Error executing result = instance->m_Sound->lock(offsetBytes, lengthBytes, &ptr1, &ptr2, &len1, &len2) (An invalid parameter was passed to this function. ) UnityEngine.AudioClip:GetData() EspressioniScript:Update() (at Assets/Livelli/Dettagli Personaggi/Espressioni Script/EspressioniScript.cs:53)
-2- IndexOutOfRangeException: Index was outside the bounds of the array. EspressioniScript.NextAudio () (at Assets/Livelli/Dettagli Personaggi/Espressioni Script/EspressioniScript.cs:114) EspressioniScript.Update () (at Assets/Livelli/Dettagli Personaggi/Espressioni Script/EspressioniScript.cs:93)
– Someone Can help me? thanks!