public void playSingleDirAudio(LocalisedAudioClip currentAudio)
        {
            directionalVoiceSource.clip = currentAudio.AudioFile;
            Debug.Log(directionalVoiceSource.clip.length + " is the length of this clip");
            Vector3 audioLocation = currentAudio.UnityLocation;

            audioLocation.y = 1;
            directionalVoiceSource.transform.position = audioLocation;
            Debug.Log("Current Location: " + transform.position.ToString() + "    " + audioLocation.ToString());
            directionalVoiceSource.Play();
        }
        public IEnumerator playDirAudioFromQueue()
        {
            Debug.Log("Playing Dir Audio Queue");
            yield return(new WaitWhile(() => (dirAudioQueue.Count < 1)));

            yield return(new WaitWhile(() => directionalVoiceSource.isPlaying));

            LocalisedAudioClip currentAudio = dirAudioQueue.Dequeue();

            playSingleDirAudio(currentAudio);

            yield return(null);
        }
        public IEnumerator playDirAudioQueue(int featureCount)
        {
            yield return(new WaitWhile(() => dirAudioQueue.Count < featureCount));

            Debug.Log("dirAudioQueue: " + dirAudioQueue.Count);
            while (dirAudioQueue.Count != 0)
            {
                yield return(new WaitWhile(() => directionalVoiceSource.isPlaying));

                LocalisedAudioClip currentAudio = dirAudioQueue.Dequeue();
                Debug.Log("Dequeueing, current: " + dirAudioQueue.Count);
                playSingleDirAudio(currentAudio);
            }
            dirAudioQueue.Clear();

            yield return(null);
        }
        public IEnumerator GetTextToSpeech(string text, int order, Vector3 location, bool directionalFlag)
        {
            string accessToken = GetAccessToken();

            Debug.Log("Access Token: " + accessToken);
            WWWForm form = new WWWForm();
            string  body = @"<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-GB'>
              <voice name='Microsoft Server Speech Text to Speech Voice (en-GB, HazelRUS)'>" +
                           text + "</voice></speak>";

            using (var request = new UnityWebRequest())
            {
                // Set the HTTP method
                // Construct the URI

                DownloadHandlerAudioClip downloader = new DownloadHandlerAudioClip(ttsHost, AudioType.MPEG);
                request.downloadHandler = downloader;
                request.url             = ttsHost;
                request.method          = UnityWebRequest.kHttpVerbPOST;
                // Set the content type header
                byte[] textToSend = new System.Text.UTF8Encoding().GetBytes(body);
                Debug.Log("Text to send: " + textToSend);
                request.uploadHandler = (UploadHandler) new UploadHandlerRaw(textToSend);
                //uploader.data = new StringContent(body, Encoding.UTF8, "application/ssml+xml");

                // Set additional header, such as Authorization and User-Agent
                request.SetRequestHeader("Authorization", "Bearer " + accessToken);
                // Update your resource name
                request.SetRequestHeader("User-Agent", "Text2Speech2");
                request.SetRequestHeader("X-Microsoft-OutputFormat", "audio-16khz-128kbitrate-mono-mp3");
                request.SetRequestHeader("Content-Type", "application/ssml+xml");
                // Create a request
                Debug.Log(request.GetRequestHeader("Authorization"));
                Debug.Log(request.GetRequestHeader("User-Agent"));
                Debug.Log(request.GetRequestHeader("X-Microsoft-OutputFormat"));
                Debug.Log("Calling the TTS service. Please wait... \n");
                Debug.Log("Request Body: " + System.Text.Encoding.UTF8.GetString(request.uploadHandler.data));
                yield return(request.SendWebRequest());

                if (request.isNetworkError || request.isHttpError)
                {
                    Debug.Log(request.error);
                    Debug.Log(request.ToString());
                    Debug.Log(request.downloadHandler.data);
                    //Use NULL Object pattern to prevent breaking.
                    dirAudioQueue.Enqueue(LocalisedAudioClip.nullLocalisedAudioClip());
                }
                else
                {
                    //Debug.Log (request.ToString ());
                    if (request.isDone)
                    {
                        Debug.Log("File Length: " + request.downloadedBytes);
                        AudioClip audioFile = downloader.audioClip;
                        if (directionalFlag == true)
                        {
                            yield return(new WaitWhile(() => dirAudioQueue.Count < order));

                            dirAudioQueue.Enqueue(new LocalisedAudioClip(audioFile, location));
                            Debug.Log("Enqueueing, current: " + dirAudioQueue.Count);
                        }
                        else
                        {
                            nonDirectionalVoiceSource.clip = audioFile;
                            nonDirectionalVoiceSource.Play();
                        }
                    }
                }
            }
        }