コード例 #1
0
    // Update is called once per frame
    void Update()
    {
        float t1;

        t1 = tone.GetComponent <MicroFFT>().tone;

        if (t1 > 0)
        {
            Debug.Log("tone=" + t1);
            frequencyroot = 110.0f * Math.Pow(2, (t1) / 12.0f);
            frequency3rd  = 110.0f * Math.Pow(2, (t1 + 4 + 12) / 12.0f);
            frequency5th  = 110.0f * Math.Pow(2, (t1 + 7 + 12) / 12.0f);
            playTone      = PlayTone.Go;
        }
        else
        {
            playTone = PlayTone.Stop;
        }
    }
コード例 #2
0
 public void ButtonUP()
 {
     frequency = 440;
     playTone  = PlayTone.Stop;
 }
コード例 #3
0
 public void ButtonB()
 {
     frequency = 987.7666025122;
     playTone  = PlayTone.Go;
 }
コード例 #4
0
 public void ButtonAs()
 {
     frequency = 932.3275230361;
     playTone  = PlayTone.Go;
 }
コード例 #5
0
 public void ButtonA()
 {
     frequency = 880.0000000000;
     playTone  = PlayTone.Go;
 }
コード例 #6
0
ファイル: Scribbler.cs プロジェクト: SamLin95/cs3630
        private IEnumerator<ITask> ReconnectHandler(Reconnect req)
        {
            //try
            //{
            _state.Connected = false;

            //look for scribbler on last known Com port
            if (_state.ComPort > 0)
            {
                var rPort = new Port<EmptyValue>();
                Exception ex = null;
                new Thread(new ThreadStart(delegate()
                {
                    try
                    {
                        _scribblerCom.Open(_state.ComPort);
                    }
                    catch (Exception e)
                    {
                        ex = e;
                    }
                    rPort.Post(new EmptyValue());
                })).Start();
                yield return Arbiter.Receive(false, rPort, delegate(EmptyValue v) { });
                if (ex != null)
                {
                    req.ResponsePort.Post(RSUtils.FaultOfException(ex));
                    yield break;
                }

                _state.RobotName = _scribblerCom.foundRobotName;
                _state.ComPort = _scribblerCom.openedComPort;
                LogInfo(LogGroups.Console, "Now connected to robot \"" + _state.RobotName + "\" on COM" + _state.ComPort);
                SaveState(_state);

                PollTimer = new System.Timers.Timer();
                PollTimer.Interval = TimerDelay;
                PollTimer.AutoReset = true;
                PollTimer.Elapsed += new System.Timers.ElapsedEventHandler(PollTimer_Elapsed);
                //PollTimer.Start();

                //fix state
                _state.MotorLeft = 100;
                _state.MotorRight = 100;
                _state.LEDLeft = false;
                _state.LEDRight = false;
                _state.LEDCenter = false;

                _state.Connected = true;

                //play startup tone
                LogInfo("playing startup tone...");
                PlayTone startTone = new PlayTone(new PlayToneBody(.2, 1000, 2000));
                _mainPort.PostUnknownType(startTone);
                //yield return Arbiter.Choice(startTone.ResponsePort,
                //    delegate(DefaultUpdateResponseType r) { },
                //    delegate(Fault f) { throw new Exception("Could not play startup tone"); });
                LogInfo("done playing");

                req.ResponsePort.Post(DefaultUpdateResponseType.Instance);

                LogInfo("reconnect sent success");
            }
            else
            {
                req.ResponsePort.Post(RSUtils.FaultOfException(new ScribblerBadCOMPortException()));
                LogInfo("reconnect sent failure");
            }

            yield break;
        }
コード例 #7
0
 public void ButtonE()
 {
     frequency = 659.2551138257;
     playTone  = PlayTone.Go;
 }
コード例 #8
0
 public void ButtonD()
 {
     frequency = 587.3295358348;
     playTone  = PlayTone.Go;
 }
コード例 #9
0
 public void ButtonF()
 {
     frequency = 698.4564628660;
     playTone  = PlayTone.Go;
 }
コード例 #10
0
ファイル: Scribbler.cs プロジェクト: SamLin95/cs3630
        /// <summary>
        /// Service Start
        /// </summary>
        protected override void Start()
        {
            if (_state == null)
            {
                //initialize state
                _state = new ScribblerState();
                _state.ComPort = 0;
                _state.RobotName = null;

                //motors initially stopped
                _state.MotorLeft = 100;
                _state.MotorRight = 100;

                //_state.LightLeftConfig = new SensorConfig();
                //_state.LightRightConfig = new SensorConfig();
                //_state.LightCenterConfig = new SensorConfig();

                SaveState(_state);
            }

            // Listen on the main port for requests and call the appropriate handler.
            Interleave mainInterleave = ActivateDsspOperationHandlers();

            // Publish the service to the local Node Directory
            DirectoryInsert();

            // display HTTP service Uri
            LogInfo(LogGroups.Console, "Service uri: ");

            //open Scribbler Communications port
            if (ConnectToScribbler())
            {

                // Listen for a single Serial port request with an acknowledgement
                Activate(Arbiter.ReceiveWithIterator<SendScribblerCommand>(false, _scribblerComPort, SendScribblerCommandHandler));


                //add custom handlers to interleave
                mainInterleave.CombineWith(new Interleave(
                    new TeardownReceiverGroup(),
                    new ExclusiveReceiverGroup(
                        Arbiter.ReceiveWithIterator<SetMotor>(true, _mainPort, SetMotorHandler),
                        Arbiter.ReceiveWithIterator<SetLED>(true, _mainPort, SetLEDHandler),
                        Arbiter.ReceiveWithIterator<PlayTone>(true, _mainPort, PlayToneHandler),
                        //Arbiter.ReceiveWithIterator<ConfigureSensor>(true, _mainPort, ConfigureSensorHandler),
                        Arbiter.ReceiveWithIterator<SetName>(true, _mainPort, SetNameHandler)
                    ),
                    new ConcurrentReceiverGroup()
                ));


                PollTimer = new System.Timers.Timer();
                PollTimer.Interval = TimerDelay;
                PollTimer.AutoReset = true;
                PollTimer.Elapsed += new System.Timers.ElapsedEventHandler(PollTimer_Elapsed);
                PollTimer.Start();


                //play startup tone
                PlayToneBody startTone = new PlayToneBody(200, 1000, 2000);
                PlayTone sendcmd = new PlayTone();
                sendcmd.Body = startTone;
                _mainPort.Post(sendcmd);
            }

        }
コード例 #11
0
ファイル: Scribbler.cs プロジェクト: SamLin95/cs3630
        /// <summary>
        /// Handles incoming play tone requests
        /// </summary>
        private IEnumerator<ITask> PlayToneHandler(PlayTone message)
        {
            ScribblerCommand cmd = new ScribblerCommand((byte)ScribblerHelper.Commands.SET_SPEAKER_2,
                                                        message.Body.Duration,
                                                        message.Body.Frequency1,
                                                        message.Body.Frequency2);

            SendScribblerCommand sendcmd = new SendScribblerCommand(cmd);
            _scribblerComPort.Post(sendcmd);

            yield return Arbiter.Receive<ScribblerResponse>(false, sendcmd.ResponsePort,
                delegate(ScribblerResponse response)
                {

                }
            );

            //reply to sender
            message.ResponsePort.Post(DefaultUpdateResponseType.Instance);

            yield break;
        }
コード例 #12
0
        public virtual IEnumerator<ITask> PlayToneHandler(PlayTone playTone)
        {
            LegoPlayTone cmd = new LegoPlayTone(playTone.Body.Frequency, playTone.Body.Duration);
            yield return Arbiter.Choice(_brickPort.SendCommand(cmd),
                delegate(LegoResponse ok)
                {
                    // If the command was successful, send the response after the tone duration.
                    Activate(Arbiter.Receive<DateTime>(false, TimeoutPort(playTone.Body.Duration),
                        delegate(DateTime doneWithTone)
                        {
                            playTone.ResponsePort.Post(DefaultSubmitResponseType.Instance);
                        }));
                },
                playTone.ResponsePort.Post);

            yield break;
        }
コード例 #13
0
ファイル: Scribbler.cs プロジェクト: SamLin95/cs3630
        /// <summary>
        /// Handles incoming play tone requests
        /// </summary>
        //[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
        public IEnumerator<ITask> PlayToneHandler(PlayTone message)
        {
            if (!_state.Connected)
            {
                LogError("trying to play tone, but not connected");
                message.ResponsePort.Post(new Fault());
                yield break;
            }

            ScribblerCommand cmd = new ScribblerCommand(ScribblerHelper.Commands.SET_SPEAKER_2,
                                                        (int)(message.Body.Duration * 1000.0),
                                                        message.Body.Frequency1,
                                                        message.Body.Frequency2);

            SendScribblerCommand sendcmd = new SendScribblerCommand(cmd);
            _scribblerComPort.Post(sendcmd);

            yield return Arbiter.Choice(sendcmd.ResponsePort,
                delegate(ScribblerResponse response)
                {
                    //reply to sender
                    message.ResponsePort.Post(DefaultUpdateResponseType.Instance);
                },
                delegate(Fault f)
                {
                    message.ResponsePort.Post(f);
                }
            );

            yield break;
        }
コード例 #14
0
 public void ButtonC()
 {
     frequency = 523.2511306011;
     playTone  = PlayTone.Go;
 }
コード例 #15
0
 public void ButtonFs()
 {
     frequency = 739.9888454232;
     playTone  = PlayTone.Go;
 }
コード例 #16
0
 public void ButtonCs()
 {
     frequency = 554.3652619537;
     playTone  = PlayTone.Go;
 }
コード例 #17
0
 public void ButtonG()
 {
     frequency = 783.9908719634;
     playTone  = PlayTone.Go;
 }
コード例 #18
0
 public void ButtonDs()
 {
     frequency = 622.2539674441;
     playTone  = PlayTone.Go;
 }
コード例 #19
0
 public void ButtonGs()
 {
     frequency = 830.6093951598;
     playTone  = PlayTone.Go;
 }
コード例 #20
0
    void Update()
    {
        float sa = 0, abssa = 0;
        float tone_in;


        //だいたい1秒ごとに処理を行う
        timeleft -= Time.deltaTime;
        if (timeleft <= 0.0)
        {
            /* 次の音に変わるまでの時間 */
            timeleft = 7.0f;

            rand_b = rand;
            rand   = (int)(UnityEngine.Random.Range(0, 12.0f)) % 12;

            /* 半音差の変化だとむつかしいかもしれないので全音以上の変化にした */
            while (rand - rand_b >= -1 && rand - rand_b <= 1)
            {
                rand = (int)(UnityEngine.Random.Range(0, 12.0f)) % 12;
            }

            switch (rand)
            {
            case 3:
                //frequencyroot = 130.8127826502f;
                //frequencyroot = 261.6255653005;
                frequencyroot = 523.2511306011f;            //C4
                scaText.text  = noteNames[rand];
                playTone      = PlayTone.Go;
                break;

            case 4:
                //frequencyroot = 138.5913154884f;
                //frequencyroot = 277.1826309768f;
                frequencyroot = 554.3652619537f;
                scaText.text  = noteNames[rand];
                playTone      = PlayTone.Go;
                break;

            case 5:
                //frequencyroot = 146.8323839587f;
                //frequencyroot = 293.6647679174f;
                frequencyroot = 587.3295358348f;            //D4
                scaText.text  = noteNames[rand];
                playTone      = PlayTone.Go;
                break;

            case 6:
                //frequencyroot = 155.5634918610f;
                //frequencyroot = 311.1269837220f;
                frequencyroot = 622.2539674441f;
                scaText.text  = noteNames[rand];
                playTone      = PlayTone.Go;
                break;

            case 7:
                //frequencyroot = 164.8137784564f;
                //frequencyroot = 329.6275569128f;
                frequencyroot = 659.2551138257f;            //E4
                scaText.text  = noteNames[rand];
                playTone      = PlayTone.Go;
                break;

            case 8:
                //frequencyroot = 174.6141157165f;
                //frequencyroot = 349.2282314330f;
                frequencyroot = 698.4564628660f;            //F4
                scaText.text  = noteNames[rand];
                playTone      = PlayTone.Go;
                break;

            case 9:
                //frequencyroot = 184.9972113558f;
                //frequencyroot = 369.9944227116f;
                frequencyroot = 739.9888454232f;
                scaText.text  = noteNames[rand];
                playTone      = PlayTone.Go;
                break;

            case 10:
                //frequencyroot = 195.9977179908f;
                frequencyroot = 391.9954359817f;            //G3
                //frequencyroot = 783.9908719634f;
                scaText.text = noteNames[rand];
                playTone     = PlayTone.Go;
                break;

            case 11:
                //frequencyroot = 207.6523487899f;
                frequencyroot = 415.3046975799f;
                //frequencyroot = 830.6093951598f;
                scaText.text = noteNames[rand];
                playTone     = PlayTone.Go;
                break;

            case 0:
                //frequencyroot = 220.0000000000;
                frequencyroot = 440.0000000000f;            //A4
                //frequencyroot = 880.0000000000f;
                scaText.text = noteNames[rand];
                playTone     = PlayTone.Go;
                break;

            case 1:
                //frequencyroot = 233.0818807590f;
                frequencyroot = 466.1637615180f;
                //frequencyroot = 932.3275230361f;
                scaText.text = noteNames[rand];
                playTone     = PlayTone.Go;
                break;

            case 2:
                //frequencyroot = 246.9416506280f;
                frequencyroot = 493.8833012561f;            //B4
                //frequencyroot = 987.7666025122f;
                scaText.text = noteNames[rand];
                playTone     = PlayTone.Go;
                break;

            case 12:
                frequencyroot = 440;
                playTone      = PlayTone.Stop;
                break;
            }

            scaText.text = "基準:" + scaText.text;

            standardline1.transform.position = new Vector3(0, -80.0f + (rand - 12) * 4.0f, 0);
            standardline2.transform.position = new Vector3(0, -80.0f + rand * 4.0f, 0);
            standardline3.transform.position = new Vector3(0, -80.0f + (rand + 12) * 4.0f, 0);

            randcount += 1;
        }


        tone_in = tone.GetComponent <MicroFFT>().tone;

        sa    = tone_in - rand;
        abssa = sa;

        while (abssa > 12)
        {
            abssa -= 12.0f;
        }
        while (abssa < 0)
        {
            abssa += 12.0f;
        }

        if (tone_in == -1)
        {
            judge.GetComponent <Renderer>().material.color = Color.red;
        }
        else if (abssa < tolerate || abssa > 12 - tolerate)
        {
            Debug.Log("octave : " + sa + "  ,In:" + tone_in + " ,Root:" + rand);
            judge.GetComponent <Renderer>().material.color = Color.cyan;
            if (randcount <= 5)
            {
                //score_num += 1;
                /* 被験者実験の評価のためにユニゾンは除くことにする。 */
            }
        }
        else if (abssa > 6 - tolerate && abssa < 7 + tolerate)
        {
            Debug.Log("5th!!! : " + sa + "  ,In:" + tone_in + " ,Root:" + rand);
            judge.GetComponent <Renderer>().material.color = Color.green;
            if (randcount <= 5)
            {
                score_num += 3;
            }
        }
        else if (abssa > 3 - tolerate && abssa < 4 + tolerate)
        {
            Debug.Log("3rd!!! : " + sa + "  ,In:" + tone_in + " ,Root:" + rand);
            judge.GetComponent <Renderer>().material.color = Color.yellow;
            if (randcount <= 5)
            {
                score_num += 3;
            }
        }
        else
        {
            Debug.Log("miss : " + sa + "Root: " + rand);
            judge.GetComponent <Renderer>().material.color = Color.red;
        }

        score_text.text = "Score:" + score_num.ToString("D5");
    }
コード例 #21
0
ファイル: Scribbler.cs プロジェクト: SamLin95/cs3630
        /// <summary>
        /// Http Post Handler.  Handles http form inputs
        /// </summary>
        //[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
        public IEnumerator<ITask> HttpPostHandler(HttpPost httpPost)
        {
            // Use helper to read form data
            ReadFormData readForm = new ReadFormData(httpPost);
            _httpUtilities.Post(readForm);

            // Read form data
            NameValueCollection parameters = null;
            yield return Arbiter.Choice(readForm.ResultPort,
                delegate(NameValueCollection p) { parameters = p; },
                delegate(Exception e) { throw new Exception("Error reading form data", e); });

            // Act on form data
            if (!string.IsNullOrEmpty(parameters["Action"])
                  && parameters["Action"] == "ScribblerConfig")
            {
                if (parameters["buttonOk"] == "Change" && _state.Connected)
                {
                    SetNameBody newname = new SetNameBody(parameters["Name"]);
                    SetName newnamemessage = new SetName(newname);
                    _mainPort.PostUnknownType(newnamemessage);
                    Activate(
                        Arbiter.Choice(
                            Arbiter.Receive<DefaultUpdateResponseType>(false, newnamemessage.ResponsePort,
                                delegate(DefaultUpdateResponseType response)
                                {
                                    HttpPostSuccess(httpPost);
                                }),
                            Arbiter.Receive<Fault>(false, newnamemessage.ResponsePort,
                                delegate(Fault f)
                                {
                                    HttpPostFailure(httpPost, f.Reason[0].Value);
                                })
                        )
                    );

                }
                else if (parameters["buttonOk"] == "Connect" && _state.Connected)
                {
                    //close down this connection to make a new connection below

                    PollTimer.Close();

                    System.Threading.Thread.Sleep(100);

                    _scribblerCom.Close();

                    _state.Connected = false;

                    //HttpPostSuccess(httpPost);
                }

                if (parameters["buttonOk"] == "Connect" && !_state.Connected)
                {
                    int port = 0;
                    int.TryParse(parameters["ComPort"], out port);
                    string name = parameters["Name"];
                    if (!string.IsNullOrEmpty(name) && name.Length > 8)
                        name = name.Substring(0, 8);

                    _state.ComPort = port;
                    _state.RobotName = name;

                    //open Scribbler Communications port
                    LogInfo("connecting to scribbler...");
                    Reconnect rec = new Reconnect();
                    _mainPort.PostUnknownType(rec);
                    yield return Arbiter.Choice(rec.ResponsePort,
                        delegate(DefaultUpdateResponseType r)
                        {
                            LogInfo("connected, sending http reply");
                            HttpPostSuccess(httpPost);
                            LogInfo("http reply sent");
                        },
                        delegate(Fault f)
                        {
                            httpPost.ResponsePort.Post(f);
                        });
                }
            }
            else if (!string.IsNullOrEmpty(parameters["Action"])
                  && parameters["Action"] == "ScribblerSensors")
            {
                if (parameters["buttonOk"] == "Poll" && _state.Connected)
                {
                    ScribblerCommand cmd = new ScribblerCommand(ScribblerHelper.Commands.GET_ALL);
                    SendScribblerCommand sendcmd = new SendScribblerCommand(cmd);
                    _scribblerComPort.Post(sendcmd);
                    Activate(
                        Arbiter.Choice(
                            Arbiter.Receive<ScribblerResponse>(false, sendcmd.ResponsePort,
                                delegate(ScribblerResponse response)
                                {
                                    HttpPostSuccess(httpPost);
                                }),
                            Arbiter.Receive<Fault>(false, sendcmd.ResponsePort,
                                delegate(Fault f)
                                {
                                    HttpPostFailure(httpPost, f.Reason[0].Value);
                                })
                        )
                    );
                }
            }
            else if (!string.IsNullOrEmpty(parameters["Action"])
                && parameters["Action"] == "ScribblerMotors")
            {
                if (parameters["buttonOk"] == "Set" && _state.Connected)
                {
                    int left = _state.MotorLeft;
                    int right = _state.MotorRight;
                    int.TryParse(parameters["LeftMotor"], out left);
                    int.TryParse(parameters["RightMotor"], out right);

                    SetMotorsBody setMotorsBody = new SetMotorsBody(left, right);
                    SetMotors setMotorsRequest = new SetMotors(setMotorsBody);

                    _mainPort.PostUnknownType(setMotorsRequest);

                    Activate(
                        Arbiter.Choice(
                            Arbiter.Receive<DefaultUpdateResponseType>(false, setMotorsRequest.ResponsePort,
                                delegate(DefaultUpdateResponseType response)
                                {
                                    HttpPostSuccess(httpPost);
                                }),
                            Arbiter.Receive<Fault>(false, setMotorsRequest.ResponsePort,
                                delegate(Fault f)
                                {
                                    HttpPostFailure(httpPost, f.Reason[0].Value);
                                })
                        )
                    );
                }
                else if (parameters["buttonOk"] == "All Stop" && _state.Connected)
                {
                    SetMotorsBody setMotorsBody = new SetMotorsBody(100, 100);
                    SetMotors setMotorsRequest = new SetMotors(setMotorsBody);

                    _mainPort.PostUnknownType(setMotorsRequest);

                    Activate(
                        Arbiter.Choice(
                            Arbiter.Receive<DefaultUpdateResponseType>(false, setMotorsRequest.ResponsePort,
                                delegate(DefaultUpdateResponseType response)
                                {
                                    HttpPostSuccess(httpPost);
                                }),
                            Arbiter.Receive<Fault>(false, setMotorsRequest.ResponsePort,
                                delegate(Fault f)
                                {
                                    HttpPostFailure(httpPost, f.Reason[0].Value);
                                })
                        )
                    );
                }
            }
            else if (!string.IsNullOrEmpty(parameters["Action"])
                && parameters["Action"] == "ScribblerLEDs")
            {
                if (parameters["buttonOk"] == "Set" && _state.Connected)
                {
                    bool left = ((parameters["LeftLED"] ?? "off") == "on");
                    bool center = ((parameters["CenterLED"] ?? "off") == "on");
                    bool right = ((parameters["RightLED"] ?? "off") == "on");

                    SetAllLedsBody leds = new SetAllLedsBody(left, center, right);
                    SetAllLEDs setAllLeds = new SetAllLEDs(leds);
                    _mainPort.PostUnknownType(setAllLeds);

                    Activate(
                        Arbiter.Choice(
                            Arbiter.Receive<DefaultUpdateResponseType>(false, setAllLeds.ResponsePort,
                                delegate(DefaultUpdateResponseType response)
                                {
                                    HttpPostSuccess(httpPost);
                                }),
                            Arbiter.Receive<Fault>(false, setAllLeds.ResponsePort,
                                delegate(Fault f)
                                {
                                    HttpPostFailure(httpPost, f.Reason[0].Value);
                                })
                        )
                    );

                }
            }
            else if (!string.IsNullOrEmpty(parameters["Action"])
                && parameters["Action"] == "ScribblerSpeaker")
            {
                if (parameters["buttonOk"] == "Play" && _state.Connected)
                {
                    int tone1 = 0;
                    int tone2 = 0;
                    int duration = 0;
                    int.TryParse(parameters["Tone1"], out tone1);
                    int.TryParse(parameters["Tone2"], out tone2);
                    int.TryParse(parameters["Duration"], out duration);

                    PlayToneBody playTone = new PlayToneBody(duration, tone1, tone2);
                    PlayTone playToneMessage = new PlayTone(playTone);
                    _mainPort.PostUnknownType(playToneMessage);

                    Activate(
                        Arbiter.Choice(
                            Arbiter.Receive<DefaultUpdateResponseType>(false, playToneMessage.ResponsePort,
                                delegate(DefaultUpdateResponseType response)
                                {
                                    HttpPostSuccess(httpPost);
                                }),
                            Arbiter.Receive<Fault>(false, playToneMessage.ResponsePort,
                                delegate(Fault f)
                                {
                                    HttpPostFailure(httpPost, f.Reason[0].Value);
                                })
                        )
                    );
                }
            }
            else
            {
                HttpPostFailure(httpPost, "Unknown Http Post");
            }
            yield break;
        }