- 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) public Device(IDriver driver, IMidiCommunicationFactory midiCommunicationFactory, IChannelFactory channelFactory)
{ {
_driver = driver; _driver = driver;
_midiCommunication = midiCommunicationFactory.Create(); _midiCommunication = midiCommunicationFactory.Create(driver);
_channelFactory = channelFactory; _channelFactory = channelFactory;
Channels = InitializeChannels(); Channels = InitializeChannels();

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

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

@ -3,6 +3,9 @@
// Copyright(c) 2021 SimonG. All Rights Reserved. // Copyright(c) 2021 SimonG. All Rights Reserved.
using System; using System;
using System.Collections.Generic;
using System.Linq;
using Lib.Driver.Interfaces;
using Lib.Midi.Interfaces; using Lib.Midi.Interfaces;
using Lib.Midi.Messages.Factories; using Lib.Midi.Messages.Factories;
using Lib.Midi.Messages.Interfaces; using Lib.Midi.Messages.Interfaces;
@ -16,11 +19,33 @@ namespace Lib.Midi
private readonly MidiIn _midiIn; private readonly MidiIn _midiIn;
private readonly MidiOut _midiOut; private readonly MidiOut _midiOut;
public MidiCommunication(IMidiMessageFactory midiMessageFactory) public MidiCommunication(IDriver driver, IMidiMessageFactory midiMessageFactory)
{ {
_midiMessageFactory = 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() public void Open()

Loading…
Cancel
Save