- use driver to get correct midi device

master
Simon G 5 years ago
parent 74cdd058ae
commit 0214fcbe09
  1. 2
      Lib.Audio/Device.cs
  2. 3
      Lib.Midi/Factories/IMidiCommunicationFactory.cs
  3. 4
      Lib.Midi/Lib.Midi.csproj
  4. 31
      Lib.Midi/MidiCommunication.cs

@ -23,7 +23,7 @@ namespace Lib.Audio
public Device(IDriver driver, IMidiCommunicationFactory midiCommunicationFactory, IChannelFactory channelFactory)
{
_driver = driver;
_midiCommunication = midiCommunicationFactory.Create();
_midiCommunication = midiCommunicationFactory.Create(driver);
_channelFactory = channelFactory;
Channels = InitializeChannels();

@ -2,12 +2,13 @@
// Created: 2021-04-09
// Copyright(c) 2021 SimonG. All Rights Reserved.
using Lib.Driver.Interfaces;
using Lib.Midi.Interfaces;
namespace Lib.Midi.Factories
{
public interface IMidiCommunicationFactory
{
IMidiCommunication Create();
IMidiCommunication Create(IDriver driver);
}
}

@ -9,4 +9,8 @@
<PackageReference Include="NAudio.Midi" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Lib.Driver\Lib.Driver.csproj" />
</ItemGroup>
</Project>

@ -3,6 +3,9 @@
// Copyright(c) 2021 SimonG. All Rights Reserved.
using System;
using System.Collections.Generic;
using System.Linq;
using Lib.Driver.Interfaces;
using Lib.Midi.Interfaces;
using Lib.Midi.Messages.Factories;
using Lib.Midi.Messages.Interfaces;
@ -16,11 +19,33 @@ namespace Lib.Midi
private readonly MidiIn _midiIn;
private readonly MidiOut _midiOut;
public MidiCommunication(IMidiMessageFactory midiMessageFactory)
public MidiCommunication(IDriver driver, IMidiMessageFactory midiMessageFactory)
{
_midiMessageFactory = midiMessageFactory;
_midiIn = new MidiIn(0); //TODO: don't always use device 0?
_midiOut = new MidiOut(0);
var midiInput = MidiInputs.FirstOrDefault(i => i.midiInCapabilities.ProductId == driver.ProductId);
var midiOutput = MidiOutputs.FirstOrDefault(o => o.midiOutCapabilities.ProductId == driver.ProductId);
_midiIn = new MidiIn(midiInput.index);
_midiOut = new MidiOut(midiOutput.index);
}
private IEnumerable<(MidiInCapabilities midiInCapabilities, int index)> MidiInputs
{
get
{
for (int i = 0; i < MidiIn.NumberOfDevices; i++)
yield return (MidiIn.DeviceInfo(i), i);
}
}
private IEnumerable<(MidiOutCapabilities midiOutCapabilities, int index)> MidiOutputs
{
get
{
for (int i = 0; i < MidiOut.NumberOfDevices; i++)
yield return (MidiOut.DeviceInfo(i), i);
}
}
public void Open()

Loading…
Cancel
Save