void processMidiEvent(MidiEvent mEvent) { if (mEvent.event_type == NOTE_ON) { //audio.Pause(); Midi.Events.ChannelEvents.NoteOnEvent noe = (Midi.Events.ChannelEvents.NoteOnEvent)mEvent; //print(noe.note_number + " _ " + noe.delta_time); //print (midiEventIndex + ": " + noe.note_number + " _ " + noe.delta_time); if (noe.note_number > 63) { if (lastInputTime != float.NegativeInfinity) //note was hit early { float diff = (audio.time - lastInputTime); print("early! : " + diff); acceptTimeDifference(diff, noe.note_number, lastInput); lastInputTime = float.NegativeInfinity; } else { matchNoteTime = audio.time; matchingNoteAvailable = true; lastReceivedMatchNote = noe.note_number; } } else { //AudioSource.PlayClipAtPoint(hitClip, Vector3.zero); RelayBlender rb = noteToBlender[noe.note_number]; relayWrite(rb.pin, Arduino.HIGH); //print("tick! " + rb.note); StartCoroutine(turnOffAfter(rb, .0125f)); } } else if (mEvent.event_type == NOTE_OFF) { Midi.Events.ChannelEvents.NoteOffEvent noe = (Midi.Events.ChannelEvents.NoteOffEvent)mEvent; if (noteToBlender.ContainsKey(noe.note_number)) { RelayBlender rb = noteToBlender[noe.note_number]; relayWrite(rb.pin, Arduino.LOW); } //print(noe.parameter_1); //noe. } }
IEnumerator turnOffAfter(RelayBlender rb, float time) { yield return(new WaitForSeconds(time)); relayWrite(rb.pin, Arduino.LOW); }