void Update()
        {
            if (!settings_set)
            {
                buttons["MoveWithMe"].GetComponent <TextMesh>().text     = MoveWithMe ? "Captions move with you" : "Captions are fixed to world";
                buttons["AutoDistance"].GetComponent <TextMesh>().text   = (CaptionDistance == 0) ? "Automatic depth" : ("Fixed depth: " + CaptionDistance + "m");
                buttons["DepthDebug"].GetComponent <TextMesh>().text     = DepthDebug ? "Showing depth debug" : "Not showing depth debug";
                buttons["ShowCursor"].GetComponent <TextMesh>().text     = ShowCursor ? "Showing cursor" : "Not showing cursor";
                buttons["TextSize"].GetComponent <TextMesh>().text       = "Text size: " + (TextSize == 0 ? "small" : (TextSize == 1 ? "medium" : "large"));
                buttons["TextLines"].GetComponent <TextMesh>().text      = "Text lines: " + TextLines;
                buttons["TextLineLength"].GetComponent <TextMesh>().text = "Line length: " + TextLineLength + " characters";

                gameObject.GetComponent <TranslateToCamera>().EnableMovement = MoveWithMe;

                DepthObject.GetComponent <SpatialMappingRenderer>().enabled = DepthDebug;
                CursorVisual.transform.localScale = ShowCursor ? new Vector3(0.03f, 0.03f, 0.03f) : new Vector3(0.0f, 0.0f, 0.0f);

                settings_set = true;
            }


            InputModule.CursorStateEnum cursorState = CursorObject.GetComponent <InputModule.AnimatedCursor>().CursorState;
            if (cursorState == InputModule.CursorStateEnum.Interact || cursorState == InputModule.CursorStateEnum.InteractHover || cursorState == InputModule.CursorStateEnum.Select)
            {
                InputModule.IPointingSource thisistoocomplex;
                if (InputModule.FocusManager.Instance.TryGetSinglePointer(out thisistoocomplex))
                {
                    GameObject focused = InputModule.FocusManager.Instance.GetFocusedObject(thisistoocomplex);

                    if (captions.Count > 1)
                    {
                        for (int i = captions.Count - 1; i >= 0; i--)
                        {
                            GameObject o = captions[i];
                            if (o.GetComponent <GlassEarTagalong>().frozen&& focused == o)
                            {
                                o.GetComponent <GlassEarTagalong>().lastHoverTime = Time.time;
                            }
                        }
                    }

                    foreach (KeyValuePair <string, GameObject> b in buttons)
                    {
                        if (focused == b.Value)
                        {
                            b.Value.GetComponent <HighightControl>().HoverTime = Time.time;
                        }
                    }
                }
            }

            soundClassDisplay.GetComponent <TextMesh>().text = classString;

            pos = Microphone.GetPosition(null);

            // Avoid getting repeated data chunk
            if (pos < lastPos)
            {
                pos += 10 * RATE;
            }
            if (pos > lastPos + CHUNK)
            {
                micClip.GetData(sample, lastPos);
                lastPos = lastPos + CHUNK;
                if (lastPos > RATE * 10)
                {
                    lastPos -= RATE * 10;
                }
                byte[] barry = new byte[sample.Length * 2];
                FloatToByte(barry, sample);
                audioStream.Write(barry, 0, barry.Length);
            }


            float[] copyArr = new float[sample.Length];
            for (var i = 0; i < sample.Length; i++)
            {
                copyArr[i] = sample[i];
            }
            queue.Enqueue(copyArr);
            // Accumulate sound segment until reaching the specific length
            if (queue.Count >= 10)
            {
                for (var i = 0; i < 10; i++)
                {
                    copyArr = queue.Dequeue();
                    for (var j = 0; j < sample.Length; j++)
                    {
                        sampleClassification[j + CHUNK * i] = copyArr[j];
                    }
                }
                queue.Clear();

                // Send data to sound recognition server
                if (outstream != null && outstream.CanWrite)
                {
                    byte[] data = new byte[32000];
                    FloatToByte(data, sampleClassification);
                    outstream.Write(data, 0, data.Length);
                }

                // Get sound label
                while (outstream != null && outstream.DataAvailable)
                {
                    byte[] buf   = new byte[128];
                    int    bytes = outstream.Read(buf, 0, 128);
                    string label = System.Text.Encoding.UTF8.GetString(buf, 0, bytes);
                    if (label != "Unrecognized Sound" && label != "Speech")
                    {
                        outlst.AddLast(label);
                        classLabelLen++;
                        if (classLabelLen > 3)
                        {
                            outlst.RemoveFirst();
                        }
                        classString = "";
                        foreach (String o in outlst)
                        {
                            classString += o + "\n";
                        }
                    }
                }
            }

            lock (threadLocker)
            {
                if (intermString.Length > 0)
                {
                    OnPacket_interm(intermString);
                    intermString = "";
                }
                if (curString.Length > 0)
                {
                    OnPacket(curString);
                    curString = "";
                }
            }
        }
        void Update()
        {
#if UNITY_EDITOR
            if ((Time.time - last_fake_message_time) > 1)
            {
                last_fake_message_time = Time.time;

                string next_packet = last_packet;

                int nextword = UnityEngine.Random.Range(2, 6);

                while (nextword > 0)
                {
                    nextword--;
                    next_packet = next_packet + "a";
                }

                next_packet = next_packet + "\n";
                nextword    = UnityEngine.Random.Range(2, 6);

                while (nextword > 0)
                {
                    nextword--;
                    next_packet = next_packet + "w";
                }

                if (next_packet.Length > 250)
                {
                    next_packet = next_packet.Substring(next_packet.Length - 250);
                }

                OnPacket(next_packet);
            }
#else
            if (incoming_packet_counter > processed_incoming_packet_counter)
            {
                processed_incoming_packet_counter = incoming_packet_counter;
                OnPacket(incoming_packet);
            }
#endif

            if (!settings_set)
            {
                buttons["MoveWithMe"].GetComponent <TextMesh>().text     = MoveWithMe ? "Captions move with you" : "Captions are fixed to world";
                buttons["AutoDistance"].GetComponent <TextMesh>().text   = (CaptionDistance == 0) ? "Automatic depth" : ("Fixed depth: " + CaptionDistance + "m");
                buttons["DepthDebug"].GetComponent <TextMesh>().text     = DepthDebug ? "Showing depth debug" : "Not showing depth debug";
                buttons["TextSize"].GetComponent <TextMesh>().text       = "Text size: " + (TextSize == 0 ? "small" : (TextSize == 1 ? "medium" : "large"));
                buttons["TextLines"].GetComponent <TextMesh>().text      = "Text lines: " + TextLines;
                buttons["TextLineLength"].GetComponent <TextMesh>().text = "Line length: " + TextLineLength + " characters";

                gameObject.GetComponent <TranslateToCamera>().EnableMovement = MoveWithMe;

                DepthObject.GetComponent <SpatialMappingRenderer>().enabled = DepthDebug;

                settings_set = true;
            }

            InputModule.CursorStateEnum cursorState = CursorObject.GetComponent <InputModule.AnimatedCursor>().CursorState;
            if (cursorState == InputModule.CursorStateEnum.Interact || cursorState == InputModule.CursorStateEnum.InteractHover || cursorState == InputModule.CursorStateEnum.Select)
            {
                InputModule.IPointingSource thisistoocomplex;
                if (InputModule.FocusManager.Instance.TryGetSinglePointer(out thisistoocomplex))
                {
                    GameObject focused = InputModule.FocusManager.Instance.GetFocusedObject(thisistoocomplex);

                    if (captions.Count > 1)
                    {
                        for (int i = captions.Count - 1; i >= 0; i--)
                        {
                            GameObject o = captions[i];
                            if (o.GetComponent <GlassEarTagalong>().frozen&& focused == o)
                            {
                                o.GetComponent <GlassEarTagalong>().lastHoverTime = Time.time;
                            }
                        }
                    }

                    foreach (KeyValuePair <string, GameObject> b in buttons)
                    {
                        if (focused == b.Value)
                        {
                            b.Value.GetComponent <HighightControl>().HoverTime = Time.time;
                        }
                    }
                }
            }
        }