// Update is called once per frame void Update() { if (PlayClip && !audioSource.isPlaying) { audioSource.Play(); PlayClip = false; } else if (!PlayClip && audioSource.isPlaying) { //audioSource.Stop(); } if (Play) { extraTimeSinceLastUpdate += Time.deltaTime; int samplesSinceLastUpdate = (int)(Channels * Frequency * extraTimeSinceLastUpdate); //check if audioclip ended samplesSinceLastUpdate = Math.Min(CurrentAudioClip.samples - SamplesPlayedInClip, samplesSinceLastUpdate); extraTimeSinceLastUpdate -= (float)samplesSinceLastUpdate / (float)(Channels * Frequency); float[] samplesPlayed = new float[samplesSinceLastUpdate]; CurrentAudioClip.GetData(samplesPlayed, SamplesPlayedInClip); RecentlyPlayedAudio.SetData(samplesPlayed, TotalSamplesPlayed % RecentlyPlayedAudio.samples); SamplesPlayedInClip += samplesSinceLastUpdate; TotalSamplesPlayed += samplesSinceLastUpdate; if (SamplesPlayedInClip == CurrentAudioClip.samples) { WavHelper.WriteWavData("CurrentAudioClip.txt", CurrentAudioClip, 0); //TODO: check channels for each clip AudioClipIndex = (AudioClipIndex + 1) % AudioClipsToPlay.Count; //next and wrap Debug.Log($"Switching to next audiofile {CurrentAudioClip.name}"); SamplesPlayedInClip = 0; Play = false; WavHelper.WriteWavData("RecentlyPlayedAudio.txt", RecentlyPlayedAudio, 0); } VokaturiIntervalRemaining -= Time.deltaTime; if (VokaturiIntervalRemaining <= 0) { //calculate emotions List <VokaturiAnalysis> vokaturiAnalyses = Vokaturi.CalculateEmotion(RecentlyPlayedAudio); Neutrality = vokaturiAnalyses.Average(va => va.EmotionProbabilities.Neutrality); Happiness = vokaturiAnalyses.Average(va => va.EmotionProbabilities.Happiness); Sadness = vokaturiAnalyses.Average(va => va.EmotionProbabilities.Sadness); Anger = vokaturiAnalyses.Average(va => va.EmotionProbabilities.Anger); Fear = vokaturiAnalyses.Average(va => va.EmotionProbabilities.Fear); VokaturiIntervalRemaining = VokaturiInterval; } } }
// Start is called before the first frame update void Start() { AudioSource audioSource = GetComponent <AudioSource>(); AudioClip audioClip = audioSource.clip; Vokaturi.CalculateEmotion(audioClip); Vokaturi.CalculateEmotion(audioClip, 0, 1); Vokaturi.CalculateEmotion(audioClip, 3.99F, 1); for (int i = 0; i < audioClip.length; i++) { // Vokaturi.CalculateEmotion(audioClip, i, 1); } MicrophoneRecorder microphoneRecorder; }