Определить намеренный ответ - Unity и Dialogflow - PullRequest
0 голосов
/ 30 апреля 2020

Мой код изначально возвращал только текстовый ответ. Я попытался добавить звуковой ответ, используя - Определить намеренный ответ , но не уверен, правильно ли я его настроил?

        UnityWebRequest postRequest = new UnityWebRequest(url, "POST");
        RequestBody requestBody = new RequestBody();
        requestBody.queryInput = new QueryInput();
        requestBody.queryInput.audioConfig = new InputAudioConfig();
        requestBody.queryInput.audioConfig.audioEncoding = AudioEncoding.AUDIO_ENCODING_UNSPECIFIED;
        //TODO: check if that the sample rate hertz
        requestBody.queryInput.audioConfig.sampleRateHertz = 16000;
        requestBody.queryInput.audioConfig.languageCode = "en";
        requestBody.inputAudio = sampleString;

        requestBody.detectIntentResponse = new DetectIntentResponse();
        requestBody.detectIntentResponse.outputAudioConfig = new OutputAudioConfig();
        requestBody.detectIntentResponse.outputAudioConfig.outputAudioEncoding = OutputAudioEncoding.OUTPUT_AUDIO_ENCODING_LINEAR_16;
        requestBody.detectIntentResponse.outputAudioConfig.sampleHertzRate = 16000;


        string jsonRequestBody = JsonUtility.ToJson(requestBody, true);
        Debug.Log(jsonRequestBody);

        byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonRequestBody);
        postRequest.SetRequestHeader("Authorization", "Bearer " + AccessToken);
        postRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
        postRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
        //postRequest.SetRequestHeader("Content-Type", "application/json");
        yield return postRequest.SendWebRequest();

            Debug.Log("Response: " + postRequest.downloadHandler.text);
            //text.text = "Response: " + postRequest.downloadHandler.text;


            // Or retrieve results as binary data
            byte[] resultbyte = postRequest.downloadHandler.data;
            string result = System.Text.Encoding.UTF8.GetString(resultbyte);
            ResponseBody content = (ResponseBody)JsonUtility.FromJson<ResponseBody>(result);
            Debug.Log(content.queryResult.fulfillmentText);

            text.text = "Response: " + content.queryResult.fulfillmentText;

            byte[] response = content.detectIntentResponse.outputAudio;

Как только я получу аудио, какой будет лучший подход для воспроизведения аудиоклипа?

1 Ответ

0 голосов
/ 30 апреля 2020

Итак, вы захотите обернуть данные в AudioClip, чтобы их можно было воспроизвести с помощью единицы.
Самый простой способ - создать AudioClip и использовать метод SetData(float[] data, int offsetSamples)

AudioSource audio = gameObject.AddComponent,AudioSource>() as AudioSource;
audio.clip.SetData(yourAudio, 0);
...