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
Идентификатор устройства, который можно получить, перечислив устройства в системе 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 , является недопустимым, не пытайтесь воссоздать порт немедленно.