Compartilhar via


MidiOutPort.FromIdAsync(String) Método

Definição

Cria um objeto MidiOutPort para o dispositivo especificado.

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)

Parâmetros

deviceId
String

Platform::String

winrt::hstring

A ID do dispositivo, que pode ser obtida enumerando os dispositivos no sistema Windows.Devices.Enumeration.DeviceInformation.FindAllAsync.

Retornos

A operação assíncrona. Após a conclusão, IAsyncOperation.GetResults retorna um objeto MidiOutPort .

Atributos

Exemplos

// 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;
}

Comentários

Para enumerar os objetos MidiOutPort no sistema, passe a cadeia de caracteres de consulta fornecida por GetDeviceSelector para Windows.Devices.Enumeration.DeviceInformation.FindAllAsync.

Os horários sugeridos para tentar criar um MidiInPort estão em qualquer tipo de ativação de aplicativo ou interação do usuário. Se uma chamada de função em um MidiInPort falhar ou se uma mensagem recebida de um MidiInPort for inválida, não tente recriar a porta imediatamente.

Aplica-se a