/// <summary> /// Processes ActivityReceived events. /// Along with various info that can be found in an event, it also contains /// a "HasAudio" flag that can be used to signal audio is present/ready for processing /// </summar> private void DialogServiceConnector_ActivityReceived(object sender, ActivityReceivedEventArgs e) { Debug.Log($"Activity received:\r\n {e.Activity} "); if (e.HasAudio) { Debug.Log($"Audio received"); var audio = e.Audio; // for sample purposes, just save the entire file and playback. (can improved with streaming) var buffer = new byte[800]; uint bytesRead = 0; while ((bytesRead = audio.Read(buffer)) > 0) { byteStream.Write(buffer, 0, (int)bytesRead); } // Write a wav header on the final stream now that we know the full length if (byteStream.Length > 0) { WaveAudioData.WriteWavHeader(finalStream, false, 1, 16, 16000, (int)byteStream.Length); byteStream.WriteTo(finalStream); audioData = new WaveAudioData(finalStream.ToArray()); ClearStream(byteStream); ClearStream(finalStream); } } }
// Update is called once per frame private void Update() { lock (threadLocker) { recognizedText.text = recognizedString; errorText.text = errorString; stateIndicator.text = stateIndicatorString; } if (audioData != null) { Debug.Log($"Creating and playing audio clip"); var clip = AudioClip.Create("TTS_Audio", audioData.AudioSamples, 1, 16000, false); clip.SetData(audioData.AudioData, 0); ttsAudio.clip = clip; ttsAudio.Play(); audioStarted = true; audioData = null; } if (audioStarted && !ttsAudio.isPlaying) { audioStarted = false; } }
// Update is called once per frame private void Update() { #if PLATFORM_ANDROID if (!micPermissionGranted && Permission.HasUserAuthorizedPermission(Permission.Microphone)) { micPermissionGranted = true; } #elif PLATFORM_IOS if (!micPermissionGranted && Application.HasUserAuthorization(UserAuthorization.Microphone)) { micPermissionGranted = true; } #endif lock (threadLocker) { if (listenOnceButton != null) { listenOnceButton.interactable = micPermissionGranted; } recognizedText.text = recognizedString; errorText.text = errorString; stateIndicator.text = stateIndicatorString; } if (audioData != null) { Debug.Log($"Creating and playing audio clip"); var clip = AudioClip.Create("TTS_Audio", audioData.AudioSamples, 1, 16000, false); clip.SetData(audioData.AudioData, 0); ttsAudio.clip = clip; ttsAudio.Play(); audioStarted = true; audioData = null; } if (audioStarted && !ttsAudio.isPlaying) { audioStarted = false; } }