Drivers MIDI do Windows 10: como instalá -los em algumas etapas

A equipe do Windows adoraria ouvir seu feedback. Por favor, mantenha o feedback que vem usando o site do Windows Developer UserVoice. Se você tiver um bug direto, use a ferramenta de feedback do Windows criada diretamente no Windows 10.

MIDI

Este artigo mostra como enumerar os dispositivos MIDI (Interior da Interface Digital Musical) e enviar e receber mensagens MIDI de um aplicativo universal do Windows. O Windows 10 suporta MIDI sobre USB (motorista compatível com a classe e a maioria dos proprietários), Midi Over Bluetooth LE (edição de aniversário do Windows 10 e mais tarde) e através de produtos de terceiros gratuitos, Midi sobre Ethernet e Midi roteado.

Enumerar dispositivos MIDI

Antes de enumerar e usar dispositivos MIDI, adicione os seguintes espaços para o seu projeto.

usando o Windows.Dispositivos.Enumeração;
usando o Windows.Dispositivos.Midi;
usando o sistema.Rosqueamento.Tarefas;

Adicione a ListBox Controle para sua página XAML que permitirá ao usuário selecionar um dos dispositivos de entrada MIDI anexados ao sistema. Adicione outro para listar os dispositivos de saída MIDI.

O Findallasync método Informação de dispositivo A classe é usada para enumerar muitos tipos diferentes de dispositivos reconhecidos pelo Windows. Para especificar que você deseja que o método só encontre dispositivos de entrada MIDI, use a seletor String retornada por Midiinport.GetDeviceSelector. Findallasync retorna a DeviceInformationCollection que contém a Informação de dispositivo Para cada dispositivo de entrada MIDI registrado no sistema. Se a coleção retornada não contiver itens, não há dispositivos de entrada MIDI disponíveis. Se houver itens na coleção, atravesse o Informação de dispositivo objetos e adicione o nome de cada dispositivo ao dispositivo de entrada MIDI ListBox.

tarefa assíncrona privada enumeratemidiinputDevices ()
{
    // Encontre todos os dispositivos MIDI de entrada
    string midiInputQueryString = midiinport.GetDeviceSelector ();
    DeviceInformationCollection midiInputDevices = Aguarda DeviceInformation.Findallasync (midiInputQueryString);
    MidiinportListBox.Unid.Claro();
    // retorna se nenhum dispositivo externo estiver conectado
    if (midiInputDevices.Contagem == 0)
    {
        esse.MidiinportListBox.Unid.Add ("Não há dispositivos de entrada MIDI encontrados!");
        esse.MidiinportListBox.Isenabled = false;
        retornar;
    }
    // senão, adicione cada dispositivo de entrada conectado à lista
    foreach (DeviceInformation DeviceInfo em MidiInputDevices)
    {
        esse.MidiinportListBox.Unid.Adicionar (DeviceInfo.Nome);
    }
    esse.MidiinportListBox.Isenabled = true;
}

Enumiar os dispositivos de saída MIDI funciona exatamente da mesma maneira que a enumeração de dispositivos de entrada, exceto que você deve especificar a seleção de seletor retornada por Midioutport.GetDeviceSelector Ao ligar Findallasync.

tarefa assíncrona privada enumeratemidioutputDevices ()
{
    // Encontre todos os dispositivos MIDI de saída
    string midioutportQueryString = midioutport.GetDeviceSelector ();
    DeviceInformationCollection midiOutputDevices = Aguarda DeviceInformation.Findallasync (MidiOutPortQueryString);
    MidiOutPortListBox.Unid.Claro();
    // retorna se nenhum dispositivo externo estiver conectado
    if (midiOutputDevices.Contagem == 0)
    {
        esse.MidiOutPortListBox.Unid.Add ("Não há dispositivos de saída MIDI encontrados!");
        esse.MidiOutPortListBox.Isenabled = false;
        retornar;
    }
    // senão, adicione cada dispositivo de entrada conectado à lista
    foreach (DeviceInformation DeviceInfo em MidiOutputDevices)
    {
        esse.MidiOutPortListBox.Unid.Adicionar (DeviceInfo.Nome);
    }
    esse.MidiOutPortListBox.Isenabled = true;
}

Crie uma classe auxiliar de observador de dispositivo

O janelas.Dispositivos.Enumeração o espaço para nome fornece o DeviceWatcher que podem notificar seu aplicativo se os dispositivos forem adicionados ou removidos do sistema, ou se as informações para um dispositivo forem atualizadas. Como os aplicativos de Midi-habilitados normalmente estão interessados ​​nos dispositivos de entrada e saída, este exemplo cria uma classe auxiliar que implementa o DeviceWatcher padrão, para que o mesmo código possa ser usado para dispositivos de entrada MIDI e de saída MIDI, sem a necessidade de duplicação.

Adicione uma nova aula ao seu projeto para servir como observador do seu dispositivo. Neste exemplo, a classe é nomeada MymidideviceWatcher. O restante do código nesta seção é usado para implementar a classe auxiliar.

Adicione algumas variáveis ​​de membro à classe:

  • A DeviceWatcher objeto que monitorará as alterações do dispositivo.
  • Uma sequência de seletor de dispositivo que conterá a seleção MIDI na seletor de porta para uma instância e a seletor de porta MIDI out para outra instância.
  • A ListBox controle que será preenchido com os nomes dos dispositivos disponíveis.
  • A Coredispatcher Isso é necessário para atualizar a interface do usuário de um tópico que não seja o tópico da interface do usuário.
DeviceWatcher DeviceWatcher;
String DeviceSelectorString;
ListBox deviceListBox;
Coredispatcher coredispatcher;

Adicione a DeviceInformationCollection Propriedade usada para acessar a lista atual de dispositivos de fora da classe ajudante.

public DeviceInformationCollection DeviceInformationCollection {get; conjunto privado; }

No construtor de classe, o chamador passa na seletor de dispositivos MIDI, a string, a ListBox para listar os dispositivos e o Expedidor precisava atualizar a interface do usuário.

Chamar Informação de dispositivo.Createwatcher Para criar uma nova instância do DeviceWatcher classe, passando na seletor de dispositivos MIDI.

Registre manipuladores para os manipuladores de eventos do Watcher.

public mymididevicewatcher (string midideviceSelectorString, listbox mididevicelistbox, cededispatcher despachante)
{
    DeviceSelectorString = midideviceSelectorString;
    deviceListBox = mididevicelistBox;
    coredispatcher = despachante;
    DeviceWatcher = DeviceInformation.CreateWatcher (DeviceSelectorString);
    DeviceWatcher.Adicionado += DeviceWatcher_Added;
    DeviceWatcher.Removido += dispositivowatcher_removed;
    DeviceWatcher.Atualizado += DeviceWatcher_Updated;
    DeviceWatcher.EnumeraçãoCompleted += deviceWatcher_enumationCompleted;
}

Pergunta 1: Como posso enumerar os dispositivos de entrada MIDI em um aplicativo universal do Windows?

Você pode enumerar dispositivos de entrada MIDI em um aplicativo universal do Windows usando o Findallasync Método do Informação de dispositivo aula. Para especificar que você deseja encontrar apenas dispositivos de entrada MIDI, use a seleção String retornada por Midiinport.GetDeviceSelector. Loop através do Informação de dispositivo objetos no retorno DeviceInformationCollection e adicione o nome de cada dispositivo a um controle da caixa de listagem.

Pergunta 2: Como posso enumerar os dispositivos de saída MIDI em um aplicativo universal do Windows?

Você pode enumerar dispositivos de saída MIDI em um aplicativo Windows Universal usando o mesmo método que enumerar dispositivos de entrada. Basta usar a seleção de seletor retornada por Midioutport.GetDeviceSelector Em vez disso, quando chama Findallasync.

Pergunta 3: Como faço para criar uma classe auxiliar de observador de dispositivo em um aplicativo universal do Windows?

Você pode criar uma classe auxiliar de observador de dispositivo em um aplicativo universal do Windows, implementando o DeviceWatcher padrão do janelas.Dispositivos.Enumeração espaço para nome. Isso permite que seu aplicativo seja notificado quando os dispositivos são adicionados ou removidos do sistema, ou se as informações para um dispositivo forem atualizadas. A classe ajudante pode ser usada para dispositivos de entrada e saída MIDI sem duplicação de código.

Pergunta 4: Como posso usar um controle de caixa de listar para listar dispositivos de entrada MIDI em um aplicativo universal do Windows?

Em um aplicativo Windows Universal, você pode usar um controle de caixa de listar para listar dispositivos de entrada MIDI. Adicione um controle da caixa de listagem à sua página xaml e preencha -a com os nomes dos dispositivos de entrada MIDI, loop -se através do Informação de dispositivo objetos no DeviceInformationCollection obtido de Findallasync.

Pergunta 5: Como posso usar um controle de caixa de listar para listar dispositivos de saída MIDI em um aplicativo universal do Windows?

Usando um controle de caixa de listar para listar dispositivos de saída MIDI em um aplicativo universal do Windows é semelhante à listagem de dispositivos de entrada. Simplesmente obtenha o DeviceInformationCollection Para dispositivos de saída usando Findallasync e percorrer o Informação de dispositivo objetos para preencher o controle da caixa de listar.

Pergunta 6: Como posso atualizar a interface do usuário de um tópico que não seja o tópico da interface do usuário em um aplicativo universal do Windows?

Você pode atualizar a interface do usuário de um tópico que não seja o tópico da interface do usuário em um aplicativo universal do Windows usando o Coredispatcher aula. Passe a instância do CORELISPACHER para a classe auxiliar do Vigilante do dispositivo e use seu Runasync Método para executar o código no tópico da interface do usuário.

Pergunta 7: Como posso monitorar as alterações no dispositivo em um aplicativo universal do Windows?

Em um aplicativo universal do Windows, você pode monitorar alterações no dispositivo usando o DeviceWatcher aula. Registrar manipuladores de eventos para o Adicionado, Removido, Atualizada, e Enumeração comprovado Eventos do Vigilante do dispositivo a ser notificado quando os dispositivos são adicionados, removidos, atualizados ou quando a operação de enumeração é concluída.

Pergunta 8: Como posso lidar com o evento quando um novo dispositivo MIDI é adicionado em um aplicativo universal do Windows?

Você pode lidar com o evento quando um novo dispositivo MIDI é adicionado em um aplicativo universal do Windows, assinando o Adicionado Evento do Vigilante do Dispositivo. No manipulador de eventos, você pode atualizar a interface do usuário para refletir o novo dispositivo.

Pergunta 9: Como posso lidar com o evento quando um dispositivo MIDI é removido em um aplicativo universal do Windows?

Para lidar com o evento quando um dispositivo MIDI é removido em um aplicativo universal do Windows, assine o Removido Evento do Vigilante do Dispositivo. No manipulador de eventos, você pode atualizar a interface do usuário para remover o dispositivo da lista.

Pergunta 10: Como posso lidar com o evento quando as informações de um dispositivo MIDI são atualizadas em um aplicativo universal do Windows?

Em um aplicativo universal do Windows, você pode lidar com o evento quando as informações de um dispositivo MIDI são atualizadas assinando o Atualizada Evento do Vigilante do Dispositivo. No manipulador de eventos, você pode atualizar a interface do usuário para refletir as informações atualizadas do dispositivo.

Pergunta 11: Como posso determinar se não há dispositivos de entrada MIDI disponíveis em um aplicativo universal do Windows?

Em um aplicativo universal do Windows, você pode determinar se não há dispositivos de entrada MIDI disponíveis, verificando a contagem do DeviceInformationCollection obtido de Findallasync. Se a contagem for 0, significa que não há dispositivos de entrada MIDI disponíveis.

Pergunta 12: Como posso determinar se não há dispositivos de saída MIDI disponíveis em um aplicativo universal do Windows?

Em um aplicativo universal do Windows, você pode determinar se não há dispositivos de saída MIDI disponíveis, verificando a contagem do DeviceInformationCollection obtido de Findallasync. Se a contagem for 0, significa que não há dispositivos de saída MIDI disponíveis.

Pergunta 13: Como posso lidar com o evento quando a enumeração de dispositivos MIDI é concluída em um aplicativo universal do Windows?

Você pode lidar com o evento quando a enumeração de dispositivos MIDI é concluída em um aplicativo universal do Windows, assinando o Enumeração comprovado Evento do Vigilante do Dispositivo. No manipulador de eventos, você pode executar as ações necessárias após a conclusão da enumeração.

Pergunta 14: Como posso verificar se um dispositivo MIDI específico é um dispositivo de entrada ou um dispositivo de saída em um aplicativo universal do Windows?

Em um aplicativo universal do Windows, você pode verificar se um dispositivo MIDI específico é um dispositivo de entrada ou um dispositivo de saída usando o Informação de dispositivo propriedades do objeto. As propriedades do dispositivo contêm informações sobre o tipo de dispositivo, como se é um dispositivo de entrada ou saída.

Pergunta 15: Como posso acessar a lista atual de dispositivos MIDI de fora da classe auxiliar do Watchers de dispositivo em um aplicativo universal do Windows?

Em um aplicativo universal do Windows, você pode acessar a lista atual de dispositivos MIDI de fora da classe Helper Watcher Helper, usando uma propriedade. Criar uma propriedade pública do tipo DeviceInformationCollection na classe auxiliar e defina seu valor sempre que a lista de dispositivos é atualizada. Você pode acessar esta propriedade de outras partes do seu aplicativo para obter a lista atual de dispositivos MIDI.

Drivers MIDI do Windows 10: como instalá -los em algumas etapas

A equipe do Windows adoraria ouvir seu feedback. Por favor, mantenha o feedback que vem usando o site do Windows Developer UserVoice. Se você tiver um bug direto, use a ferramenta de feedback do Windows criada diretamente no Windows 10.

MIDI

Este artigo mostra como enumerar os dispositivos MIDI (Interior da Interface Digital Musical) e enviar e receber mensagens MIDI de um aplicativo universal do Windows. O Windows 10 suporta MIDI sobre USB (motorista compatível com a classe e a maioria dos proprietários), Midi Over Bluetooth LE (edição de aniversário do Windows 10 e mais tarde) e através de produtos de terceiros gratuitos, Midi sobre Ethernet e Midi roteado.

Enumerar dispositivos MIDI

Antes de enumerar e usar dispositivos MIDI, adicione os seguintes espaços para o seu projeto.

usando o Windows.Dispositivos.Enumeração; usando o Windows.Dispositivos.Midi; usando o sistema.Rosqueamento.Tarefas; 

Adicione a ListBox Controle para sua página XAML que permitirá ao usuário selecionar um dos dispositivos de entrada MIDI anexados ao sistema. Adicione outro para listar os dispositivos de saída MIDI.

O Findallasync método Informação de dispositivo A classe é usada para enumerar muitos tipos diferentes de dispositivos reconhecidos pelo Windows. Para especificar que você deseja que o método só encontre dispositivos de entrada MIDI, use a seletor String retornada por Midiinport.GetDeviceSelector. Findallasync retorna a DeviceInformationCollection que contém a Informação de dispositivo Para cada dispositivo de entrada MIDI registrado no sistema. Se a coleção retornada não contiver itens, não há dispositivos de entrada MIDI disponíveis. Se houver itens na coleção, atravesse o Informação de dispositivo objetos e adicione o nome de cada dispositivo ao dispositivo de entrada MIDI ListBox.

tarefa assíncrona privada enumeratemidiinputDevices () < // Find all input MIDI devices string midiInputQueryString = MidiInPort.GetDeviceSelector(); DeviceInformationCollection midiInputDevices = await DeviceInformation.FindAllAsync(midiInputQueryString); midiInPortListBox.Items.Clear(); // Return if no external devices are connected if (midiInputDevices.Count == 0) < this.midiInPortListBox.Items.Add("No MIDI input devices found!"); this.midiInPortListBox.IsEnabled = false; return; >// Else, adicione cada dispositivo de entrada conectado à lista paraeach (DeviceInformation DeviceInfo em MidiInputDevices) < this.midiInPortListBox.Items.Add(deviceInfo.Name); >esse.MidiinportListBox.Isenabled = true; > 

Enumiar os dispositivos de saída MIDI funciona exatamente da mesma maneira que a enumeração de dispositivos de entrada, exceto que você deve especificar a seleção de seletor retornada por Midioutport.GetDeviceSelector Ao ligar Findallasync.

tarefa assíncrona privada enumeratemidioutputDevices () < // Find all output MIDI devices string midiOutportQueryString = MidiOutPort.GetDeviceSelector(); DeviceInformationCollection midiOutputDevices = await DeviceInformation.FindAllAsync(midiOutportQueryString); midiOutPortListBox.Items.Clear(); // Return if no external devices are connected if (midiOutputDevices.Count == 0) < this.midiOutPortListBox.Items.Add("No MIDI output devices found!"); this.midiOutPortListBox.IsEnabled = false; return; >// Else, adicione cada dispositivo de entrada conectado à lista paraeach (DeviceInformation DeviceInfo em MidiOutputDevices) < this.midiOutPortListBox.Items.Add(deviceInfo.Name); >esse.MidiOutPortListBox.Isenabled = true; > 

Crie uma classe auxiliar de observador de dispositivo

O janelas.Dispositivos.Enumeração o espaço para nome fornece o DeviceWatcher que podem notificar seu aplicativo se os dispositivos forem adicionados ou removidos do sistema, ou se as informações para um dispositivo forem atualizadas. Como os aplicativos de Midi-habilitados normalmente estão interessados ​​nos dispositivos de entrada e saída, este exemplo cria uma classe auxiliar que implementa o DeviceWatcher padrão, para que o mesmo código possa ser usado para dispositivos de entrada MIDI e de saída MIDI, sem a necessidade de duplicação.

Adicione uma nova aula ao seu projeto para servir como observador do seu dispositivo. Neste exemplo, a classe é nomeada MymidideviceWatcher. O restante do código nesta seção é usado para implementar a classe auxiliar.

Adicione algumas variáveis ​​de membro à classe:

  • A DeviceWatcher objeto que monitorará as alterações do dispositivo.
  • Uma sequência de seletor de dispositivo que conterá a seleção MIDI na seletor de porta para uma instância e a seletor de porta MIDI out para outra instância.
  • A ListBox controle que será preenchido com os nomes dos dispositivos disponíveis.
  • A Coredispatcher Isso é necessário para atualizar a interface do usuário de um tópico que não seja o tópico da interface do usuário.

DeviceWatcher DeviceWatcher; String DeviceSelectorString; ListBox deviceListBox; Coredispatcher coredispatcher; 

Adicione a DeviceInformationCollection Propriedade usada para acessar a lista atual de dispositivos de fora da classe ajudante.

Public DeviceInformationCollection DeviceInformationCollection

No construtor de classe, o chamador passa na seletor de dispositivos MIDI, a seleção de dispositivos, a ListBox para listar os dispositivos e o Expedidor precisava atualizar a interface do usuário.

Chamar Informação de dispositivo.Createwatcher Para criar uma nova instância do DeviceWatcher classe, passando na seletor de dispositivos MIDI.

Registre manipuladores para os manipuladores de eventos do Watcher.

public mymididevicewatcher (string midideviceSelectorString, listbox mididevicelistbox, cededispatcher despachante)

O DeviceWatcher tem os seguintes eventos:

  • Adicionado – Levantado quando um novo dispositivo é adicionado ao sistema.
  • Removido – Levantado quando um dispositivo é removido do sistema.
  • Atualizada – Levantado quando as informações associadas a um dispositivo existente são atualizadas.
  • Enumeração comprovado – Levantado quando o observador concluiu sua enumeração do tipo de dispositivo solicitado.

No manipulador de eventos para cada um desses eventos, um método auxiliar, UpdateDevices, é chamado para atualizar o ListBox com a lista atual de dispositivos. Porque UpdateDevices Atualiza os elementos da interface do usuário e esses manipuladores de eventos não são chamados no tópico da interface do usuário, cada chamada deve ser envolvida em uma chamada para Runasync, que faz com que o código especificado seja executado no tópico da interface do usuário.

private assíncrono void deviceWatcher_removed (remetente de dispositivo de dispositivo, deviceNformationUpdate args) < await coreDispatcher.RunAsync(CoreDispatcherPriority.High, () =>< // Update the device list UpdateDevices(); >); > ASYNC PRIVADO VOID DEVECIDADO DO DEVISADO_ADDED (remetente de DeviceWatcher, DeviceInformation args) < await coreDispatcher.RunAsync(CoreDispatcherPriority.High, () =>< // Update the device list UpdateDevices(); >); > ASYNC PRIVADO VOID DEPITODWATHER_ENUMERATIONCOMPLETED (remetente de dispositivo de dispositivo, objeto args) < await coreDispatcher.RunAsync(CoreDispatcherPriority.High, () =>< // Update the device list UpdateDevices(); >); > ASYNC PRIVADO VOID DEVISADOR ADEPENDIDO_UPDATED (DeviceWatcher remetente, DeviceInformationUpdate args) < await coreDispatcher.RunAsync(CoreDispatcherPriority.High, () =>< // Update the device list UpdateDevices(); >); > 

O UpdateDevices Chamadas de método auxiliar Informação de dispositivo.Findallasync e atualiza o ListBox com os nomes dos dispositivos retornados, conforme descrito anteriormente neste artigo.

ASYNC PRIVADO VOID UPDATEDEVICES () < // Get a list of all MIDI devices this.DeviceInformationCollection = await DeviceInformation.FindAllAsync(deviceSelectorString); deviceListBox.Items.Clear(); if (!this.DeviceInformationCollection.Any()) < deviceListBox.Items.Add("No MIDI devices found!"); >foreach (Var DeviceInformation neste.DeviceInformationCollection) < deviceListBox.Items.Add(deviceInformation.Name); >> 

Adicionar métodos para iniciar o observador, usando o DeviceWatcher Objeto Começar método, e para parar o observador, usando o Parar método.

public void startwatcher () < deviceWatcher.Start(); >Public Void Stopwatcher ()

Forneça um destruidor para não registrar os manipuladores de eventos do Watcher e defina o vigilante do dispositivo como NULL.

~ MymidideviceWatcher ()

Crie portas MIDI para enviar e receber mensagens

No código por trás da sua página, declare variáveis ​​de membros para manter duas instâncias do MymidideviceWatcher Classe Helper, um para dispositivos de entrada e outro para dispositivos de saída.

MymidideviceWatcher inputDeviceWatcher; MymidideviceWatcher OutputDeviceWatcher; 

Crie uma nova instância das classes auxiliares do Watcher, passando na seletor de dispositivos, a seleção, a ListBox para ser povoado e o Coredispatcher objeto que pode ser acessado através da página Expedidor propriedade. Então, chame o método para iniciar cada objeto DeviceWatcher.

Logo após cada um DeviceWatcher é iniciado, ele terminará a enumeração dos dispositivos atuais conectados ao sistema e elevará seu Enumeração comprovado evento, que causará cada ListBox para ser atualizado com os dispositivos MIDI atuais.

inputDeviceWatcher = new MymidideviceWatcher (Midiinport.GetDeviceSelector (), MidiinportListBox, Dispatcher); InputDeviceWatcher.Startwatcher (); outputDeviceWatcher = new MymidideviceWatcher (Midioutport.GetDeviceSelector (), MidiOutportListBox, Dispatcher); outputDeviceWatcher.Startwatcher (); 

Quando o usuário seleciona um item na entrada MIDI ListBox, o Seleção mudou Evento é levantado. No manipulador deste evento, acesse o DeviceInformationCollection propriedade da classe ajudante para obter a lista atual de dispositivos. Se houver entradas na lista, selecione o Informação de dispositivo objeto com o índice correspondente ao ListBox Control’s SelectedIndex.

Crie o Midiinport objeto representando o dispositivo de entrada selecionado ligando Midiinport.Fromidasync, passando no Eu ia propriedade do dispositivo selecionado.

Registrar um manipulador para o Mensagem recebida Evento, que é levantado sempre que uma mensagem MIDI é recebida através do dispositivo especificado.

Midiinport Midiinport; Imidioutport midioutport; 

ASYNC PRIVADO VOID MIDIINPORTLISTBOX_SELECTIONCHANGED (remetente de objeto, SelectionChangedEventArgs e) < var deviceInformationCollection = inputDeviceWatcher.DeviceInformationCollection; if (deviceInformationCollection == null) < return; >DeviceInformation Devinfo = DeviceInformationCollection [MidiinportListBox.SelectedIndex]; if (devinfo == null) < return; >midiinport = aguardar midiinport.Fromidasync (Devinfo.Eu ia); if (midiinport == null) < System.Diagnostics.Debug.WriteLine("Unable to create MidiInPort from input device"); return; >midiinport.MessagerEveived += midiinport_messageReceed; > 

Quando o Mensagem recebida manipulador é chamado, a mensagem está contida no Mensagem propriedade do MIDIMESSAGERECEEVEDEVENTARGS. O Tipo do objeto de mensagem é um valor do MidimessageType enumeração indicando o tipo de mensagem que foi recebida. Os dados da mensagem dependem do tipo de mensagem. Este exemplo verifica para ver se a mensagem é uma nota na mensagem e, se assim for, produz o canal MIDI, nota e velocidade da mensagem.

private vazio midiinport_messagereceed (remetente Midiinport, midimessagereceiveEventArgs args) < IMidiMessage receivedMidiMessage = args.Message; System.Diagnostics.Debug.WriteLine(receivedMidiMessage.Timestamp.ToString()); if (receivedMidiMessage.Type == MidiMessageType.NoteOn) < System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Channel); System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Note); System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Velocity); >> 

O Seleção mudou manipulador para o dispositivo de saída ListBox Funciona da mesma forma que o manipulador para dispositivos de entrada, exceto que nenhum manipulador de eventos está registrado.

ASYNC PRIVADO VOID MIDIOUTPORTLISTBOX_SELECTIONCHANGED (remetente de objeto, SelectionChangedEventArgs e) < var deviceInformationCollection = outputDeviceWatcher.DeviceInformationCollection; if (deviceInformationCollection == null) < return; >DeviceInformation Devinfo = DeviceInformationCollection [MIDIOUTPORTLISTBOX.SelectedIndex]; if (devinfo == null) < return; >midioutport = aguarda midioutport.Fromidasync (Devinfo.Eu ia); if (midioutport == null) < System.Diagnostics.Debug.WriteLine("Unable to create MidiOutPort from output device"); return; >> 

Depois que o dispositivo de saída for criado, você pode enviar uma mensagem criando um novo Imidimessage Para o tipo de mensagem que você deseja enviar. Neste exemplo, a mensagem é um NoteOnMessage. O Enviar mensagem Método do Imidioutport O objeto é chamado para enviar a mensagem.

canal de byte = 0; byte Note = 60; velocidade de byte = 127; Imidimessage midimessagetosnd = new MidinoteonMessage (canal, nota, velocidade); midioutport.SendMessage (Midimessagetosnd); 

Quando seu aplicativo estiver desativado, limpe seus recursos de aplicativos. Não registre seus manipuladores de eventos e defina o MIDI no porto e os objetos de porta para nulos. Pare os observadores do dispositivo e defina -os como nulos.

InputDeviceWatcher.Stopwatcher (); inputDeviceWatcher = null; outputDeviceWatcher.Stopwatcher (); outputDeviceWatcher = null; midiinport.Messagereceived -= MIDIINPORT_MESSAGERECEIDED; midiinport.Descarte (); midiinport = nulo; midioutport.Descarte (); midioutport = nulo; 

Usando o sintetizador do Windows General interno

Quando você enumora os dispositivos MIDI de saída usando a técnica descrita acima, seu aplicativo descobrirá um dispositivo MIDI chamado “Microsoft GS Wavetable Synth”. Este é um sintetizador MIDI geral interno que você pode reproduzir em seu aplicativo. No entanto, a tentativa de criar um outport MIDI para este dispositivo falhará, a menos que você tenha incluído a extensão do SDK para o sintetizador interno em seu projeto.

Para incluir a extensão geral do Midi Synth SDK em seu projeto de aplicativo

  1. Em Solution Explorer, Sob o seu projeto, clique com o botão direito do mouse Referências e selecione Adicione referência.
  2. Expandir o Janelas universais nó.
  3. Selecione Extensões.
  4. Na lista de extensões, selecione Microsoft General MIDI DLS para aplicativos universais do Windows.

Nota Se houver várias versões da extensão, selecione a versão que corresponde ao alvo para o seu aplicativo. Você pode ver qual versão SDK seu aplicativo está segmentando no Aplicativo guia das propriedades do projeto.

Drivers MIDI do Windows 10: como instalá -los em algumas etapas

Como instalar drivers MIDI

Para corrigir vários problemas de PC, recomendamos o DriverFix: Este software manterá seus motoristas em funcionamento, mantendo -o a salvo de erros comuns de computador e falha de hardware. Verifique todos os seus drivers agora em 3 etapas fáceis:

  1. Baixe o driverfix (arquivo de download verificado).
  2. Clique Inicia escaneamento Para encontrar todos os drivers problemáticos.
  3. Clique Atualizar drivers Para obter novas versões e evitar o mau funcionamento do sistema.
  • Driverfix foi baixado por 0 leitores este mês.

MIDI é o termo técnico para interface digital de instrumentos musicais e consiste em um dispositivo capaz de se conectar a uma infinidade de dispositivos musicais.

Os motoristas MIDI foram originalmente feitos para controlar os teclados de um computador. Os motoristas MIDI evoluíram ao longo dos anos e agora são usados ​​por milhões de usuários do Windows 10 em todo o planeta.

Um caso específico diz respeito aos drivers MIDI do Windows 10 Bluetooth, pois eles parecem ainda mais delicados e podem facilmente não ser reconhecidos pelo Windows.

O Windows 10 suporta MIDI sobre o Bluetooth?

Sim, sim. Basta abrir o Configurações no seu PC e vá para Dispositivos, então Bluetooth e outros dispositivos. Aqui, selecione Bluetooth e emparelhe seu dispositivo.

No entanto, alguns usuários relataram que seu dispositivo MIDI não era mais reconhecido após uma atualização do Windows. Se esse também é o seu caso, aqui&rsquo;s o que sugerimos:

  • Exclua todos os dispositivos MIDI conectados e tente emparelhá -los novamente (como mostrado acima)
  • Clique com o botão direito do mouse no ícone de volume na barra de tarefas e selecione Sons. Se seu dispositivo MIDI estiver faltando, escolha Mostrar dispositivos desconectados/desativados e veja se isso ajuda.

Como faço para instalar drivers MIDI no Windows 10?

1. Use o solucionador de problemas do Windows

  1. Navegue até o Barra de tarefas caixa de pesquisa.
  2. Tipo Solucionar problemas.
  3. Selecione Solucionar problemas da lista.
  4. Selecione Hardware e dispositivos do solucionador de problemas.
  5. Depois que o solucionador de problemas abrirá clique Próximo.
  6. Selecione o programa que não está funcionando na lista povoada.
  7. Selecione a opção de solução de problemas desejada.

A maioria dos hardware é plug-and-play. Isso significa que eles apenas se conectam ao computador e o computador instalará os drivers corretos.

Isso não&rsquo;sempre malha nos usuários&rsquo; favor e o mergulhador deve ser baixado de uma fonte diferente. Antes de reservar um tempo para procurar um motorista executar as seguintes tarefas para solucionar o problema:

O solucionador de problemas testará o programa para garantir que ele esteja funcionando. Execute o solucionador de problemas de compatibilidade para outros programas que não são compatíveis.

Não compatível? Não é um problema

  1. Clique na caixa de pesquisa da barra de tarefas.
  2. Tipo Executar programas.

  3. Selecione Execute programas feitos para versões anteriores do Windows.
  4. Isso abrirá o Solução de problemas de compatibilidade.
  5. Siga os avisos na tela.

Então você&rsquo;Tentei executar o solucionador de problemas e não&rsquo;t trabalho. Que&rsquo;está bem, volte e tente novamente. Existe uma maneira de tornar seu programa compatível com sua versão do Windows. Aqui&rsquo;s Como fazer isso:

Certifique -se de executar o solucionador de problemas de compatibilidade para cada programa que precisa de drivers.

Dica especializada:

PATROCINADAS

Os motoristas desatualizados são o principal motivo de erros e problemas do sistema. Se alguns de seus arquivos estiverem faltando ou travando, uma solução automatizada como Driverfix pode resolver esses problemas em apenas alguns cliques. E também é leve em seu sistema!

Você está tendo problemas com o solucionador de problemas do Windows? Aqui&rsquo;é um ótimo guia para consertar o solucionador de problemas se ele parou de funcionar para você.

2. Procure drivers

Instalar manualmente os drivers é sua próxima opção. A instalação manual de drivers pode ser perigosa se você estiver baixando drivers de uma fonte desconhecida ou não reconhecida.

Certifique -se de que todos os motoristas sejam baixados de fontes confiáveis, como fabricantes&rsquo; sites.

Atualize os drivers automaticamente

Se você não for&rsquo;Não quero ter o problema de pesquisar manualmente na web o driver mais recente disponível, sugerimos o uso de um software de atualizador de driver de terceiros que o fará automaticamente por você.

O software não apenas atualizará seu firmware facilmente, mas também digitalizará constantemente seu dispositivo para novos drivers por si só, então você não&rsquo;até tenho que fazer isso.

3. Executar no modo de compatibilidade

  1. Encontre o programa que você&rsquo;estou procurando correr em Modo de compatibilidade.
  2. Clique com o botão direito do mouse no programa e selecione Propriedades.
  3. Clique no Guia Compatibilidade.
  4. Clique na caixa em modo de compatibilidade.
  5. Selecione a versão do Windows em que o programa é capaz de trabalhar.
  6. Clique em Aplicar.

A maioria dos programas tem a opção de executar no modo de compatibilidade. Para fazer com que seu programa seja executado neste modo, execute as etapas acima mencionadas.

Leia mais sobre este tópico

  • Corrija o erro de violação do driver no Windows 10
  • Como corrigir o erro de drivers desatualizado no Windows 11
  • Windows não pode baixar drivers? Corrija agora com essas soluções
  • Corrija o erro acpi_driver_internal no Windows 10
  • Vendo o código de erro do driver 32? Corrija em 4 etapas simples

4. Quando tudo falha

Os drivers MIDI são significativamente mais difíceis de instalar no Windows 10 devido a vários problemas de compatibilidade. Cada uma das correções mencionadas neste artigo poderia potencialmente corrigir o problema do seu motorista.

Se você&rsquo;Ficar sem opções Ligue para o fabricante para o seu dispositivo e peça assistência ou para um local de drivers compatíveis.

Que&rsquo;S sobre isso para este artigo. Se você tiver algo a acrescentar sobre o assunto, fique à vontade para fazê -lo na seção de comentários abaixo.

  • motorista
  • Guias do Windows 10

Aprimoramentos MIDI no Windows 10

À medida que o Windows 10 evolui, continuamos a construir em suporte para tecnologias focadas em músicas.

Deixar&rsquo;s Dê uma olhada no MIDI. O Windows teve suporte MIDI embutido, voltando aos dias de 16 bits. Desde então, a maioria das interfaces MIDI se moveu para USB e nosso suporte na caixa acompanhou o ritmo, com um driver de classe e APIs que suportam essas novas interfaces.

Aqueles que não estão familiarizados com a tecnologia musical podem pensar em Midi como apenas .arquivos de música intermediária. Mas isso&rsquo;é apenas uma pequena parte do que Midi realmente é. Desde sua padronização em 1983, Midi permaneceu o protocolo de comunicação mais usado e indiscutivelmente mais importante na produção musical. Isto&rsquo;S Usado para tudo, desde controlando sintetizadores e sequenciadores e alterações de patches para listas de set, sincronizando misturadores e até trocando de câmeras em podcasts usando uma superfície de controle MIDI. Até o protocolo Arduino Firmata é baseado no MIDI.

Neste post, nós&rsquo;eu falarei sobre várias coisas novas que&rsquo;Criei para tornar o MIDI ainda mais útil em seus aplicativos:

  • UWP Midi Basics – Usando MIDI em aplicativos da Windows Store
  • Novo suporte Bluetooth Le Midi na atualização do Windows 10 Anniversary
  • O wrapper Win32 para UWP MIDI (tornando a API acessível para aplicativos de desktop)
  • Bibliotecas auxiliares MIDI para C# e PowerShell

Além disso, incluímos vários aprimoramentos focados em áudio quando o Windows 10 foi lançado no verão passado. Esses aprimoramentos incluíram: melhorias de baixa latência no WASAPI, trabalho adicional de motorista com parceiros para optar por buffers menores para menor latência em dispositivos modernos do Windows 10, como superfície e telefones como o 950/950XL; ajustes para ativar o processamento de áudio bruto sem qualquer DSP de adição de latência; uma nova API de áudio e efeitos de áudio e efeitos de baixa latência chamada Audiograph; E, claro, uma nova API UWP MIDI.

Nós&rsquo;Também adicionou suporte recentemente ao áudio espacial para experiências imersivas. No outono passado, na atualização de 1511, permitimos o suporte ao sistema operacional muito prospectivo para dispositivos de áudio Thunderbolt 3, para garantir que nós&rsquo;Re lá quando os fabricantes começam a criar esses dispositivos e seus drivers de áudio de alto desempenho. Cumulativamente, esse foi um ótimo trabalho da Windows Engineering, todos segmentando músicos e aplicativos de criação de música.

UWP Midi Basics

No Windows 10 RTM, no ano passado, introduzimos uma nova API MIDI, acessível a aplicativos UWP em praticamente todos os dispositivos Windows 10, que fornecem uma maneira moderna de acessar essas interfaces MIDI. Criamos esta API para fornecer uma base de alto desempenho e flexível sobre a qual podemos criar suporte para novas interfaces MIDI.

Originalmente, colocamos esta API para comentar como um pacote Nuget no Windows 8.1 e recebeu muitos feedback dos desenvolvedores de aplicativos. O que você vê no Windows 10 é um resultado direto desse feedback e de nossos testes.

A API se conecta muito bem com a enumeração do dispositivo e as APIs de observador em UWP, facilitando a detecção de dispositivos Hot Plug/Unlow.

Aqui&rsquo;é uma maneira simples de obter uma lista de dispositivos MIDI e seus IDs, usando C#:

usando o Windows.Dispositivos.Midi;
usando o Windows.Dispositivos.Enumeração;
..
ASYNC PRIVADO VOID LISTMIDIDEVICES ()
// enumerar dispositivos de entrada

var deviceList = aguardar o dispositivo de dispositivo.Findallasync (
Midiinport.GetDeviceSelector ());

foreach (var dispositivo de dispositivo no deviceLista)
Sistema.Diagnóstico.Depurar.WriteLine (DeviceInfo.Eu ia);
Sistema.Diagnóstico.Depurar.WriteLine (DeviceInfo.Nome);
Sistema.Diagnóstico.Depurar.WriteLine (“———-“);
>

// Os dispositivos de saída são enumerados da mesma maneira, mas
// Usando MIDIOUTPORT.GetDeviceSelector ()
>

E aqui&rsquo;s Como configurar um observador e lidar com eventos de enumeração/observador, e também obter a lista de interfaces conectadas. Isso é um pouco mais de código, mas&rsquo;é uma abordagem mais apropriada para a maioria dos aplicativos:

private void startwatchingInputDevices ()
Var Watcher = DeviceInformation.Createwatcher (
Midiinport.GetDeviceSelector ());

observador.Adicionado += onmidiInputDeviceadded;
observador.Removido += onmidiInputDeviceremoved;
observador.Enumeração computada += onmidiInputDeviceEnumerationCompleted;

private vazio onmidiInputDeviceEnumationCompleto (
Remetente de dispositivo de dispositivo, objeto args)
// A enumeração inicial está completa. Isso é quando
// você pode apresentar uma lista de interfaces para o
// Usuário do seu aplicativo.
>

private vazio onmidiInputDeviceRemoved (
Remetente de dispositivo de dispositivo, deviceInformationUpdate args)
// lida com a remoção de um dispositivo de entrada MIDI
>

private vazio onmidiinputDeviceadded (
Remetente de dispositivo de dispositivo, deviceNformation args)
// lida com a adição de um novo dispositivo de entrada MIDI
>

Usar um observador para listar dispositivos e manusear add/remover é uma prática recomendada a seguir em seus aplicativos. Ninguém quer reiniciar seu aplicativo só porque eles esqueceram de conectar ou ligar o controlador MIDI. O uso do observador facilita para o seu aplicativo lidar adequadamente com essas adições/remoções em tempo de execução.

A API é simples de usar, com classes fortemente digitadas para todas as mensagens padrão, além de suporte para operações baseadas em sysex e buffer. Este exemplo C# mostra como abrir portas de entrada e saída e responder a mensagens MIDI específicas.

usando o Windows.Dispositivos.Midi;
usando o Windows.Dispositivos.Enumeração;
..
ASYNC PRIVADO VOID MIDIEXAMPLEME ()
String outportId = “ID que você passa pela enumeração do dispositivo”;
string inportId = “Id você passa pela enumeração do dispositivo”;

// Porta de saída aberta e envie uma mensagem
var Outport = aguarda midioutport.Fromidasync (OutportId);
var noteonMessage = novo MidinoteonMessage (0, 110, 127);
outport.SendMessage (NoteOnMessage);

// Abra uma porta de entrada e ouça mensagens
var inport = aguarda midiinport.Fromidasync (INPORTID);
emport.MessagerEceived += onmidimessagerEceded;
>

private vazio onmidimessageeced (remetente Midiinport,
MidimessageReceiveEventArgs args)
Switch (args.Mensagem.Tipo)
Case MidimessageType.NoteOn:
quebrar;
Case MidimessageType.PolyphonickeyPressure:
quebrar;
// etc.
>
>

Na maioria dos casos, você inspecionaria o tipo de mensagem e depois lançaria a imidimessage para uma das mensagens fortemente tibididas definidas no Windows.Dispositivos.Namespace midi, como MidinoteonMessage ou MidipitchBendChanGemessage. Você&rsquo;Não é necessário fazer isso, no entanto; Você sempre pode trabalhar nos bytes de dados brutos se preferir.

A API MIDI UWP Windows 10 é adequada para criar todos os tipos de aplicativos Windows Store focados em música. Você pode criar superfícies de controle, sequenciadores, sintetizadores, aplicativos de serviços públicos, bibliotecários de patch, controladores de iluminação, sintetizadores de bobina Tesla de alta tensão e muito mais.

Assim como as APIs MIDI mais antigas, a API MIDI UWP Windows 10 funciona bem com complementos de terceiros, como Tobias Erichsen&rsquo;S Great Rtpmidi Driver, fornecendo suporte para midi sobre rede com fio e Wi-Fi.

Uma ótima característica da nova API é que é multi-cliente. Enquanto todos os aplicativos com a porta Open estejam usando a API MIDI UWP Windows 10 e não as APIs Win32 MME ou DirectMusic mais antigas, elas podem compartilhar o mesmo dispositivo. Isso é algo que os Apis mais antigos don&rsquo;T manipular sem motoristas personalizados e foi um pedido comum de nossos parceiros e clientes.

Finalmente, é&rsquo;É importante observar que a API MIDI UWP Windows 10 trabalha com todos os dispositivos MIDI reconhecidos, independentemente de usam drivers de classe ou seus próprios drivers personalizados. Isso inclui muitos utilitários MIDI baseados em software implementados como drivers no Windows 10.

New Bluetooth Le Midi Suporte no UWP MIDI

Além do suporte multi-cliente e das melhorias nós&rsquo;Fez em desempenho e estabilidade, um bom motivo para usar a API MIDI UWP MIDI do Windows 10 é por causa de seu suporte a novos padrões e transportes.

A Microsoft participa ativamente do processo de padrões MIDI e possui representantes nos grupos de trabalho. Há vários de nós dentro da Microsoft que participam diretamente da criação, examinando e votando de padrões para MIDI e para áudio em geral.

Um padrão MIDI emocionante e relativamente novo, que vem ganhando popularidade rapidamente é o Bluetooth Le Midi. A Microsoft votou para ratificar o padrão com base no trabalho pioneiro que a Apple fez neste espaço; Como resultado, a Apple, a Microsoft e outros são compatíveis com um padrão que está vendo tração real na comunidade musical e já possui vários periféricos compatíveis.

Na edição de aniversário do Windows 10, nós&rsquo;incluiu suporte in-box para Bluetooth Le Midi para qualquer aplicativo usando a API Windows 10 UWP MIDI.

Na edição de aniversário do Windows 10, nós&rsquo;incluiu suporte in-box para Bluetooth Le Midi para qualquer aplicativo usando a API Windows 10 UWP MIDI. Esta é uma adição que não requer alterações no seu código, pois a interface em si é simplesmente outro transporte transparente surgido pela API MIDI.

Esse tipo de interface MIDI usa o rádio Bluetooth já no seu PC, telefone, dispositivo IoT ou outro dispositivo Windows 10 para conversar com os periféricos Bluetooth Midi, como teclados, pedais e controladores. Atualmente, o próprio PC pode&rsquo;não seremos periféricos, mas nós&rsquo;estou olhando para isso para o futuro. Embora existam um ótimo DIN MIDI para Bluetooth Le Midi e adaptadores semelhantes por aí, nenhum hardware adicional é necessário para o Bluetooth Le Midi no Windows 10, desde que seu PC tenha um rádio Bluetooth LE.

Sabemos que a latência é importante para os músicos, por isso garantimos que nossa implementação seja competitiva com outras plataformas. Obviamente, o Bluetooth tem maior latência que uma conexão USB com fio, mas essa troca pode valer a pena para eliminar a desordem de cabo.

Quando emparelhado, o Bluetooth Le Midi Periférico será exibido como um dispositivo MIDI no explorador de dispositivos e será automaticamente incluído na enumeração do dispositivo MIDI UWP. Isso é completamente transparente ao seu aplicativo.

Para obter mais informações sobre como descobrir e emparelhar dispositivos, incluindo dispositivos Bluetooth Le Midi, consulte o exemplo de enumeração e emparelhamento do dispositivo no GitHub.

Adicionamos essa capacidade no Windows 10 Anniversary Edition como resultado direto do feedback de parceiro e cliente. EU&rsquo;Estou realmente empolgado com o Bluetooth Le Midi no Windows 10 e os dispositivos que agora podem ser usados ​​no Windows 10.

Image1

Suporte de aplicativos para desktop para a API UWP MIDI

Sabemos que a maioria dos músicos usa o desktop win32 daws e utilitários ao fazer música. A API UWP MIDI é acessível a aplicativos de desktop, mas sabemos que o acesso a APIs UWP de diferentes idiomas e ambientes de construção pode ser um desafio.

Para ajudar os desenvolvedores de aplicativos para desktop com a nova API e reduzir o atrito, meu colega Dale Stammen em nossa equipe WDG/PAX Spark montou um invólucro Win32 para o Windows 10 UWP MIDI API.

O trabalho que nossa equipe faz, incluindo este invólucro de API, é principalmente orientado por parceiros. Isso significa que, como resultado de solicitações e feedback, criamos coisas para permitir que os parceiros tenham sucesso no Windows. Um dos parceiros com quem trabalhamos ao criar isso é Cakewalk, fabricantes do aplicativo Popular Sonar Desktop Daw.

É isso que seus desenvolvedores tinham a dizer sobre o invólucro Win32 para a API MIDI UWP e nosso apoio ao Bluetooth Le Midi:

&ldquo;Nós&rsquo;Fico feliz em ver a Microsoft suportando a especificação Bluetooth MIDI e expondo -a aos desenvolvedores do Windows através de uma API simplificada. Usando o novo invólucro Win32 para a API UWP MIDI, conseguimos prototipar o suporte Bluetooth MIDI muito rapidamente. No Cakewalk nós&rsquo;estou olhando para o futuro para suportar periféricos sem fio, então esta é uma adição muito bem -vinda da Microsoft.&rdquo;

Noel Borthwick, CTO, Cakewalk

Image2

Adoramos trabalhar com grandes parceiros como Cakewalk, sabendo que o resultado beneficiará diretamente nossos clientes em comum.

Este invólucro Win32 simplifica o uso da API como qualquer API plana Win32. Ele surge todas as capacidades da API MIDI UWP Windows 10 e remove o requisito para que seu aplicativo Win32 seja UWP-ADEARE. Além disso, aí&rsquo;s Nenhum requisito para usar C ++/CX ou alterar suas ferramentas e processos de construção. Aqui&rsquo;S A C ++ Win32 Console App Exemplo:

// Abra a porta midi out 0
resultado = gmidioutPortopenfunc (midiptr, 0, & gmidioutport);
if (resultado != Winrt_no_error)
Cout Goto Cleanup;
>

// Envie uma nota na mensagem para a porta midi out
buffer de char não assinado [3] = < 144, 60 , 127 >;
cout gmidioutportSendfunc (gmidioutport, buffer, 3);

// Envie uma mensagem de anotação para a porta Midi Out
buffer cout [0] = 128;
gmidioutportSendfunc (gmidioutport, buffer, 3);

Esta API é otimizada para trabalhar com aplicativos Win32 existentes, por isso renunciamos a mensagens MIDI fortemente digitadas e trabalhamos com matrizes de bytes, assim como os desenvolvedores de aplicativos de música win32 são usados ​​para.

Nós&rsquo;ainda estou recebendo feedback de parceiros e desenvolvedores no invólucro da API e adoraria o seu. Você pode encontrar o código -fonte no github. Podemos mudar o local mais tarde, então o AKA.MS Link (http: // aka.ms/win10midiwin32) é o que você deseja manter à mão.

Para desenvolvedores usando versões recentes do Visual Studio, nós&rsquo;Também disponibilizou um pacote nuget prático.

Nós&rsquo;já estou trabalhando com os parceiros de aplicativos para desktop para incorporar em seus aplicativos nesta API usando este invólucro, bem como outros aprimoramentos de áudio e experiência do usuário no Windows 10. Se você tem um aplicativo de desktop segmentando músicos profissionais e tiver dúvidas, entre em contato comigo em @pete_brown no Twitter, ou Pete Dot Brown na Microsoft Dot Com.

Bibliotecas auxiliares MIDI para aplicativos da Windows Store

Além do invólucro da API Win32, também temos algumas bibliotecas ajudantes menores para desenvolvedores de aplicativos e usuários do PowerShell.

O primeiro é o meu auxiliar de API MIDI UWP Windows 10, para aplicativos C#, VB e C ++ Windows Store. Isso foi projetado para facilitar a enumerar os dispositivos MIDI, se vincular aos resultados em xaml e responder a quaisquer alterações de plug/desconectar a quente. Isto&rsquo;está disponível como fonte e como um pacote Nuget compilado.

Inclui uma aula de observador com coleções vinculáveis ​​/ observáveis ​​amigáveis ​​para XAML para as instâncias de informação do dispositivo.

Mensagens RPN e NRPN

Além disso, a biblioteca auxiliar contém código para ajudar com RPN (número de parâmetro registrado) e mensagens NRPN (número de parâmetro não registrado). Isso pode ser mais desafiador para os novos desenvolvedores trabalharem porque são mensagens lógicas compostas por várias mensagens diferentes agregadas juntas, enviadas em sucessão.

Image3

Porque expusemos as janelas.Dispositivos.MIDI.Interface Imidimessage no UWP, e o código de saída MIDI subjacente envia o que estiver no buffer, criar classes de mensagens agregadas fortemente digitadas foi bastante fácil. Ao enviar mensagens, você usa essas classes como qualquer outra mensagem midi fortemente digitada.

EU&rsquo;M Investigando a incorporação de suporte para o MPE proposto (expressão polifônica multidimensional), bem como para analisar e agregar as mensagens RPN e NRPN recebidas. Se esses recursos seriam úteis para você em seus próprios aplicativos, entre em contato comigo e me avise.

Gerador de relógio MIDI

Uma outra peça que a biblioteca inclui é um gerador de relógio MIDI. Se você precisar de um gerador de relógio MIDI (não para um loop de controle de sequenciador, mas apenas para produzir mensagens de relógio de saída), a biblioteca contém uma implementação que você achará útil. Aqui&rsquo;é como você o usa de C#:

midiclockGenerator privado _clock = new MidiclockGenerator ();

..
_relógio.SendmidistartMessage = true;
_relógio.SendmidistopMessage = true;

foreach (Informações de informação de dispositivo no DeviceWatcher.OutputPortDescriptores)
var porta.Fromidasync (info.Eu ia);

if (porta != nulo)
_relógio.OutputPorts.Add (porta);
>

public void StartClock ()
_relógio.Começar();
>

Public Void StopClock ()
_relógio.Parar();
>

Meu repositório do GitHub inclui a fonte C ++/CX e um aplicativo C#/XAML Client. Como um aparte: este foi o meu primeiro projeto C ++/CX. Embora eu ainda ache C# mais fácil para a maioria das tarefas, achei C ++ CX aqui bastante acessível. Se você&rsquo;Re um desenvolvedor C# que pensou em usar C ++ CX, dê um giro. Você pode achar mais familiar do que espera!

Esta biblioteca ajudará os desenvolvedores a seguir as melhores práticas para aplicativos MIDI na Windows Store. Assim como nos aplicativos de desktop, se você&rsquo;está construindo um aplicativo focado no músico aqui e tenha perguntas, entre em contato comigo em @pete_brown no Twitter, ou Pete Dot Brown no Microsoft Dot Com.

A Segunda Biblioteca Auxiliar é um conjunto de comandos PowerShell para usar a API Windows 10 UWP MIDI. EU&rsquo;Conversei com indivíduos que estão usando isso para automatizar o Script de atualizações MIDI para sincronizar vários misturadores em uma grande instalação e outros que o estão usando como &ldquo;cola&rdquo; Para traduzir mensagens entre diferentes dispositivos. Lá&rsquo;é muito que você pode fazer com PowerShell no Windows 10, e agora Midi faz parte disso. O repo inclui exemplos de uso, então eu ganhei&rsquo;t Repita isso aqui.

Conclusão

EU&rsquo;Estou realmente empolgado com o trabalho que continuamos fazendo no espaço de áudio para ajudar músicos e desenvolvedores de aplicativos de música no Windows.

No total, a API UWP MIDI, o invólucro Win32 para a API UWP MIDI e as bibliotecas auxiliares para aplicativos da Windows Store e para script PowerShell tornam isso possível para aplicativos e scripts aproveitarem a mais recente tecnologia MIDI no Windows 10, incluindo Bluetooth Midi.

EU&rsquo;Estou realmente ansioso pelo próximo desktop e aplicativos da Windows Store, que suportarão essa API, e tecnologias como o Bluetooth Le Midi. E, como mencionei acima, entre em contato comigo diretamente se você&rsquo;está construindo um aplicativo profissional direcionado ao músico e precisa de orientação ou de outra forma, tenha dúvidas.

Recursos

  • Comece a desenvolver aplicativos UWP
  • Dispositivos.Documentação de namespace midi
  • Amostra oficial do Windows 10 UWP MIDI
  • Repo Github para o invólucro midi win32
  • Pete&rsquo;s repositórios github com projetos MIDI e de áudio
  • Pacote Nuget para o wrapper Win32 Midi
  • Pete Brown Summer NAMM 2015 palestra sobre o Windows 10
  • A Associação MIDI
  • Um estúdio na palma da sua mão: desenvolvendo aplicativos de criação de áudio e vídeo para Windows 10
  • Áudio espacial com audiografia em UWP
  • Áudio espacial em aplicativos e jogos UWP

Baixe o Visual Studio para começar.

A equipe do Windows adoraria ouvir seu feedback. Por favor, mantenha o feedback que vem usando o site do Windows Developer UserVoice. Se você tiver um bug direto, use a ferramenta de feedback do Windows criada diretamente no Windows 10.

Driver de porta midi

O motorista da porta midi gerencia um sintetizador MIDI ou dispositivo de captura. O driver do adaptador fornece um driver MIDI Miniport correspondente que se liga ao objeto de driver da porta MIDI para formar um filtro MIDI (consulte Filtros MIDI e DirectMusic) que podem capturar ou renderizar um fluxo MIDI.

O driver da porta midi expõe uma interface iportmidi para o driver de miniplort. IPORTMIDI herda os métodos na interface base iport. IPORTMIDI Fornece os seguintes métodos adicionais:

Notifica o driver de porta que o sintetizador MIDI ou o dispositivo de captura avançou para uma nova posição no fluxo MIDI. IPORTMIDI :: RegisterServiceGroup

Registre um objeto de grupo de serviço no driver da porta. Um grupo de serviços contém uma lista de uma ou mais rotinas de serviço que devem ser chamadas quando o Miniport Driver Challs Notificar; Para obter mais informações, consulte Objetos de Sia de Serviço e Grupo de Serviços.

Os objetos do porto Midi e Miniport se comunicam através de seus respectivos IPORTMIDI e interfaces iminiportmidi. O motorista do miniport usa o driver da porta IPORTMIDI Interface para notificar o driver de porta de interrupções de hardware. Além disso, o motorista do porto se comunica com os objetos de fluxo do Miniport Driver através de suas interfaces iminiportmidistream.

No Windows XP e mais tarde, o IPORTMIDI e interfaces iportdmus são implementadas em um único módulo de driver interno. Esta consolidação é facilitada pela semelhança dessas duas interfaces. Por exemplo, os mesmos métodos são definidos para ambas as interfaces. Aplicações escritas para versões anteriores do Windows não devem ver alterações no comportamento do IPORTMIDI e IPORTDMUS Interfaces resultantes da consolidação dos drivers de porta MIDI e DMUS.

Opinião

Envie e veja o feedback para

Aprimoramentos MIDI no Windows 10

Aprimoramentos MIDI no Windows 10

Recentemente, Pete Brown, da Microsoft, publicou um post muito informativo sobre aprimoramentos MIDI no Windows 10.

A postagem do blog abrange vários tópicos, incluindo

  • UWP Midi Basics – Usando MIDI em aplicativos da Windows Store
  • Novo suporte Bluetooth Le Midi na atualização do Windows 10 Anniversary
  • O wrapper Win32 para UWP MIDI (tornando a API acessível para aplicativos de desktop)
  • Bibliotecas auxiliares MIDI para C# e PowerShell

Aprimoramentos MIDI no Windows 10 | Construindo aplicativos para janelas

“Estamos felizes em ver a Microsoft suportando a especificação Bluetooth MIDI e expondo -a aos desenvolvedores do Windows através de uma API simplificada. Usando o novo invólucro Win32 para a API UWP MIDI, conseguimos prototipar o suporte Bluetooth MIDI muito rapidamente. No Cakewalk, estamos olhando para o futuro para suportar periféricos sem fio, então esta é uma adição muito bem -vinda da Microsoft.”

por Noel Borthwick, CTO, Cakewalk

Há também uma boa explicação no artigo de Pete de como RPNs e NRPNs funcionam e sua estrutura de dados.

Com o lançamento do Windows 10, todas as três principais empresas de sistemas operacionais (Apple, Google e Microsoft) desenvolveram suporte para o padrão da Midi Manufacturers Association para MIDI Over Bluetooth Low Energy, que pode ser encontrado na seção de especificações deste site e está disponível para download por membros da Midi Association sem carga.