예제 #1
0
    /// <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);
            }
        }
    }
예제 #2
0
    // 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;
        }
    }
예제 #3
0
    // 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;
        }
    }