Search code examples
c#.netmvvmmidimaui

Can't connect a midi output device to .net MAUI using DryWetMidi


I am using the library DryWetMIDI for .net 7 and I am trying to connect a MIDI output device to MAUI. When I connect a input device it seems to work fine but the only output from the outputdevice I could get was the following error: Internal error (OUT_SENDSHORTRESULT_INVALIDHANDLE). When I tried everything in a simple console application it works perfectly.

Also because of my lack in experience in Maui I don’t really know if I should change something in the project dependencies or in the builder. Or maybe declare the MIDI in the App or the Appshell...

So I tried to create a input device and a output device and connect them to eachother (This is what the DryWetMIDI suggested). Next I try to get the events from the input and the outup device, the input device works but the output device doesnt.

I use the following code where the ouput device doesnt work in Maui:

    private InputDevice inputDevice;
    private OutputDevice outputDevice;
    private DevicesConnector devicesConnector;

    void ConnectMidi()
    {
        //create input device
        inputDevice = InputDevice.GetByName("Keystation Mini 32");
        inputDevice.EventReceived += OnEventReceived;

        //create ouput device;
        outputDevice = OutputDevice.GetByName("Microsoft GS Wavetable Synth");
        outputDevice.EventSent += OnEventSent;
        
        //connect them
        devicesConnector = inputDevice.Connect(outputDevice);

        inputDevice.StartEventsListening();
    }

    public void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
    {
        var midiDevice = (MidiDevice)sender;
        Debug.WriteLine("This gets called when a key is pressed")  ;  
    }


    public void OnEventSent(object sender, MidiEventReceivedEventArgs e)
    {
        var midiDevice = (MidiDevice)sender;
        Debug.WriteLine("This gets never called");   
    }

If there is anohter solution using a diffrent library or something else I would love to hear it!

Hopefully this makes my problem clear and thanks in advance. (This is also my first post so feedback would also be nice)


Solution

  • I'm the author of the DryWetMIDI. I've analyzed the problem:

    1. The bug is not with the library, it's a MAUI related one.
    2. The error comes from midiOutOpen system Windows function which fails for Microsoft GS Wavetable Synth in a MAUI project but works for any other project types.

    I've reported the bug in MAUI repo: https://github.com/dotnet/maui/issues/12368. So what we have is to wait for response from Microsoft.

    Update:

    The bug has been moved to WinUI repo: https://github.com/microsoft/microsoft-ui-xaml/issues/8055. Also you can mark your project as Unpackaged and the issue should go away.