Exemplo n.º 1
0
    IEnumerator ConnectMidiOnStart()
    {
        yield return(new WaitUntil(() =>
                                   MIDI.initialized
                                   ));

        try
        {
            for (int i = 0; i < MidiOUTPlugin.GetDeviceCount(); i++)
            {
                var deviceName = MidiOUTPlugin.GetDeviceName(i);
                MidiOUTPlugin.DisconnectDeviceByName(deviceName);
                //Debug.Log($"DisconnectMidiOut {deviceName}");
            }

            for (int i = 0; i < MidiINPlugin.GetDeviceCount(); i++)
            {
                var deviceName = MidiINPlugin.GetDeviceName(i);
                if (!deviceName.Contains("Session"))
                {
                    MidiINPlugin.ConnectDeviceByName(deviceName);
                    //Debug.Log($"ConnectMidiIn {deviceName}");
                    break;
                }
            }
        }
        catch (Exception e)
        {
            Debug.LogWarning("ConnectMidiOnStart " + e);
        }
    }
Exemplo n.º 2
0
 static void CleanUp()
 {
     MidiOut.AllPedalsOff();
     MidiOut.AllSoundOff();
     MidiOut.ResetAllControllers();
     MidiINPlugin.DisconnectDevices();
     MidiOUTPlugin.DisconnectDevices();
     Synth.Stop();
 }
Exemplo n.º 3
0
    IEnumerator Start()
    {
        yield return(new WaitUntil(() =>
                                   MIDI.initialized
                                   ));

        MidiINPlugin.RestoreConnections();
        MidiOUTPlugin.RestoreConnections();

        Init();
    }
Exemplo n.º 4
0
    void OnGUI()
    {
        if (window == null)
        {
            window        = EditorWindow.GetWindow(typeof(MIDIEditor)) as MIDIEditor;
            oneFrameDelay = false;
            return;
        }

        if (!midiINInitialized || !midiOUTInitialized)
        {
            EditorGUILayout.HelpBox("Initializing MIDI. Please wait....", MessageType.Info);
            oneFrameDelay = false;
            return;
        }

        if (!oneFrameDelay)
        {
            oneFrameDelay = true;
            return;
        }

        if (!oneFrameDelay)
        {
            oneFrameDelay = true;
            EditorGUILayout.HelpBox("Waiting one frame...", MessageType.Info);
            return;
        }

        DrawINOUT();

        if (GUILayout.Button("Clear"))
        {
            messages = "";
        }

        scrollMessages = GUILayout.BeginScrollView(scrollMessages);
        messages       = GUILayout.TextArea(messages, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true));
        GUILayout.EndScrollView();

        if (debug)
        {
            GUILayout.Label("Connected IN Devices : " + MidiINPlugin.GetConnectedDeviceCount().ToString());
            GUILayout.Label("Connected OUT Devices : " + MidiOUTPlugin.GetConnectedDeviceCount().ToString());
        }

        debug = GUILayout.Toggle(debug, "Debug");
    }
Exemplo n.º 5
0
    static void EditorUpdate()
    {
        //return;
        MidiMessage midiMessage = new MidiMessage();
        bool        received    = false;

        while (MidiINPlugin.PopMessage(out midiMessage, true) != 0)
        {
            messages = midiMessage.ToString() + System.Environment.NewLine + messages;
            received = true;
        }

        if (window != null && received && oneFrameDelay)
        {
            window.Repaint();
        }
    }
Exemplo n.º 6
0
    public void OnDeviceClick(MidiSelectionUIDeviceButton button)
    {
        Debug.Log("Device : " + button.device.ToString() + " " + button.text.text);
        if (button.connected)
        {
            switch (button.device)
            {
            case MidiSelectionUIDeviceButton.Device.IN:
                MidiINPlugin.DisconnectDeviceByName(button.text.text);
                button.image.color = disconnectedColor;
                button.connected   = false;
                MidiINPlugin.StoreConnections();
                break;

            case MidiSelectionUIDeviceButton.Device.OUT:
                MidiOUTPlugin.DisconnectDeviceByName(button.text.text);
                button.image.color = disconnectedColor;
                button.connected   = false;
                MidiOUTPlugin.StoreConnections();
                break;
            }
        }
        else
        {
            switch (button.device)
            {
            case MidiSelectionUIDeviceButton.Device.IN:
                if (MidiINPlugin.ConnectDeviceByName(button.text.text) != null)
                {
                    button.image.color = connectedColor;
                    button.connected   = true;
                    MidiINPlugin.StoreConnections();
                }
                break;

            case MidiSelectionUIDeviceButton.Device.OUT:
                if (MidiOUTPlugin.ConnectDeviceByName(button.text.text) != null)
                {
                    button.image.color = connectedColor;
                    button.connected   = true;
                    MidiOUTPlugin.StoreConnections();
                }
                break;
            }
        }
    }
Exemplo n.º 7
0
        //static void OnTimer (object sender, System.Timers.ElapsedEventArgs e)
        //{
        //	Fetch ();
        //}

        //static void InitTimer ()
        //{
        //	timer = new System.Timers.Timer (10);
        //	timer.Elapsed += OnTimer;
        //	timer.Start ();
        //}

        //static void FinalizeTimer ()
        //{
        //	if (timer != null) {
        //		timer.Stop ();
        //		timer.Elapsed -= OnTimer;
        //		timer.Dispose ();
        //	}
        //}

        public static void Fetch()
        {
            MidiMessage midiMessage = new MidiMessage();

            while (MidiINPlugin.PopMessage(out midiMessage) != 0)
            {
                midiInMessages.Enqueue(midiMessage);
                midiOutMessages.Enqueue(midiMessage);
                midiMessage = new MidiMessage();
            }

            while (midiOutMessages.Count > 0)
            {
                if (midiOutMessages.TryDequeue(out midiMessage))
                {
                    MidiOUTPlugin.SendShortMessage(midiMessage.command, midiMessage.data1, midiMessage.data2);
                    Synth.SendMidiMessage(midiMessage.command, midiMessage.data1, midiMessage.data2);
                    midiMessage = new MidiMessage();
                }
            }
        }
Exemplo n.º 8
0
    static void AutoInit()
    {
        if (!MidiINPlugin.initialized)
        {
            EditorDispatcher.StartThread((a) => {
                MidiINPlugin.Init();
                MidiINPlugin.Refresh();
                EditorDispatcher.Dispatch((b) => {
                    MidiINPlugin.RestoreEditorConnections();
                    midiINInitialized = true;
                }, new { a = "" });
            }, new { a = "" });
        }
        else
        {
            midiINInitialized = true;
        }

        if (!MidiOUTPlugin.initialized)
        {
            EditorDispatcher.StartThread((a) => {
                MidiOUTPlugin.Init();
                MidiOUTPlugin.Refresh();
                EditorDispatcher.Dispatch((b) => {
                    MidiOUTPlugin.RestoreEditorConnections();
                    midiOUTInitialized = true;
                }, new { a = "" });
            }, new { a = "" });
        }
        else
        {
            midiOUTInitialized = true;
        }

        EditorApplication.update -= EditorUpdate;
        EditorApplication.update += EditorUpdate;
    }
Exemplo n.º 9
0
    public void HandleClick()
    {
        try
        {
            //Debug.Log("HandleClick " + Button.name);
            if (Button.name.Contains("IN CONNECT"))
            {
                Debug.Log("MidiINPlugin.ConnectDeviceByName(" + Text.text + ")");
                MidiINPlugin.ConnectDeviceByName(Text.text);
            }

            if (Button.name.Contains("IN DISCONNECT"))
            {
                Debug.Log("MidiINPlugin.DisconnectDeviceByName(" + Text.text + ")");
                MidiINPlugin.DisconnectDeviceByName(Text.text);
            }

            if (Button.name.Contains("OUT CONNECT"))
            {
                Debug.Log("MidiOUTPlugin.ConnectDeviceByName(" + Text.text + ")");
                MidiOUTPlugin.ConnectDeviceByName(Text.text);
            }

            if (Button.name.Contains("OUT DISCONNECT"))
            {
                Debug.Log("MidiOUTPlugin.DisconnectDeviceByName(" + Text.text + ")");
                MidiOUTPlugin.DisconnectDeviceByName(Text.text);
            }

            GameObject.Find("PanelSetting").GetComponent <PanelSetting>().GetMidiInOut();
        }
        catch (Exception e)
        {
            Debug.LogWarning("HandleClick " + e);
        }
    }
Exemplo n.º 10
0
        static IEnumerator InitMidiIO()
        {
            if (!MidiINPlugin.initialized)
            {
                MidiINPlugin.Init();
            }

            yield return(new WaitUntil(() =>
                                       MidiINPlugin.Initialized()
                                       ));

            if (!MidiOUTPlugin.initialized)
            {
                MidiOUTPlugin.Init();
            }

            yield return(new WaitUntil(() =>
                                       MidiOUTPlugin.Initialized()
                                       ));

            forceDefaultMidiIn  = settings.forceDefaultMidiIn;
            defaultMidiIn       = settings.defaultMidiIn;
            forceDefaultMidiOut = settings.forceDefaultMidiOut;
            defaultMidiOut      = settings.defaultMidiOut;

            if (forceDefaultMidiIn)
            {
                if (defaultMidiIn >= 0 && defaultMidiIn < MidiINPlugin.GetDeviceCount())
                {
                    MidiINPlugin.ConnectDevice(defaultMidiIn);
                }
            }
            else
            {
                MidiINPlugin.RestoreConnections();
                if (MidiINPlugin.connectedDevices.Count == 0)
                {
                    if (defaultMidiIn >= 0 && defaultMidiIn < MidiINPlugin.GetDeviceCount())
                    {
                        MidiINPlugin.ConnectDevice(defaultMidiIn);
                    }
                }
            }

            if (forceDefaultMidiOut)
            {
                if (defaultMidiOut >= 0 && defaultMidiOut < MidiOUTPlugin.GetDeviceCount())
                {
                    MidiOUTPlugin.ConnectDevice(defaultMidiOut);
                }
            }
            else
            {
                MidiOUTPlugin.RestoreConnections();
                if (MidiOUTPlugin.connectedDevices.Count == 0)
                {
                    if (defaultMidiOut >= 0 && defaultMidiOut < MidiOUTPlugin.GetDeviceCount())
                    {
                        MidiOUTPlugin.ConnectDevice(defaultMidiOut);
                    }
                }
            }
        }
Exemplo n.º 11
0
 public static void RefreshMidiIO()
 {
     MidiINPlugin.Refresh();
     MidiOUTPlugin.Refresh();
 }
Exemplo n.º 12
0
    IEnumerator GetMidiInIe()
    {
        yield return(new WaitUntil(() =>
                                   MIDI.initialized
                                   ));

        listConnectedMidiIn = new List <string>();
        //Debug.Log("MidiINPlugin.connectedDevices " + MidiINPlugin.connectedDevices.Count);
        foreach (MidiDevice md in MidiINPlugin.connectedDevices)
        {
            listConnectedMidiIn.Add(md.name);
            //Debug.Log("MidiINPlugin.connectedDevices " + md.name);
        }

        //Debug.LogWarning("GetMidiInIe");
        foreach (Transform child in PanelMidiIn.transform)
        {
            Destroy(child.gameObject);
        }

        var buttonNoMidi = Instantiate(ButtonMidi, Vector3.zero, Quaternion.identity);

        buttonNoMidi.transform.SetParent(PanelMidiIn.transform);
        buttonNoMidi.transform.localScale = Vector3.one;
        buttonNoMidi.name = "IN No Midi In Detected";
        if (LocalizationManager.instance != null)
        {
            buttonNoMidi.GetComponentInChildren <Text>().text =
                LocalizationManager.instance.GetLocalizedValue("No Midi In Detected");
        }
        else
        {
            buttonNoMidi.GetComponentInChildren <Text>().text = "No Midi In Detected";
        }

        var color = buttonNoMidi.GetComponent <Image>().color;

        color.a = 0.2f;
        buttonNoMidi.GetComponent <Image>().color = color;

        for (int i = 0; i < MidiINPlugin.GetDeviceCount(); i++)
        {
            if (MidiOUTPlugin.GetDeviceName(i).Contains("Session"))
            {
                continue;
            }

            buttonNoMidi.SetActive(false);
            var button = Instantiate(ButtonMidi, Vector3.zero, Quaternion.identity);
            button.transform.SetParent(PanelMidiIn.transform);
            button.transform.localScale = Vector3.one;
            button.GetComponentInChildren <Text>().text = MidiINPlugin.GetDeviceName(i).Trim();

            if (listConnectedMidiIn.Contains(MidiINPlugin.GetDeviceName(i)))
            {
                button.name = "IN DISCONNECT " + MidiINPlugin.GetDeviceName(i);
                color       = button.GetComponent <Image>().color;
                color.a     = 1f;
                button.GetComponent <Image>().color = color;
            }
            else
            {
                button.name = "IN CONNECT " + MidiINPlugin.GetDeviceName(i);
                color       = button.GetComponent <Image>().color;
                color.a     = 0.2f;
                button.GetComponent <Image>().color = color;
            }
        }
    }
Exemplo n.º 13
0
    void DrawINOUT()
    {
        backgroundColor = GUI.backgroundColor;

        int count = MidiINPlugin.deviceNames.Count > MidiOUTPlugin.deviceNames.Count ? MidiINPlugin.deviceNames.Count : MidiOUTPlugin.deviceNames.Count;

        if (count == 0)
        {
            EditorGUILayout.HelpBox("No MIDI connection found!!!", MessageType.Info);
        }

        float selectionHeight = count * (lineHeight + 5);
        float dialogHeight    = selectionHeight + 65;

        Rect defaultRect = new Rect(0, 0, window.position.width, dialogHeight);

        GUI.BeginGroup(defaultRect);

        float width     = defaultRect.width;
        float halfWidth = width / 2f;

        GUI.Box(new Rect(-5f, -5f, defaultRect.width + 10, defaultRect.height + 10), "");

        GUILayout.BeginHorizontal();
        GUILayout.Box("Midi IN", GUILayout.Width(halfWidth));
        GUILayout.Box("Midi OUT", GUILayout.Width(halfWidth));
        GUILayout.EndHorizontal();

        GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(5));

        bool exists = false;

        for (int i = 0; i < count; i++)
        {
            GUILayout.BeginHorizontal();
            if (i < MidiINPlugin.deviceNames.Count)
            {
                exists = false;
                foreach (MidiDevice inDevice in MidiINPlugin.connectedEditorDevices)
                {
                    if (MidiINPlugin.deviceNames [i] == inDevice.name)
                    {
                        exists = true;
                        break;
                    }
                }
                GUI.backgroundColor = exists ? Color.green : backgroundColor;
                if (GUILayout.Button(MidiINPlugin.deviceNames [i], GUILayout.Width(halfWidth), GUILayout.Height(lineHeight)))
                {
                    if (exists)
                    {
                        MidiINPlugin.DisconnectDeviceByName(MidiINPlugin.deviceNames [i], true);
                    }
                    else
                    {
                        MidiINPlugin.ConnectDevice(i, true);
                    }
                    MidiINPlugin.StoreEditorConnections();
                }
                GUI.backgroundColor = backgroundColor;
            }
            else
            {
                GUILayout.Label("", GUILayout.Width(halfWidth), GUILayout.Height(lineHeight));
            }

            if (i < MidiOUTPlugin.deviceNames.Count)
            {
                exists = false;
                foreach (MidiDevice outDevice in MidiOUTPlugin.connectedEditorDevices)
                {
                    if (MidiOUTPlugin.deviceNames [i] == outDevice.name)
                    {
                        exists = true;
                        break;
                    }
                }
                GUI.backgroundColor = exists ? Color.green : backgroundColor;
                if (GUILayout.Button(MidiOUTPlugin.deviceNames [i], GUILayout.Width(halfWidth), GUILayout.Height(lineHeight)))
                {
                    if (exists)
                    {
                        MidiOUTPlugin.DisconnectDeviceByName(MidiOUTPlugin.deviceNames [i], true);
                    }
                    else
                    {
                        MidiOUTPlugin.ConnectDevice(i, true);
                    }
                    MidiOUTPlugin.StoreEditorConnections();
                }
                GUI.backgroundColor = backgroundColor;
            }
            else
            {
                GUILayout.Label("", GUILayout.Width(halfWidth), GUILayout.Height(lineHeight));
            }

            GUILayout.EndHorizontal();
        }

        GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(5));

        GUILayout.BeginHorizontal();

        if (GUILayout.Button("Refresh", GUILayout.Width(halfWidth)))
        {
            MidiINPlugin.Refresh();
            MidiOUTPlugin.Refresh();
        }

        if (GUILayout.Button("Reset", GUILayout.Width(halfWidth)))
        {
            MidiOut.AllSoundOff();
            MidiOut.ResetAllControllers();
        }

        GUILayout.EndHorizontal();

        GUI.EndGroup();
    }
Exemplo n.º 14
0
    void Init()
    {
        foreach (MidiSelectionUIDeviceButton button in INs)
        {
            Destroy(button.gameObject);
        }

        INs = new List <MidiSelectionUIDeviceButton> ();

        foreach (MidiSelectionUIDeviceButton button in OUTs)
        {
            Destroy(button.gameObject);
        }

        OUTs = new List <MidiSelectionUIDeviceButton> ();

        int count = MidiINPlugin.deviceNames.Count > MidiOUTPlugin.deviceNames.Count ? MidiINPlugin.deviceNames.Count : MidiOUTPlugin.deviceNames.Count;

        _minHeight = count * (int)PREFAB_MidiDeviceButton.GetComponent <LayoutElement> ().preferredHeight + 100;

        if (_minHeight < minHeight)
        {
            _minHeight = minHeight;
        }

        _minWidth = minWidth;

        for (int i = 0; i < MidiINPlugin.GetDeviceCount(); i++)
        {
            var go = Instantiate(PREFAB_MidiDeviceButton);

            go.transform.SetParent(inPanel, false);
            MidiSelectionUIDeviceButton button = go.GetComponent <MidiSelectionUIDeviceButton> ();
            button.device          = MidiSelectionUIDeviceButton.Device.IN;
            button.midiSelectionUI = this;
            button.text.text       = MidiINPlugin.GetDeviceName(i);

            bool connected = false;

            foreach (MidiDevice device in MidiINPlugin.connectedDevices)
            {
                if (device.name == button.text.text)
                {
                    connected = true;
                }
            }

            button.connected = connected;

            if (connected)
            {
                button.image.color = connectedColor;
            }
            else
            {
                button.image.color = disconnectedColor;
            }

            INs.Add(button);

            int preferredWidth = (int)button.text.preferredWidth;
            if (preferredWidth > _minWidth / 2)
            {
                _minWidth = 2 * preferredWidth;
            }
        }

        for (int i = 0; i < MidiOUTPlugin.GetDeviceCount(); i++)
        {
            var go = Instantiate(PREFAB_MidiDeviceButton);
            go.transform.SetParent(outPanel, false);
            MidiSelectionUIDeviceButton button = go.GetComponent <MidiSelectionUIDeviceButton> ();
            button.device          = MidiSelectionUIDeviceButton.Device.OUT;
            button.midiSelectionUI = this;
            button.text.text       = MidiOUTPlugin.GetDeviceName(i);

            bool connected = false;

            foreach (MidiDevice device in MidiOUTPlugin.connectedDevices)
            {
                if (device.name == button.text.text)
                {
                    connected = true;
                }
            }

            button.connected = connected;

            if (connected)
            {
                button.image.color = connectedColor;
            }
            else
            {
                button.image.color = disconnectedColor;
            }

            OUTs.Add(button);

            int preferredWidth = (int)button.text.preferredWidth;
            if (preferredWidth > _minWidth / 2)
            {
                _minWidth = 2 * preferredWidth;
            }
        }

        _minWidth += 2 * widthMargin;
        //_minHeight += 2 * heightMargin;

        midiPanel.SetSize(new Vector2(_minWidth, _minHeight));
    }