Example #1
0
        private void ProcessPacket(OSCPacket packet)
        {
            foreach (OSCPacket p in packet.Data)
            {
                if (p.IsBundle())
                {
                    ProcessPacket(p);
                }
                else
                {
                    OSCMessage msg = (OSCMessage)p;

                    if ((EyesStatus)msg.Extra != EyesStatus.NONE)
                    {
                        Status = (EyesStatus)msg.Extra;
                    }

                    if (msg.Address == "/muse/elements/alpha_absolute")
                    {
                        if (!Training || (Training && alphaIgnore == 0 && keepTrainingData))
                        {
                            if (alphaSet)
                            {
                                alpha2   = (float)msg.Data[0];
                                alphaSet = false;

                                if (prevStatus == Status)
                                {
                                    TrainingValue trainingValue = new TrainingValue((int)Status, 2);
                                    trainingValue.Features[0] = alpha1;
                                    trainingValue.Features[1] = alpha2;
                                    AlphaTrainingValues.Add(trainingValue);
                                }
                            }
                            else
                            {
                                alpha1   = (float)msg.Data[0];
                                alphaSet = true;
                            }
                        }
                        else if (Training && alphaIgnore != 0)
                        {
                            alphaIgnore--;
                        }

                        prevStatus = Status;
                    }
                    else if (msg.Address == "/muse/eeg")
                    {
                        tp9.Add((float)msg.Data[0]);
                        af7.Add((float)msg.Data[1]);
                        af8.Add((float)msg.Data[2]);
                        tp10.Add((float)msg.Data[3]);
                    }
                }
            }
        }
 // Use this for initialization
 void Start()
 {
     Bomb[] a = bombsContainer.GetComponentsInChildren <Bomb> ();
     bombs           = new HashSet <Bomb> (a);
     activeObjects   = new HashSet <OutlineObject> ();
     inactiveObjects = new HashSet <OutlineObject> (FindObjectsOfType <OutlineObject> ());
     activeBombs     = new HashSet <Bomb> ();
     previousStatus  = EyesStatus.NONE;
     checkingTimer   = new CounterTimer(checkingInterval);
     zombies         = new List <Zombie> (zombiesContainer.GetComponentsInChildren <Zombie> ());
 }
Example #3
0
        public void Start()
        {
            while (true)
            {
                ConsoleKeyInfo k = Console.ReadKey();
                if (k.Key == ConsoleKey.Spacebar)
                {
                    if (!started)
                    {
                        Console.WriteLine("Started reading!");
                        status = EyesStatus.OPEN;
                        Console.WriteLine("Switched to eyes open");
                        started          = true;
                        processingThread = new Thread(new ThreadStart(StartReading));
                        processingThread.Start();
                    }
                    else
                    {
                        if (status == EyesStatus.CLOSED)
                        {
                            Console.WriteLine("Switched to eyes open");
                            status = EyesStatus.OPEN;
                        }
                        else
                        {
                            Console.WriteLine("Switched to eyes closed");
                            status = EyesStatus.CLOSED;
                        }
                    }
                }
                else if (k.Key == ConsoleKey.F)
                {
                    finished = true;
                    processingThread.Join();
                    string baseFilePath = Directory.GetCurrentDirectory();
                    baseFilePath += string.Format("/{0:yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now) + ".eeg";

                    Console.WriteLine("Saving to raw packets to: " + baseFilePath);

                    FileStream stream = File.OpenWrite(baseFilePath);
                    foreach (OSCPacket packet in packets)
                    {
                        byte[] bytes = packet.Pack();
                        stream.Write(BitConverter.GetBytes(bytes.Length), 0, 4);
                        stream.Write(bytes, 0, bytes.Length);
                    }
                    stream.Close();

                    return;
                }
            }
        }
Example #4
0
 public void Reset()
 {
     af7.Clear();
     af8.Clear();
     tp9.Clear();
     tp10.Clear();
     TrainingValues.Clear();
     AlphaTrainingValues.Clear();
     trainer  = null;
     training = false;
     readingsMean.Clear();
     status = EyesStatus.NONE;
     ignore = SKIP;
 }
Example #5
0
        private void RunFFT()
        {
            readingsMean.Clear();

            for (int i = 0; i < af7.Count; i++)
            {
                readingsMean.Add(af7[i] + tp9[i] + tp10[i] + af8[i] / FEATURE_COUNT);
            }

            CalculateFFT(readingsMean, FFTResults);
            CalculateFFT(af7, AF7FFT);
            CalculateFFT(af8, AF8FFT);
            CalculateFFT(tp9, TP9FFT);
            CalculateFFT(tp10, TP10FFT);

            if (!Training || (Training && ignore == 0))
            {
                TrainingValue trainingValue = new TrainingValue((int)Status, FEATURE_COUNT);
                trainingValue.Features[0] = PSD(TP9FFT, FREQ_STEP);
                trainingValue.Features[1] = PSD(AF7FFT, FREQ_STEP);
                trainingValue.Features[2] = PSD(AF8FFT, FREQ_STEP);
                trainingValue.Features[3] = PSD(TP10FFT, FREQ_STEP);

                if (!Training && trainer != null && trainer.Trained)
                {
                    Status = (EyesStatus)trainer.Predict(trainingValue);
                }

                if (training || keepTrainingData)
                {
                    TrainingValues.Add(trainingValue);
                }
            }
            else if (Training && ignore != 0)
            {
                ignore--;
            }
        }
    // Update is called once per frame
    void Update()
    {
        if (!started)
        {
            processorContainer = FindObjectOfType <ProcessorContainer> ();
            if ((processorContainer != null && processorContainer.processor != null))
            {
                EEGManager.Instance.Processor = processorContainer.processor;
                EEGManager.Instance.Trained   = true;
                Status = GameStatus.Playing;
            }
            else
            {
                Status = GameStatus.Training;
            }

            started = true;
        }

        switch (status)
        {
        case GameStatus.Playing:
            if (Input.GetKeyDown(KeyCode.P))
            {
                Status = GameStatus.Paused;
                return;
            }

            if (player.health <= 0)
            {
                Status = GameStatus.GameOver;
                return;
            }

            EyesStatus status = EEGManager.Instance.Status;

            if (status == EyesStatus.CLOSED)
            {
                if (previousStatus == EyesStatus.OPEN)
                {
                    visibilityOn = false;
                    foreach (OutlineObject visibleObject in activeObjects)
                    {
                        visibleObject.Outline = false;
                    }
                    inactiveObjects.UnionWith(activeObjects);
                    activeObjects.Clear();
                }

                visibilityTime += Time.deltaTime;

                if (checkingTimer.Finished)
                {
                    checkingTimer.Reset();
                    foreach (Bomb bomb in bombs)
                    {
                        float distance = Vector3.Distance(player.transform.position, bomb.transform.position);
                        if (distance <= hearingDistance)
                        {
                            if (!activeBombs.Contains(bomb))
                            {
                                bomb.PlayBeepSound();
                                activeBombs.Add(bomb);
                            }
                        }
                        else
                        {
                            if (activeBombs.Contains(bomb))
                            {
                                activeBombs.Remove(bomb);
                                bomb.StopPlaying();
                            }
                        }
                    }

                    foreach (OutlineObject inactiveObject in inactiveObjects)
                    {
                        float distance = Vector3.Distance(player.transform.position, inactiveObject.transform.position);
                        if (distance <= hearingDistance)
                        {
                            activeObjects.Add(inactiveObject);
                        }
                    }

                    inactiveObjects.RemoveWhere(x => activeObjects.Contains(x));
                }
            }
            else
            {
                foreach (Bomb bomb in activeBombs)
                {
                    bomb.StopPlaying();
                }
                activeBombs.Clear();

                if (previousStatus == EyesStatus.CLOSED)
                {
                    visibilityTimer = new CounterTimer(Mathf.Min(visibilityTime + EEGManager.Instance.minThreshold, maxVisibilityDuration));
                    foreach (OutlineObject activeObject in activeObjects)
                    {
                        activeObject.Outline = true;
                    }
                    visibilityOn = true;
                }
                else
                {
                    if (visibilityOn && visibilityTimer.Finished)
                    {
                        visibilityOn = false;
                        foreach (OutlineObject activeObject in activeObjects)
                        {
                            activeObject.Outline = false;
                        }
                        inactiveObjects.UnionWith(activeObjects);
                        activeObjects.Clear();
                    }
                }

                if (visibilityOn)
                {
                    visibilityTimer.Update(Time.deltaTime);
                }

                visibilityTime = 0;
            }

            previousStatus = status;
            checkingTimer.Update(Time.deltaTime);
            break;

        case GameStatus.Paused:
            if (Input.GetKeyDown(KeyCode.P))
            {
                Status = GameStatus.Playing;
                return;
            }
            break;

        case GameStatus.Training:
            if (Input.GetKey(KeyCode.K))
            {
                EEGManager.Instance.StopTraining();
            }
            break;

        default:

            break;
        }
    }