Exemple #1
0
        public static string LongName(this AudioEncoding value)
        {
            FieldInfo         field = value.GetType().GetField(value.ToString());
            LongNameAttribute attribute
                = Attribute.GetCustomAttribute(field, typeof(LongNameAttribute))
                  as LongNameAttribute;

            return(attribute == null?value.ToString() : attribute.LongName);
        }
Exemple #2
0
        public static string Command(this AudioEncoding value)
        {
            FieldInfo        field = value.GetType().GetField(value.ToString());
            CommandAttribute attribute
                = Attribute.GetCustomAttribute(field, typeof(CommandAttribute))
                  as CommandAttribute;

            return(attribute == null?value.ToString() : attribute.Command);
        }
Exemple #3
0
        private string ProcessAudioLog(string log, AudioFrame frame, AudioEncoding encoding, ConnectionInfo remoteConnectionInfo)
        {
            var pcmBuffer        = GetPcmAudioBuffer(frame);
            var compressedBuffer = GetCompressedAudioBuffer(frame);

            return(log
                   .Replace("{footprint}", compressedBuffer.Footprint.ToString())
                   .Replace("{duration}", frame.Duration.ToString())
                   .Replace("{clockRate}", pcmBuffer.Format.ClockRate.ToString())
                   .Replace("{channelCount}", pcmBuffer.Format.ChannelCount.ToString())
                   .Replace("{mediaStreamId}", frame.Mid)
                   .Replace("{rtpStreamId}", frame.RtpStreamId)
                   .Replace("{sequenceNumber}", frame.SequenceNumber.ToString())
                   .Replace("{synchronizationSource}", frame.SynchronizationSource.ToString())
                   .Replace("{systemTimestamp}", frame.SystemTimestamp.ToString())
                   .Replace("{timestamp}", frame.Timestamp.ToString())
                   .Replace("{encoding}", encoding.ToString())
                   .Replace("{applicationId}", Options.ApplicationId)
                   .Replace("{channelId}", Options.ChannelId)
                   .Replace("{userId}", remoteConnectionInfo.UserId)
                   .Replace("{userAlias}", remoteConnectionInfo.UserAlias)
                   .Replace("{deviceId}", remoteConnectionInfo.DeviceId)
                   .Replace("{deviceAlias}", remoteConnectionInfo.DeviceAlias)
                   .Replace("{clientId}", remoteConnectionInfo.ClientId)
                   .Replace("{clientTag}", remoteConnectionInfo.ClientTag)
                   .Replace("{connectionId}", remoteConnectionInfo.Id)
                   .Replace("{connectionTag}", remoteConnectionInfo.Tag)
                   .Replace("{mediaId}", remoteConnectionInfo.MediaId));
        }
Exemple #4
0
        private void StartRequest(Uri uri)
        {
            if (!configuration && configurationRequired)
            {
                statusDescription = "Configuration is not set. Cannot start request.";
                Debug.LogError(statusDescription);
                statusCode = ERROR_CODE_NO_CONFIGURATION;
                SafeInvoke(onResponse);
                return;
            }

            if (!isServerAuthRequired && string.IsNullOrEmpty(configuration.clientAccessToken))
            {
                statusDescription = "Client access token is not defined. Cannot start request.";
                Debug.LogError(statusDescription);
                statusCode = ERROR_CODE_NO_CLIENT_TOKEN;
                SafeInvoke(onResponse);
                return;
            }

            //allow app to intercept request and potentially modify uri or add custom headers
            //NOTE: the callback depends on knowing the original Uri, before it is modified
            Dictionary <string, string> customHeaders = null;

            if (onPreSendRequest != null)
            {
                onPreSendRequest(ref uri, out customHeaders);
            }

            WrapHttpWebRequest wr = new WrapHttpWebRequest((HttpWebRequest)WebRequest.Create(uri.AbsoluteUri));

            //request = (IRequest)(HttpWebRequest) WebRequest.Create(uri);
            _request = wr;
            if (isServerAuthRequired)
            {
                _request.Headers["Authorization"] =
                    $"Bearer {serverToken}";
            }
            else
            {
                _request.Headers["Authorization"] =
                    $"Bearer {configuration.clientAccessToken.Trim()}";
            }

            if (null != postContentType)
            {
                _request.Method        = "POST";
                _request.ContentType   = postContentType;
                _request.ContentLength = postData.Length;
            }

            // Configure additional headers
            if (WitEndpointConfig.GetEndpointConfig(configuration).Speech == command ||
                WitEndpointConfig.GetEndpointConfig(configuration).Dictation == command)
            {
                _request.ContentType = audioEncoding.ToString();
                _request.Method      = "POST";
                _request.SendChunked = true;
            }

            _request.Headers["X-Wit-Client-Request-Id"] = requestId;

            requestRequiresBody = RequestRequiresBody(command);

            var configId = "not-yet-configured";

#if UNITY_EDITOR
            if (configuration)
            {
                if (string.IsNullOrEmpty(configuration.configId))
                {
                    configuration.configId = Guid.NewGuid().ToString();
                    EditorUtility.SetDirty(configuration);
                }

                configId = configuration.configId;
            }
#endif

            _request.UserAgent = GetUserAgent(configuration);

            requestStartTime  = DateTime.UtcNow;
            isActive          = true;
            statusCode        = 0;
            statusDescription = "Starting request";
            _request.Timeout  = configuration ? configuration.timeoutMS : 10000;
            WatchMainThreadCallbacks();

            if (null != onProvideCustomHeaders)
            {
                foreach (var header in onProvideCustomHeaders())
                {
                    _request.Headers[header.Key] = header.Value;
                }
            }

            //apply any modified headers last, as this allows us to overwrite headers if need be
            if (customHeaders != null)
            {
                foreach (var pair in customHeaders)
                {
                    _request.Headers[pair.Key] = pair.Value;
                }
            }

            if (_request.Method == "POST")
            {
                var getRequestTask = _request.BeginGetRequestStream(HandleRequestStream, _request);
                ThreadPool.RegisterWaitForSingleObject(getRequestTask.AsyncWaitHandle,
                                                       HandleTimeoutTimer, _request, Timeout, true);
            }
            else
            {
                StartResponse();
            }
        }
Exemple #5
0
        private void StartRequest(Uri uri)
        {
            if (!configuration && configurationRequired)
            {
                statusDescription = "Configuration is not set. Cannot start request.";
                Debug.LogError(statusDescription);
                statusCode = ERROR_CODE_NO_CONFIGURATION;
                SafeInvoke(onResponse);
                return;
            }

            if (!isServerAuthRequired && string.IsNullOrEmpty(configuration.clientAccessToken))
            {
                statusDescription = "Client access token is not defined. Cannot start request.";
                Debug.LogError(statusDescription);
                statusCode = ERROR_CODE_NO_CLIENT_TOKEN;
                SafeInvoke(onResponse);
                return;
            }

            request = (HttpWebRequest)WebRequest.Create(uri);

            if (isServerAuthRequired)
            {
                request.Headers["Authorization"] =
                    $"Bearer {serverToken}";
            }
            else
            {
                request.Headers["Authorization"] =
                    $"Bearer {configuration.clientAccessToken.Trim()}";
            }

            if (null != postContentType)
            {
                request.Method        = "POST";
                request.ContentType   = postContentType;
                request.ContentLength = postData.Length;
            }

            // Configure additional headers
            if (WitEndpointConfig.GetEndpointConfig(configuration).Speech == command)
            {
                request.ContentType = audioEncoding.ToString();
                request.Method      = "POST";
                request.SendChunked = true;
            }

            var configId = "not-yet-configured";

#if UNITY_EDITOR
            if (configuration)
            {
                if (string.IsNullOrEmpty(configuration.configId))
                {
                    configuration.configId = Guid.NewGuid().ToString();
                    EditorUtility.SetDirty(configuration);
                }

                configId = configuration.configId;
            }
#endif

            request.UserAgent = $"voice-sdk-35.0.0.98.175,wit-unity-{WIT_SDK_VERSION},{operatingSystem},{deviceModel},{configId},{Application.identifier}";

#if UNITY_EDITOR
            request.UserAgent += ",Editor";
#else
            request.UserAgent += ",Runtime";
#endif

            requestStartTime  = DateTime.Now;
            isActive          = true;
            statusCode        = 0;
            statusDescription = "Starting request";
            request.Timeout   = configuration ? configuration.timeoutMS : 10000;

            if (null != onProvideCustomHeaders)
            {
                foreach (var header in onProvideCustomHeaders())
                {
                    request.Headers[header.Key] = header.Value;
                }
            }
            if (request.Method == "POST")
            {
                var getRequestTask = request.BeginGetRequestStream(HandleRequestStream, request);
                ThreadPool.RegisterWaitForSingleObject(getRequestTask.AsyncWaitHandle,
                                                       HandleTimeoutTimer, request, Timeout, true);
            }
            else
            {
                StartResponse();
            }
        }
 /// <summary>
 /// Returns the file extension for specified audio type.
 /// </summary>
 /// <param name="audio">The audio type to get file extension for.</param>
 /// <returns>The file extension.</returns>
 public string GetAudioExtension(AudioEncoding audio)
 {
     return("." + audio.ToString().ToLower());
 }