MidiOutPort.FromIdAsync(String) 方法

定义

为指定的设备创建 MidiOutPort 对象。

public:
 static IAsyncOperation<IMidiOutPort ^> ^ FromIdAsync(Platform::String ^ deviceId);
/// [Windows.Foundation.Metadata.RemoteAsync]
 static IAsyncOperation<IMidiOutPort> FromIdAsync(winrt::hstring const& deviceId);
[Windows.Foundation.Metadata.RemoteAsync]
public static IAsyncOperation<IMidiOutPort> FromIdAsync(string deviceId);
function fromIdAsync(deviceId)
Public Shared Function FromIdAsync (deviceId As String) As IAsyncOperation(Of IMidiOutPort)

参数

deviceId
String

Platform::String

winrt::hstring

设备 ID,可通过枚举系统 Windows.Devices.Enumeration.DeviceInformation.FindAllAsync 上的设备来获取。

返回

异步操作。 完成后, IAsyncOperation.GetResults 返回 MidiOutPort 对象。

属性

示例

// Opens the default MIDI output device.
private async Task<IMidiOutPort> OpenDefaultMidiOut()
{
    IMidiOutPort midiOut = null;

    string midiOutQueryString = MidiOutPort.GetDeviceSelector();
    DeviceInformationCollection midiOutDevices = await DeviceInformation.FindAllAsync(midiOutQueryString);
    int selectedMidiDevice = 0;

    if (0 == midiOutDevices.Count)
    {
        Debug.WriteLine("No Midi output devices");
        return null;
    }
    // If there are > 1 MIDI out devices, pick the first non-integrated one.
    else if (2 <= midiOutDevices.Count)
    {
        for (int midiDeviceIdx = 0; midiDeviceIdx < midiOutDevices.Count; midiDeviceIdx++)
        {
            if (false == MidiSynthesizer.IsSynthesizer(midiOutDevices[midiDeviceIdx]))
            {
                selectedMidiDevice = midiDeviceIdx;
                break;
            }
        }
    }

    midiOut = await MidiOutPort.FromIdAsync(midiOutDevices[selectedMidiDevice].Id);

    return midiOut;
}
// Opens the default MIDI output device.
winrt::Windows::Foundation::IAsyncOperation<IMidiOutPort> OpenDefaultMidiOut()
{
    IMidiOutPort midiOut{ nullptr };

    winrt::hstring midiOutQueryString{ MidiOutPort::GetDeviceSelector() };
    DeviceInformationCollection midiOutDevices{ co_await DeviceInformation::FindAllAsync(midiOutQueryString) };
    uint32_t selectedMidiDevice{ 0 };

    if (0 == midiOutDevices.Size())
    {
        // No Midi output devices.
        co_return midiOut;
    }
    // If there are > 1 MIDI out devices, pick the first non-integrated one.
    else if (2 <= midiOutDevices.Size())
    {
        for (uint32_t midiDeviceIdx = 0; midiDeviceIdx < midiOutDevices.Size(); midiDeviceIdx++)
        {
            if (false == MidiSynthesizer::IsSynthesizer(midiOutDevices.GetAt(midiDeviceIdx)))
            {
                selectedMidiDevice = midiDeviceIdx;
                break;
            }
        }
    }

    midiOut = co_await MidiOutPort::FromIdAsync(midiOutDevices.GetAt(selectedMidiDevice).Id());

    co_return midiOut;
}

注解

若要枚举系统上的 MidiOutPort 对象,请将 GetDeviceSelector 提供的查询字符串传递给 Windows.Devices.Enumeration.DeviceInformation.FindAllAsync

尝试创建 MidiInPort 的建议时间适用于任何类型的应用激活或用户交互。 如果 MidiInPort 上的函数调用失败,或者从 MidiInPort 收到的消息无效,请不要尝试立即重新创建端口。

适用于