我試圖在Windows通用應用程序中使用C#將MIDI消息發送到Windows 10中內置的Microsoft GS Wavetable Synth。但是,檢索IMidiOutPort對象(outputPort = await MidiOutPort.FromIdAsync(outputDevice.Id);
)的代碼始終返回null。如何將MIDI信息發送到內置合成器?c#如何使用Windows.Devices.Midi將MIDI消息發送到內置的Microsoft GS Wavetable Synth?
對MidiInPort使用類似的代碼可與外部MIDI鍵盤完美配合。不幸的是,鍵盤沒有MIDI輸入,否則我會嘗試發送它來嘗試縮小可能性。
在旁註中,創建MidiSynthesizer(MidiSynthesizer synth = await MidiSynthesizer.CreateAsync();
)的代碼也返回null。
using System;
using Windows.Devices.Enumeration;
using Windows.Devices.Midi;
using Windows.UI.Xaml.Controls;
namespace HelloMidi
{
public sealed partial class MainPage : Page
{
IMidiOutPort outputPort;
DeviceInformation outputDevice;
DeviceInformationCollection outputDevices;
public MainPage()
{
this.InitializeComponent();
Connect();
}
public async void Connect()
{
outputDevices = await DeviceInformation.FindAllAsync(MidiOutPort.GetDeviceSelector());
outputList.DisplayMemberPath = "Name";
outputList.ItemsSource = outputDevices;
outputList.SelectionMode = SelectionMode.Single;
outputList.SelectionChanged += OutputList_SelectionChanged;
}
private async void OutputList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (outputPort != null)
outputPort.Dispose();
if (e.AddedItems.Count > 0)
outputDevice = (DeviceInformation)e.AddedItems[0];
if (outputDevice != null)
outputPort = await MidiOutPort.FromIdAsync(outputDevice.Id);
if (outputPort != null)
outputPort.SendMessage(new MidiStartMessage());
}
}
}
非常感謝。添加引用後,我能夠得到一個非空值。它告訴我,它沒有音頻設備,但我會盡力找出一個。非常感謝你。 – Austin
另外,我能夠創建一個MidiSynthesizer併發送一條消息給它。 – Austin