public IEnumerable <PinEvent> getOnOffEvents(PinMessage m, double ms) { var pinToSend = m.PinNumber; var actuator = pins.GetActuatorPin(pinToSend).Actuator; // calculate the off time var offTime = ms + actuator.GetOnLengthMsForVoltage(m.Value); // do the velocity (it is scaled in the actuator) var value = actuator.MapData(m.Value); // on yield return(new PinEvent() { TotalMsDelta = ms, Message = new PinMessage() { PinNumber = pinToSend, Value = value } }); // off yield return(new PinEvent() { TotalMsDelta = offTime, Message = new PinMessage() { PinNumber = pinToSend, Value = 0 } }); }
public void Schedule(PinMessage m, double ms) { Schedule(new PinEvent() { Message = m, TotalMsDelta = ms }); }
public void Record(PinMessage cmd) { if ((events.Count == 0) && (FirstNoteStartsRecording)) { BeginRecord(); } // System.Diagnostics.Debug.WriteLine("Recorded pin " + cmd.PinNumber + "," + cmd.Value + " #" + events.Count + " at " + DeltaMs); events.Enqueue(new PinEvent() { Message = cmd, TotalMsDelta = DeltaMs }); }
public void Send(PinMessage cmd) { // System.Diagnostics.Debug.WriteLine(value); // get the actual pin messages (on and off) var events = getOnOffEvents(cmd, 0); foreach (var e in events) { // send each message if (!noteons.ContainsKey(cmd.PinNumber)) { // not already playing.. send it send(e); } else { System.Diagnostics.Debug.WriteLine("skip " + cmd.PinNumber); } } }
public IEnumerable<PinEvent> getOnOffEvents(PinMessage m, double ms) { var pinToSend = m.PinNumber; var actuator = pins.GetActuatorPin(pinToSend).Actuator; // calculate the off time var offTime = ms + actuator.GetOnLengthMsForVoltage(m.Value); // do the velocity (it is scaled in the actuator) var value = actuator.MapData(m.Value); // on yield return new PinEvent() { TotalMsDelta = ms, Message = new PinMessage() { PinNumber = pinToSend, Value = value } }; // off yield return new PinEvent() { TotalMsDelta = offTime, Message = new PinMessage() { PinNumber = pinToSend, Value = 0 } }; }