Beispiel #1
0
    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.
        }
    }
Beispiel #2
0
    IEnumerator turnOffAfter(RelayBlender rb, float time)
    {
        yield return(new WaitForSeconds(time));

        relayWrite(rb.pin, Arduino.LOW);
    }