// 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; } }
public void ButtonUP() { frequency = 440; playTone = PlayTone.Stop; }
public void ButtonB() { frequency = 987.7666025122; playTone = PlayTone.Go; }
public void ButtonAs() { frequency = 932.3275230361; playTone = PlayTone.Go; }
public void ButtonA() { frequency = 880.0000000000; playTone = PlayTone.Go; }
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; }
public void ButtonE() { frequency = 659.2551138257; playTone = PlayTone.Go; }
public void ButtonD() { frequency = 587.3295358348; playTone = PlayTone.Go; }
public void ButtonF() { frequency = 698.4564628660; playTone = PlayTone.Go; }
/// <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); } }
/// <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; }
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; }
/// <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; }
public void ButtonC() { frequency = 523.2511306011; playTone = PlayTone.Go; }
public void ButtonFs() { frequency = 739.9888454232; playTone = PlayTone.Go; }
public void ButtonCs() { frequency = 554.3652619537; playTone = PlayTone.Go; }
public void ButtonG() { frequency = 783.9908719634; playTone = PlayTone.Go; }
public void ButtonDs() { frequency = 622.2539674441; playTone = PlayTone.Go; }
public void ButtonGs() { frequency = 830.6093951598; playTone = PlayTone.Go; }
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"); }
/// <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; }